11. 串口通讯
1. RK3568 串口控制器硬件介绍
1.1 RK3568 串口控制器特性
RK3568芯片集成6个UART控制器(UART0~UART5),支持以下功能:
全双工异步通信:支持同时收发数据。
可编程波特率:波特率范围 1200bps ~ 4Mbps,支持高精度时钟配置。
数据位长度:支持 5/6/7/8位 数据位。
校验方式:支持 无校验、奇校验、偶校验。
停止位:支持 1位 或 2位 停止位。
FIFO缓冲:每个UART内置 64字节收发FIFO,减少CPU中断频率。
中断与DMA支持:支持中断驱动或DMA传输,提升效率。
多模式支持:支持 TTL电平(默认)、RS232、RS485 模式(需硬件电路支持)。
1.2 串口引脚与复用
• 默认调试串口:UART2(TTL电平),用于系统启动日志输出。
引脚定义:
TX:GPIO0_D1(UART2_TX)
RX:GPIO0_D0(UART2_RX)
• 其他UART接口:
UART编号 | 引脚复用(示例) | 典型用途 |
---|---|---|
UART0 | GPIO1_B3 (TX), GPIO1_B2 (RX) | 通用串口扩展 |
UART3 | GPIO3_C0 (TX), GPIO3_C1 (RX) | RS485通信 |
• 电平切换:若需RS232/RS485,需外接电平转换芯片(如MAX3232/MAX485)。
1.3 设备树配置示例
在设备树中配置UART2为调试串口:
// 文件:rk3568.dtsi
&uart2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart2m0_xfer>; // 使用pinctrl复用引脚
// 若需RS485模式,添加以下属性:
// rs485-rts-active-low;
// rts-gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>;
};
2. UART通信协议基础
2.1 UART数据帧结构
UART以异步串行方式传输数据,每帧数据包含以下部分:
起始位:1位低电平(
0
),标志数据开始。数据位:5~8位,传输实际数据(如ASCII字符)。
校验位:1位(可选),用于检错(奇/偶校验)。
停止位:1~2位高电平(
1
),标志数据结束。
典型帧格式(8N1):
[Start Bit] [D0][D1][D2][D3][D4][D5][D6][D7] [Stop Bit]
0 1 1 0 0 1 0 1 0 1
2.2 波特率与时钟计算
波特率:每秒传输的符号数(1符号=1位),如 115200bps 表示每秒传输115200位。
时钟分频:
RK3568的UART时钟源为 24MHz,波特率计算公式:
分频系数 = 时钟频率 / (16 × 波特率)
例如,配置 115200bps:
分频系数 = 24,000,000 / (16 × 115200) ≈ 13.02 → 取整为13
2.3 常见配置参数
参数 | 可选值 | 说明 |
---|---|---|
波特率 | 1200, 2400, 9600, 115200, 等 | 决定通信速率 |
数据位 | 5, 6, 7, 8 | 常用8位 |
校验位 | 无校验 (None)、奇校验 (Odd)、偶校验 (Even) | 检错机制 |
停止位 | 1, 2 | 常用1位 |
流控 | 无流控 (None)、硬件流控 (RTS/CTS) | 防止数据丢失 |
3 连接和配置
3.1 RK3568调试串口连接
默认调试串口:UART2(TTL电平)。
连接方式:
USB转TTL工具 | RK3568 Debug接口 |
---|---|
RX | TX (GPIO0_D1) |
TX | RX (GPIO0_D0) |
GND | GND |
RS485连接(以UART3为例):
# 设备树中启用RS485模式 &uart3 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart3m1_xfer>; rs485-rts-active-low; rts-gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; };
• 接线:A接RS485总线A线,B接B线,RTS控制发送使能。
参考板卡的硬件介绍从对应板卡中找到标号带有
DEBUG
文字的接口,如果没有可以查找文档或者网盘中相关硬件资料。调试串口一般为TTL电平,因此需要准备一个
USB转TTL
工具,如果是其它电平,比如RS485,则可以准备一个USB转RS485
工具,或者使用三合一串口工具。在电脑端安装串口工具对应的驱动 生成对应的端口 用来与开发板通信,要安装的驱动常见的有
ch340/ch341
系列或者cp210x
系列。可从下方链接获取:
如果不是上述两个系列的驱动,则可以询问卖家获取相关信息和链接。
串口工具只需关注三个接口,丝印标识类似Rx
、Tx
、GND
,其它接口一般不需要使用。对应的连接如下:
串口工具接口 | 板卡上的Debug接口 |
---|---|
Rx | Tx |
Tx | Rx |
GND | GND |
3.1.1 多串口扩展
若需使用其他UART接口(如UART0),需在设备树中启用并配置引脚复用:
&uart0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart0m1_xfer>; // 使用GPIO1_B3和GPIO1_B2
};
3.2 链接PC调试
打开串口调试终端,如XShell、MobaXterm等,此处以XShell为例。
点击文件-->打开创建一个新的会话,点击串口创建一个串口会话。
端口号选择对应插入的端口,如果不知道具体哪个,可通过重新插拔串口工具观察新增的是哪个端口。点击修改波特率为1500000(默认),最后点击链接即可
点击
OK
以后,板卡上电启动即可在终端看见相关信息。
3.3 常见问题
如果终端出现打印乱码、不能输入等问题,可参考下述解决方案:
查看串口波特率是否正确。
查看硬件接线是否正确,是否松动,串口工具和板卡接口是否共地。
尝试将
Tx
,Rx
的连接对换,变成Tx->Tx
,Rx->Rx
。串口工具是否损坏,尝试更换串口工具。
如果上述都没有解决问题,考虑板卡硬件损坏,可问询相关技术人员。
4. 软件配置与验证
4.1 查看系统串口设备
ls /dev/ttyS* # 输出:/dev/ttyS0 /dev/ttyS1 ...(对应UART0~UART5)
4.2 使用stty配置串口参数
# 配置UART1(/dev/ttyS1)为115200 8N1
stty -F /dev/ttyS1 115200 cs8 -cstopb -parenb
4.3 测试数据收发
• 发送数据:
echo "Hello, RK3568!" > /dev/ttyS1
• 接收数据:
cat /dev/ttyS1 # 或使用screen工具:screen /dev/ttyS1 115200
5. 常见问题扩展
5.1 数据乱码
• 原因:波特率不匹配、时钟偏差、引脚接触不良。 • 解决:
# 检查当前波特率配置
stty -F /dev/ttyS1
5.2 无法接收数据
• 原因:TX/RX接线反接、未启用UART控制器。 • 解决:
# 确认设备树中UART状态为"okay"
dmesg | grep uart # 查看内核启动日志
总结
通过补充RK3568串口硬件特性与协议基础,开发者可深入理解UART工作原理,准确配置设备树与软件参数,快速排查通信故障。结合实操步骤与示例,确保串口通信稳定可靠。