RS485 通信测试
本章使用 RS485-1 和一个 USB 转 RS485 模块完成双向收发。当前固件中 RS485-1 对应 UART5
(PJ0/PJ1,/dev/ttyAS5)。RS485-2 的 PJ4/PJ5 只能复用为 UART7,而 UART7 当前已分配给
AIC8800D80 蓝牙,所以默认固件不能同时使用蓝牙和 RS485-2。
| 板载功能 | SoC 资源 | 当前固件 | 设备节点 |
|---|---|---|---|
| RS485-1 | UART5,PJ0/PJ1 | 可用 | /dev/ttyAS5 |
| AIC 蓝牙 | UART7,PB11~PB14 | 默认启用 | /dev/ttyAS7 → hci0 |
| RS485-2 | UART7,PJ4/PJ5 复用 | 默认不可用 | 与蓝牙二选一后仍为 /dev/ttyAS7 |
默认 /dev/ttyAS7 已由 hciattach 打开并连接蓝牙。不要向它写入 RS485 数据,否则会破坏蓝牙
HCI 通信。要使用 RS485-2,必须停用蓝牙初始化、把 UART7 pinctrl 改到 PJ4/PJ5,重新编译并烧录。
准备工作
- USB 转 RS485 模块和三根连接线
- 一台 Ubuntu 主机
- 当前板卡原理图或接口丝印说明
- 串口调试和 ADB 两个终端中的至少一种
- 已进入开发板串口终端
硬件连接
断电后连接开发板 RS485-1 和 USB 转 RS485 模块:
OmniGate-T153 RS485-1 A -------- USB-RS485 A
OmniGate-T153 RS485-1 B -------- USB-RS485 B
OmniGate-T153 GND -------- USB-RS485 GND
RS485 接口位于开发板左侧绿色端子。A/B 的准确端子顺序以 PCB 丝印和当前批次原理图为准;没有共地时通信可能不稳定。
确认设备节点
在 开发板 Linux Shell执行:
ls -l /dev/ttyAS5
dmesg | grep -Ei 'ttyAS5|uart5'
当前 OmniGate Buildroot 的 Modbus RTU 默认端口为:
RS485-1:/dev/ttyAS5
默认 Modbus 参数:9600 8N1
如果 /dev/ttyAS5 不存在,先确认当前镜像和设备树,不要用其他 /dev/ttyAS* 节点盲试:
dmesg | grep -Ei 'uart5|ttyAS5'
grep -n ttyAS5 /proc/tty/driver/serial 2>/dev/null
本次 ADB 设备节点记录
本次没有连接 USB-RS485 对端,可确认 UART 节点、默认参数和 UART7 占用关系:
# dmesg | grep -Ei 'ttyAS5|ttyAS7'
uart-ng5: ttyAS5 at MMIO 0x2605000 (irq = 47, base_baud = 1500000) is a SUNXI
uart-ng7: ttyAS7 at MMIO 0x2607000 (irq = 48, base_baud = 1500000) is a SUNXI
# ls -l /dev/ttyAS5 /dev/ttyAS7
crw-rw---- 1 root root 242, 5 /dev/ttyAS5
crw-rw---- 1 root root 242, 7 /dev/ttyAS7
# stty -F /dev/ttyAS5 -a
speed 9600 baud; line = 0;
-parenb -parodd cs8 -cstopb cread clocal -crtscts
# ps | grep hciattach
360 root hciattach -n /dev/ttyAS7 aic
结果表明 RS485-1 对应的 /dev/ttyAS5 已注册,采集时串口为 9600 8N1;/dev/ttyAS7
正在被蓝牙 hciattach 使用。本记录尚未验证 RS485 收发器和 A/B 端子,必须继续做外部回环。
设置波特率
在 开发板 Linux Shell执行:
stty -F /dev/ttyAS5 115200 cs8 -cstopb -parenb raw -echo
插入 USB 转 RS485 后,在 Ubuntu 主机确认新出现的节点。下面假设它是 /dev/ttyUSB0:
ls -l /dev/ttyUSB*
sudo stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb raw -echo
测试开发板发送
在 Ubuntu 主机终端 1监听:
sudo cat /dev/ttyUSB0
在 开发板 Linux Shell发送:
echo 'OmniGate RS485 TX' > /dev/ttyAS5
Ubuntu 主机看到 OmniGate RS485 TX,表示开发板发送正常。按 Ctrl+C 停止监听。
测试开发板接收
在 开发板 Linux Shell监听:
cat /dev/ttyAS5
在 Ubuntu 主机终端 2发送:
echo 'USB RS485 TX' | sudo tee /dev/ttyUSB0 >/dev/null
开发板看到 USB RS485 TX,表示开发板接收正常。
echo 测试只能证明基础收发文本测试能确认 UART、收发器和 A/B 接线,但不能代替 Modbus RTU 验证。Modbus 是二进制帧, 还需要相同的地址、功能码、CRC、波特率和串口格式。基础收发通过后再使用实际主从站程序测试。
测试通过标准
- 已根据当前批次接口丝印正确连接 A、B 和 GND。
- 两端使用相同的波特率、数据位、停止位和校验设置。
- 开发板发送的文本能被 Ubuntu 主机接收,主机发送的文本也能被开发板接收。
常见故障
- 完全收不到:检查 A/B 是否接反、两端是否共地、端子是否选对;
- 偶发乱码:确认两端均为 115200 8N1,并检查线长、屏蔽和终端电阻;
- 只能单向:检查自动收发使能电路和对端转换器方向控制;
/dev/ttyAS5busy:执行fuser /dev/ttyAS5或ps查找占用进程;- RS485-2 不工作:这是当前蓝牙/UART7 资源选择,不是靠
chmod设备节点可以解决的。
量产验收时,应分别记录两路接口的设备节点、端子顺序、波特率、收发结果和蓝牙取舍。
转换器型号:
开发板节点:/dev/ttyAS5
主机节点:/dev/ttyUSB__
串口参数:115200 8N1
开发板 → 主机:通过 / 失败
主机 → 开发板:通过 / 失败