RK3576 设置特殊波特率的核心是基于其 Linux 系统的串口驱动配置,需通过 “硬件确认 - 驱动支持 - 用户空间配置” 三步实现。
一、核心前提:确认硬件与驱动支持
在设置前,必须先确保硬件和驱动能支持自定义波特率,否则配置会失效。
硬件层面:确认 RK3576 所用的串口控制器(如常用的 UART0/UART1)支持 “可编程波特率”。需查阅 RK3576 芯片手册,确认该串口的时钟源(如 APB 时钟)和分频器范围,确保目标波特率可通过时钟分频计算得出。
驱动层面:RK3576 的 Linux 内核中,串口驱动通常基于linux/drivers/tty/serial/rockchip_serial.c。需确保驱动已实现set_termios函数,且支持通过cflag中的CBAUD标志位处理非标准波特率(部分旧驱动仅支持标准波特率,需重新编译驱动)。
二、具体配置步骤
以 “设置串口 UART1 为 123456bps” 为例,分用户空间和内核空间两种场景说明。
1. 用户空间临时配置(无需改内核)
适用于临时测试,重启后失效,需借助stty工具或termios库。
用 stty 命令配置:
先查看串口设备节点,通常为/dev/ttyS1(RK3576 的 UART1 对应节点,需根据实际硬件接线确认)。
执行命令设置特殊波特率:
stty -F /dev/ttyS1 123456 cs8 -cstopb -parity
(参数说明:123456为目标波特率,cs8表示 8 位数据位,-cstopb表示 1 位停止位,-parity表示无校验)。
用 C 语言 termios 库配置:
通过cfsetispeed和cfsetospeed函数设置波特率,需注意非标准波特率需手动指定BOTHER标志(表示自定义波特率),再通过c_ispeed和c_ospeed直接赋值目标波特率。
2. 内核空间永久配置(重启生效)
适用于需要长期固定特殊波特率的场景,需修改设备树和驱动。
修改设备树(DTS):
在 RK3576 的设备树文件(如rk3576.dtsi或自定义板级 DTS)中,找到目标串口节点(如uart1),添加波特率配置:
修改串口驱动:
在rockchip_serial.c中,添加对设备树custom-baudrate属性的解析,在驱动 probe 阶段读取该值,并将其设置为串口的默认波特率,覆盖默认的 9600bps 或 115200bps。
三、常见问题与验证
波特率误差过大:
特殊波特率需通过 “时钟源频率 / 分频系数” 计算得出,若误差超过 5%(工业通信通常要求≤3%),需调整串口时钟源(如更换更高精度的晶振)或修改分频系数。
配置后无响应:
先通过ls /dev/ttyS*确认串口节点存在,再用screen /dev/ttyS1 123456或串口工具(如 minicom)测试通信,排查接线(TX/RX 交叉连接)和权限(需chmod 777 /dev/ttyS1)问题。