T113-S3开发板调试串口不够用?手把手教你将Tina Linux的默认调试口从UART0切换到UART1

T113-S3开发板调试串口切换实战:从UART0迁移到UART1的完整指南

在嵌入式开发中,调试串口如同工程师的"眼睛",但当默认的UART0被LCD或其他外设占用时,如何快速切换至UART1而不影响原有功能?本文将深入剖析全志T113-S3平台下Tina Linux系统的串口切换全流程,从硬件引脚配置到内核参数调整,手把手解决开发过程中的"盲操作"困境。

1. 硬件基础与问题诊断

T113-S3芯片提供多个UART控制器,但默认调试输出绑定在UART0(PD18/PD19)。当这些引脚被复用为其他功能时(如LCD数据线),开发者会面临两种选择:重新设计硬件或修改软件配置。后者显然更具成本效益。

典型冲突场景检测方法

# 查看当前串口映射
cat /proc/tty/driver/serial
# 检查引脚复用状态
sunxi-pin -l | grep PD

常见问题表现:

  • Uboot阶段无任何输出
  • 内核启动日志消失
  • 系统启动后 /dev/ttyS0 设备不存在

提示:在修改前,建议先用万用表测量UART1引脚(PD21/PD22)是否已被其他电路占用,避免电平冲突。

2. 系统级配置修改链

2.1 sys_config.fex引脚重定义

首先修改硬件描述文件,路径通常为:

Tina-Linux/config/device/config/chips/t113/configs/[方案名]/sys_config.fex

关键修改项:

[uart_para]
uart_debug_port = 1       ; 将0改为1
uart_debug_tx = port:PD21<4><1><default><default>
uart_debug_rx = port:PD22<4><1><default><default>

[uart1] 
uart_used = 1             ; 启用UART1控制器
uart_port = 1             
uart_tx = port:PD21<4><1><default><default>
uart_rx = port:PD22<4><1><default><default>

参数说明:

  • <4> 表示功能复用选择(具体值需查芯片手册)
  • <1> 表示上拉电阻使能
  • 必须确保与冲突外设(如LCD)的引脚定义不重复

2.2 Uboot双重配置调整

Uboot需要两处关键修改:

  1. defconfig文件
# 修改默认控制台索引
CONFIG_CONS_INDEX=2       # 1对应UART0,2对应UART1
  1. uboot-board.dts设备树
&uart1 {
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&uart1_pins_a>;
    pinctrl-1 = <&uart1_pins_b>;
    status = "okay";
};

/ {
    chosen {
        stdout-path = "serial1:115200n8";  // 关键修改点
    };
};

警告:若Uboot阶段仍无输出,可尝试短接TX/RX形成回环测试,确认硬件通路正常。

3. 内核启动参数精调

3.1 环境变量配置

修改 env.cfg 文件中的启动参数:

bootargs=console=ttyS1,115200 earlycon=sunxi-uart,0x02500400 root=/dev/mmcblk0p2 rootwait

地址计算规则:

  • UART0基址:0x02500000
  • 每个UART偏移0x400
  • 因此UART1地址为0x02500400

3.2 内核配置验证

检查Linux内核配置:

make menuconfig ARCH=arm

确保以下选项正确:

Device Drivers → Character devices → Serial drivers →
  [*] Sunxi serial port support
  (1) Console on Sunxi serial port (NEW)
  (ttyS1) Default sunxi serial device (NEW)

4. 全系统编译与深度调试

4.1 分段编译技巧

建议分步执行编译,便于定位问题:

# 单独编译Uboot
mboot
# 单独编译内核
make kernel
# 打包镜像
pack

4.2 典型故障排查表

现象 可能原因 解决方案
Uboot无输出 引脚复用冲突 检查sys_config.fex与设备树一致性
内核无日志 启动参数错误 确认earlycon地址和ttyS编号
系统启动后无ttyS1 驱动未加载 检查内核配置CONFIG_SERIAL_SUNXI

高级调试手段

# 查看内核早期打印缓冲区
dmesg | grep -i uart
# 检查串口驱动加载状态
ls /sys/class/tty/ttyS1/device/driver

5. 多串口管理实战技巧

成功切换后,可进一步优化多串口使用:

  1. 权限管理
# 永久设置串口访问权限
echo 'KERNEL=="ttyS1", MODE="0666"' > /etc/udev/rules.d/50-uart.rules
  1. 性能调优
// 示例:修改FIFO阈值提高吞吐量
struct serial_rs485 rs485_conf = {
    .flags = SER_RS485_ENABLED | SER_RS485_RTS_ON_SEND,
    .delay_rts_before_send = 1,
};
ioctl(fd, TIOCSRS485, &rs485_conf);
  1. 引脚状态监控脚本
#!/usr/bin/env python3
import os
for pin in ["PD21", "PD22"]:
    with open(f"/sys/class/gpio/{pin}/value") as f:
        print(f"{pin} state: {f.read().strip()}")

在完成所有修改后,建议使用逻辑分析仪捕获串口波形,确认波特率、数据位等参数符合预期。实际项目中,我们曾遇到因硬件滤波电容导致信号畸变的情况,通过减小电容值最终使通信稳定在1Mbps速率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值