1. RS485通信基础与Linux内核支持
RS485作为一种工业级差分串行通信标准,凭借其抗干扰能力强、传输距离远(最长1200米)、支持多点通信(最多32个节点)等特性,在工业自动化、智能仪表等领域广泛应用。与常见的RS232相比,RS485采用差分信号传输(A/B两线电压差表示数据),能够有效抑制共模干扰。
在Linux内核中,RS485功能是通过串口驱动层实现的。自Linux 3.0内核起,官方引入了标准的RS485 API(定义在include/uapi/linux/serial.h中),主要包含以下关键数据结构:
c复制struct serial_rs485 {
__u32 flags; // 控制标志位
__u32 delay_rts_before_send; // 发送前RTS延迟(ms)
__u32 delay_rts_after_send; // 发送后RTS延迟(ms)
__u32 padding[5]; // 保留字段
};
其中flags字段支持的重要标志包括:
- SER_RS485_ENABLED:启用RS485模式
- SER_RS485_RTS_ON_SEND:发送时RTS有效
- SER_RS485_RTS_AFTER_SEND:发送后保持RTS
- SER_RS485_RX_DURING_TX:支持全双工通信
注意:不同厂商的UART控制器对RS485的支持程度不同,全志T113使用的sunxi系列UART需要特别关注其硬件流控实现方式。
2. 全志T113平台硬件适配
全志T113-i工业级处理器内置多个UART控制器,其中UART3通常设计为RS485接口。其硬件连接示意图如下:
code复制T113 UART3 TXD ----+---> MAX485 DI
|
T113 RTS引脚 ------+---> MAX485 DE/RE#
|
MAX485 A/B -------+---> RS485总线
关键硬件特性:
- 使用MAX485/SP3485等常见收发器芯片
- RTS引脚控制收发器方向(高电平发送,低电平接收)
3
