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电平(默认)、RS232RS485 模式(需硬件电路支持)。


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. 起始位:1位低电平(0),标志数据开始。

  2. 数据位:5~8位,传输实际数据(如ASCII字符)。

  3. 校验位:1位(可选),用于检错(奇/偶校验)。

  4. 停止位: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系列。可从下方链接获取:

如果不是上述两个系列的驱动,则可以询问卖家获取相关信息和链接。

串口工具只需关注三个接口,丝印标识类似RxTxGND,其它接口一般不需要使用。对应的连接如下:

串口工具接口 板卡上的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为例。

  1. 点击文件-->打开创建一个新的会话,点击串口创建一个串口会话。 image-20241225163153301

  2. 端口号选择对应插入的端口,如果不知道具体哪个,可通过重新插拔串口工具观察新增的是哪个端口。点击修改波特率为1500000(默认),最后点击链接即可 image-20241225163153301

  3. 点击OK 以后,板卡上电启动即可在终端看见相关信息。 image-20241225163153301

3.3 常见问题

如果终端出现打印乱码、不能输入等问题,可参考下述解决方案:

  1. 查看串口波特率是否正确。

  2. 查看硬件接线是否正确,是否松动,串口工具和板卡接口是否共地。

  3. 尝试将TxRx的连接对换,变成Tx->TxRx->Rx

  4. 串口工具是否损坏,尝试更换串口工具。

  5. 如果上述都没有解决问题,考虑板卡硬件损坏,可问询相关技术人员。


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工作原理,准确配置设备树与软件参数,快速排查通信故障。结合实操步骤与示例,确保串口通信稳定可靠。