保姆级教程:为全志T113-S3的Tina Linux系统配置双串口打印(UART0与UART1)
全志T113-S3双串口配置实战:UART0与UART1并行调试指南
在嵌入式系统开发中,串口调试如同工程师的"听诊器",而全志T113-S3处理器原生支持的多路UART接口往往未被充分利用。本文将深入探讨如何在Tina Linux系统中实现UART0与UART1双通道并行工作,让系统调试与业务通信各司其职。
1. 硬件基础与系统架构解析
全志T113-S3的UART控制器采用ARM标准的PL011架构,但进行了太阳芯(Allwinner)特有的功能扩展。该芯片提供4个独立UART通道,其中UART0默认作为BootROM加载阶段的首选通信接口,这种设计源于历史兼容性考虑。
关键硬件特性对比 :
| 特性 | UART0 | UART1 |
|---|---|---|
| 物理基地址 | 0x02500000 | 0x02500400 |
| 中断号 | 34 | 35 |
| 时钟门控 | CCU_UART0_BGR_REG | CCU_UART1_BGR_REG |
| 默认功能 | Bootloader控制台 | 通常未启用 |
在Tina Linux的启动流程中,串口配置需要贯穿三个关键阶段:
- Boot0阶段 :固化在芯片ROM中的初始加载程序
- U-Boot阶段 :二级引导加载环境
- Linux内核阶段 :最终操作系统环境
注意:UART1的寄存器地址偏移量0x400是PL011架构的标准设计,每个UART控制器占用1KB地址空间,这个值在后续配置中会多次出现。
2. 底层配置修改实战
2.1 设备树与引脚复用配置
首先需要处理引脚复用冲突,T113-S3的PD21和PD22默认可能被分配给其他功能。修改设备树文件:
// Tina-Linux/device/config/chips/t113/configs/mq_r/board.dts
&pio {
uart1_pins_a: uart1@0 {
pins = "PD21", "PD22";
function = "uart1";
drive-strength = <10>;
bias-pull-up;
};
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins_a>;
status = "okay";
};
常见引脚冲突及解决方案:
- LCD数据线冲突 :注释掉相关dts节点或重新规划引脚分配
- SPI片选冲突 :修改SPI设备使能极性
- GPIO按键冲突 :评估功能优先级,必要时移除次要功能
2.2 U-Boot双重配置调整
U-Boot需要两处关键修改:
- defconfig基础配置 :
# 修改sun8iw20p1_defconfig
CONFIG_CONS_INDEX=2 # 将控制台切换到UART1
CONFIG_SUNXI_SERIAL=y
CONFIG_SERIAL_PL011=y
- uboot-board.dts同步更新 :
// 确保与内核设备树保持一致
&uart1 {
compatible = "arm,pl011";
reg = <0x02500400 0x400>;
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_UART1>;
resets = <&ccu RST_BUS_UART1>;
status = "okay";
};
提示:使用
mboot命令可以验证当前激活的U-Boot配置,避免修改未生效的情况。
3. 内核启动参数精调
3.1 早期控制台参数
修改env.cfg中的启动参数:
# 原始UART0配置
# console=ttyS0,115200 earlyprintk=sunxi-uart,0x02500000
# 修改为UART1配置
console=ttyS1,115200 earlycon=sunxi-uart,0x02500400
参数解析:
-
earlycon:内核早期初始化阶段使用的串口驱动 -
0x02500400:UART1的物理基地址 -
ttyS1:Linux设备节点编号,与UART1对应
3.2 内核配置同步更新
修改config-5.4关键选项:
# 串口设备驱动配置
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_SUNXI=y
CONFIG_SERIAL_SUNXI_CONSOLE=y
# 指定控制台索引
CONFIG_SUNXI_UART1_CONSOLE=y
CONFIG_CMDLINE="console=ttyS1,115200"
4. 系统级整合与验证
4.1 编译流程优化
建议的完整编译顺序:
# 清理旧配置
make clean
# 分步编译
make uboot -j$(nproc) # 单独编译U-Boot
make kernel -j$(nproc) # 单独编译内核
make -j$(nproc) # 编译完整系统
# 打包镜像
pack
常见编译问题处理:
-
设备树语法错误 :
Error: board.dts:12.1-9 syntax error解决方案:使用
dtc -I dts -O dtb -o test.dtb board.dts进行单独验证 -
引脚冲突警告 :
pinctrl: pin PD21 already claimed by lcd0解决方案:在相关设备节点添加
status = "disabled"
4.2 运行时验证技巧
多阶段输出验证 :
-
Boot0阶段输出 :
- 保持连接UART0观察初始启动信息
- 正常应显示"HELLO! BOOT0 is starting!"
-
U-Boot阶段切换 :
- UART1应开始显示U-Boot启动日志
- 关键标志:"U-Boot SPL 2021.01"
-
内核阶段双通道 :
- UART1持续输出内核日志
-
UART0可通过
echo "test" > /dev/ttyS0验证通路
高级调试技巧 :
# 查看串口设备注册情况
dmesg | grep ttyS
# 实时监控两个串口
screen /dev/ttyS0 115200
screen /dev/ttyS1 115200
# 压力测试
cat /dev/urandom > /dev/ttyS0 &
cat /dev/urandom > /dev/ttyS1 &
5. 生产环境部署建议
在实际产品中部署双串口方案时,建议考虑以下加固措施:
-
电源管理优化 :
&uart1 { pinctrl-names = "default", "sleep"; pinctrl-1 = <&uart1_sleep_pins>; wakeup-source; }; -
抗干扰设计 :
- 在串口线上串联22Ω电阻
- 添加TVS二极管防护(如SMBJ5.0CA)
- 使用双绞线连接,长度不超过3米
-
系统服务集成 : 创建systemd服务管理串口日志:
# /etc/systemd/system/uart1-logger.service [Unit] Description=UART1 System Logger [Service] ExecStart=/bin/bash -c "cat /dev/ttyS1 | logger -t uart1" Restart=always [Install] WantedBy=multi-user.target -
性能监控指标 :
# 查看串口错误计数 cat /proc/tty/driver/ttyS # 监控FIFO溢出 grep -H "overrun" /proc/interrupts
在完成所有配置后,建议进行72小时连续运行测试,特别关注:
- 高温环境下(85°C)的通信稳定性
- 长时间大数据量传输的误码率
- 系统休眠唤醒后的串口恢复情况
更多推荐
所有评论(0)