HI3559A soc中使用sensor hub的uart0

背景介绍

近期在Hi3559A上开发,项目需要在不启动M7的情况下,通过sensor hub的uart0与外部mcu的通信。根据《外围设备驱动操作指南》中介绍的步骤:

下面提供一个 Soc 使用 Sensor Hub 的 uart0 外设资源的操作示例,SPI 与 I2C 均可参考以下步骤操作:
步骤 1. 配置 menuconfig。在内核源码目录下输入以下命令:
make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- menuconfig
按以下路径选中配置:
Platform selection —->
Enable to access the devices of m7
[*]
保存退出。
步骤 2. 在 uboot 环境配置 Sensor Hub 时钟。可通过使用默认的“config_m7”命令把 Sensor
Hub 的时钟源配置为 PLL(192M)时钟,该命令也同时配置 Sensor Hub 复位请求屏蔽
位为不屏蔽状态。如用户需要自定义 Sensor Hub 配置,可参考《Hi3559A/C V100 ultra-
HD Mobile Camera SoC 用户指南》3.12.6.6 章节。
步骤 3. 配置 Sensor Hub uart0 管脚复用。管脚配置可参考《Hi3559AV100_PINOUT_CN》或
《Hi3559CV100_PINOUT_CN》管脚控制寄存器。Uboot 下通过以下命令修改 uart0 设备
的管脚配置:
mw 0x18050030 0x1
mw 0x18050034 0x1
步骤 4. 修改 dts 文件,把 uart5(uart5 对应的是 Sensor Hub 的 uart0,详细可参考 dtsi 的配置)
的状态改为 okay。重新编译。
步骤 5. 下载编译好的内核镜像至板端并启动,即可通过/dev/ttyAMA5 操作 Sensor Hub 的 uart0设备.

参照以上步骤进行后,uboot的启动log中确实有枚举到sensor hub的uart0, A73这侧会枚举到/dev/ttyAMA5设备。
[ 0.010651] Serial: AMBA PL011 UART driver
[ 0.012245] 12100000.uart: ttyAMA0 at MMIO 0x12100000 (irq = 9, base_baud = 0) is a PL011 rev2
[ 0.475516] console [ttyAMA0] enabled
[ 0.479470] 12101000.uart: ttyAMA1 at MMIO 0x12101000 (irq = 10, base_baud = 0) is a PL011 rev2
[ 0.488413] 12102000.uart: ttyAMA2 at MMIO 0x12102000 (irq = 11, base_baud = 0) is a PL011 rev2
[ 0.497349] 12103000.uart: ttyAMA3 at MMIO 0x12103000 (irq = 12, base_baud = 0) is a PL011 rev2
[ 0.506288] 12104000.uart: ttyAMA4 at MMIO 0x12104000 (irq = 13, base_baud = 0) is a PL011 rev2
[ 0.515232] 18060000.uart: ttyAMA5 at MMIO 0x18060000 (irq = 14, base_baud = 0) is a PL011 rev2

但是,通过该串口发送数据时,t发出数据的速率很低,只有600bps,远远达不到115200,此时就开始怀疑uart控制器的时钟或者sensor hub的时钟配置有问题。
查看了uboot中config_m7命令的实现:

 
  1. static int config_m7(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  2. {
  3. writel(0x069E36E3, SENSOR_HUB_CRG_2);
  4. writel(0x00810001, SENSOR_HUB_CRG_1);
  5. writel(0x03, SENSOR_HUB_CRG_0);
  6. writel(0x1110, SENSOR_HUB_CRG_4);
  7. writel(0x01, SENSOR_HUB_CRG_11);
  8. printf("cortex-M7 is configed!\n");
  9. return 0;
  10. }

通过以上流程看到config_m7配置了sensor hub的pll,选择pll为sensor hub的时钟输入,配置apb总线时钟,m7 cpu时钟等。也许是这里的配置还不够,导致了uart的输出速率很低。

现在我没有执行config_m7, 而是在kernel起来之后,通过himm配置0x1802001c为0x30000002,即设置uart0clk sel为soc_24M,撤销uart0位,uart时钟门控置1, 按照这种配置baud可以得到115200, 即只配置uart
0的相关时钟,没有配置pll及m7 cpu的时钟,这时串口输出速度正常了。

在此先mark一下,后续有时间再仔细查这个问题。

 

原文链接:http://ebaina.com/u-simonhuang/blog-231.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值