编辑: 无理的喜欢 | 2019-07-03 |
AM335x 一共有六个串口,分别是 UART
0、UART
1、UART
2、UART
3、UART
4、UART5,六个串口一 般能满足大部分的项目需求,如果还嫌少,可以使用带 PRU 的AM335x 芯片,PRU 可以模拟四路 串口,也即,板上可以跑
10 路串口. 写这篇文章,主要是想帮助客户更加清晰的明白修改 UART 的流程. 由于 TI 发布的 SDK,大部分都是默认 UART0 作为调试串口.但在一些项目中,由于引脚的复 用或冲突,很多客户希望灵活的改变 UART 口去打印调试信息,也即引导 SPL、Uboot、Kernel 这 三个过程的信息.但是由于 Linux SDK 的Uboot 过程较为复杂,文件较多,宏定义不明显等等原因, 再加上 SDK 各个版本差异性,使得如此简单的一个修改串口的过程也让客户难以下手或者修改不 成功.所以以下通过本人的测试和经验,对processor SDK 3.0 和EZSDK6.0 修改串口做出总结和对 比.希望能够帮助大家. EZSDK6.0 修改默认 UART 比较简单,processor SDK 3.0 修改起来可能复杂一点,那我先从简单 出发,先介绍 EZSDK6.0 是如何修改,再说明 processor SDK 3.0 是如何修改. 一.EZSDK6.0 修改 SPL 和U-boot 的串口打印的步骤 1. uboot 在make 时,makefile 会调用 mkconfig,mkconfig 会根据 boards.cfg 生成 config.h, config.h 包含相关的宏定义,宏定义决定了编译的方向.所以首先需要修改的是 boards.cfg,修改板卡类型对应的行,比如所需编译的板卡是 am335x_evm,将uart0 修改 为uart1,操作如下: am335x_evm arm armv7 am335x ti am33xx am335x_evm:SERIAL1,CONS_INDEX=1 am335x_evm arm armv7 am335x ti am33xx am335x_evm:SERIAL2,CONS_INDEX=2 生成的对应板卡的 config 区别: 2. 根据板卡的 pin mux 分配功能引脚 I/O,修改 mux.c (board\ti\am335x),主要修改结构体 module_pin_mux 里面的 OFFSET(x)和mode(x),如UART2,除了这里表示的引脚,你还可以选 择其他引脚. 可以下载 TI 的PIN MUX 工具,它非常方便帮你生成相关引脚的程序配置,还可以在画原理图之前, 非常可视化的帮你规划引脚分配问题,下载和教程的 LINK 如下: http://processors.wiki.ti.com/index.php/Pin_Mux_Utility_for_ARM_MPU_Processors /* Automatically generated - do not edit */ #define CONFIG_SERIAL1
1 #define CONFIG_CONS_INDEX
1 #define CONFIG_SYS_ARCH "arm" #define CONFIG_SYS_CPU "armv7" #define CONFIG_SYS_BOARD "am335x" #define CONFIG_SYS_VENDOR "ti" #define CONFIG_SYS_SOC "am33xx" #define CONFIG_BOARDDIR board/ti/am335x #include #include #include #include #include #include /* Automatically generated - do not edit */ #define CONFIG_SERIAL2
1 #define CONFIG_CONS_INDEX
2 #define CONFIG_SYS_ARCH "arm" #define CONFIG_SYS_CPU "armv7" #define CONFIG_SYS_BOARD "am335x" #define CONFIG_SYS_VENDOR "ti" #define CONFIG_SYS_SOC "am33xx" #define CONFIG_BOARDDIR board/ti/am335x #include #include #include #include #include #include static struct module_pin_mux uart2_pin_mux[] = { {OFFSET(spi0_sclk), (MODE(1) | PULLUP_EN | RXACTIVE)}, /* UART2_RXD */ {OFFSET(spi0_d0), (MODE(1) | PULLUDEN)}, /* UART2_TXD */ {-1}, };
3.修改 Hardware.h (arch\arm\include\asm\arch-am33xx)中的串口基地址,如将 UART0 改为 UART1, 操作如下: #define DEFAULT_UART_BASE UART1_BASE 在Hardware_am33xx.h (arch\arm\include\asm\arch-am33xx) 增加宏定义: #define UART1_BASE 0x481AA000 4. 如果想 linux image 也是用这个串口显示的话.修改 Am335x_evm.h (include\configs)下的引导变 量"console=ttyO0,115200n8\0" \,比如将 UART0 改为 UART1,操作如下: "console=ttyO1,115200n8\0" \ 5.完成前面三部后,Make 编译成功后,并在板子上进行 bootload,可以发现:通过你配置的 UART 口,可以在终端上可以看到 SPL、Uboot、kernel 引导时的信息,但是 kernel 结束后,进入 文件系统,这时文件系统还是默认 UART0 作为调试串口,所以若想在文件系统也采用直自己定义 的串口进行调试打印,修改如下: 在文件系统中,打开文件/etc/inittab ,可以看到以下信息: S:2345:respawn:/sbin/getty