[具身智能-578]:RDK原生只有3.3V TTL Uart,如何支持外设422接口通信?

RDK X5 3.3V TTL UART 转 RS422 完整方案

一、RS422 与 RS485 核心区别

  1. RS485:半双工,A/B 差分总线,同一时间只能发或收,需要 DE/RE 收发切换 GPIO;
  2. RS422:全双工,独立两对差分线:
    • 发送差分:TX+、TX-
    • 接收差分:RX+、RX- 收发通道物理隔离,可同时发送 + 接收不需要 GPIO 做收发切换
  3. RDK 仅输出 3.3V TTL TX/RX,无差分驱动,必须通过TTL 转 RS422 芯片电平转换。

二、常用转换芯片:MAX3490 / SP3490(3.3V 供电,适配 RDK)

MAX3490 引脚定义(全双工 422)

表格

引脚名称功能对接 RDK 信号
DITTL 发送输入RDK UART_TX
ROTTL 接收输出RDK UART_RX
DE发送驱动器使能(高有效)固定接 VCC(永久打开发送)
/RE接收使能(低有效)固定接 GND(永久打开接收)
Y422 发送正 TX+外设 RS422 TX+
Z422 发送负 TX-外设 RS422 TX-
A422 接收正 RX+外设 RS422 RX+
B422 接收负 RX-外设 RS422 RX-
VCC3.3VRDK 3.3V
GND电源地RDK GND(必须共地)

关键简化接法(无需 GPIO 控制)

  • DE 直接接 3.3V,发送通道永久开启;
  • /RE 直接接 GND,接收通道永久开启; 全程无需 GPIO 切换收发,上电即可同时收发。

三、完整硬件接线(RDK 3.3V TTL ↔ MAX3490 ↔ 外部 RS422 设备)

1、RDK → MAX3490 板内 TTL 侧

/dev/ttyS1(40PIN PIN8/PIN10)为例:

表格

RDK BOARD 引脚信号MAX3490 引脚
PIN8UART_TXDI
PIN10UART_RXRO
PIN13.3VVCC、DE
PIN6GNDGND、/RE

2、MAX3490 → 远端 RS422 外设差分总线侧(4 根差分线)

表格

MAX3490 差分引脚RS422 外设引脚说明
Y (TX+)RX+主机发送 → 外设接收
Z (TX-)RX-
A (RX+)TX+外设发送 → 主机接收
B (RX-)TX-

差分交叉规则:本机 TX 差分接对方 RX 差分,本机 RX 差分接对方 TX 差分。

四、外围电路配套设计

  1. 电源去耦电容VCC-GND 并联 0.1μF 陶瓷电容,紧贴芯片引脚,抑制电源噪声。
  2. 总线终端电阻 120ΩRS422 长线、高速场景(>10m、≥19200bps),在总线两端差分线之间各焊接 120Ω 电阻;短距离低速可省略。
  3. 电平匹配硬性要求必须选用 3.3V 版本 MAX3490,5V 型号 RO 引脚输出 5V 电平会击穿 RDK 3.3V IO。
  4. 共地强制要求RDK、转换模块、远端 422 设备三地必须连通 GND,否则差分压差漂移,出现乱码 / 丢包。
  5. 线缆选用:4 芯屏蔽双绞线,屏蔽层单端接地,抵御电机、继电器电磁干扰。

五、软件编程(无需 GPIO,比 485 更简单)

核心特点

无 DIR 切换引脚,不存在收发延时等待,写完串口立刻就能读返回数据,代码简化。

python

运行

#!/usr/bin/env python3 import serial import time # 串口配置 UART_DEV = "/dev/ttyS1" BAUD = 9600 if __name__ == "__main__": ser = serial.Serial( port=UART_DEV, baudrate=BAUD, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=0.02 ) print("RS422 full-duplex running, no GPIO dir control") try: while True: # 全双工:发送同时可实时接收 send_buf = b"010300000001840A" ser.write(send_buf) print("Send:", send_buf.hex()) # 直接读取总线返回数据,无需等待发送完成 recv_buf = ser.read(32) if recv_buf: print("Recv:", recv_buf.hex()) time.sleep(0.5) except KeyboardInterrupt: pass finally: ser.close()

六、RS422 与 RS485 方案对比

表格

项目RS485 (半双工)RS422 (全双工)
差分信号线2 根 (A/B)4 根 (TX+/TX-,RX+/RX-)
收发控制需要 1 路 GPIO 切换 DE/RE无需 GPIO,永久收发
通信能力同一时刻只能发或收收发同时进行,实时双向
芯片MAX3485MAX3490
代码复杂度高,需计算发送延时极简,原生串口读写
适用场景一主多从总线组网点对点高速双向通信

七、常见故障排查

  1. 只能发,收不到数据
    • MAX3490/RE未接 GND,接收通道关闭;
    • 总线 RX+/RX - 差分线接反;
    • RDK RX (RO) 引脚接线断开。
  2. 只能收,发不出数据
    • DE 引脚未接 3.3V,发送通道关闭;
    • TX 差分 Y/Z 与外设 RX 差分接反。
  3. 乱码、数据错位 两端波特率 / 校验位不一致;缺少公共地线;长线无 120Ω 终端电阻。
  4. 短距离正常,长线通信失效 未使用屏蔽双绞线,无终端电阻,电磁干扰严重。

八、多路 RS422 扩展方案

  1. 原生硬件 UART 多路:ttyS1ttyS2ttyS3,每路搭配一片 MAX3490,独立 422 总线;
  2. USB 转 RS422 模块:插入 USB 口生成/dev/ttyUSBx,无需占用 40PIN 引脚,适合临时调试扩展。