当前位置:首页 > 娱乐

串口通信协议有哪些

串口通信协议远不止你听过的串口RS-232、RS-485和UART。通信它们只是协议物理层和数据链路层的“运输工具”,真正决定设备间怎么“说话”的串口,是通信那些被频繁提及却又常被混淆的协议栈。

拿最常见的协议UART来说,它其实只是串口定义了起始位、数据位、通信停止位和波特率——说白了就是协议规定“怎么把字节塞进一根线里”。但两个设备用UART连上之后,串口谁先发?通信发什么格式的数据?收到后怎么应答?这些UART一概不管。于是协议就有了Modbus、CAN、串口LIN这些“上层协议”。通信

Modbus是协议工业现场的老大哥,尤其RTU模式,靠CRC校验和寄存器地址来读写数据。我见过不少新手直接拿串口助手发十六进制报文,结果设备毫无反应——多半是忘了Modbus要求帧间间隔至少3.5个字符时间。这个细节在手册里写得明明白白,但实际操作时总被忽略。

CAN总线则完全是另一套逻辑。它用差分信号传输,抗干扰能力强到能在汽车引擎舱里跑。但CAN的物理层和协议层绑定很紧,ID仲裁、位填充、CRC段——这些机制让CAN在高速率下依然可靠。有意思的是,CAN报文的优先级是靠ID值大小决定的,不是靠发送顺序。这意味着你永远无法保证低优先级帧能及时发出去,这在设计报警系统时是个大坑。

还有个常被低估的角色是LIN总线。它只有一根线,成本低到离谱,专门用来做车窗、后视镜这类不要求实时性的控制。LIN的调度表由主机控制,从机只能被动响应。这种主从模式简单粗暴,但确实省电——整车厂爱它爱得不行。

再说说那些“非标准”协议。很多传感器厂商喜欢自定义协议,比如温湿度模块常见的“发送0x01读取数据,返回5字节”这种格式。这类协议没有统一标准,但胜在实现简单。我调过一款国产风速仪,它的数据帧里居然混着ASCII码和二进制数——手册里还没写清楚,最后靠逻辑分析仪抓波形才猜出来。

别忘了还有SDLC、HDLC这类老古董。它们现在很少出现在教科书里,但金融系统的PIN Pad设备还在用HDLC变种。你刷银行卡时,POS机和密码键盘之间跑的就是这类协议——虽然你完全感觉不到。

挑协议的时候别只看传输速率。UART改个波特率就能跑115200bps,但Modbus RTU在9600bps下反而更稳——因为波特率越高,对线缆和终端电阻的要求越苛刻。我见过有人用劣质USB转串口线跑Modbus 115200,结果一上电就乱码,换成屏蔽双绞线后立刻正常。

最后提醒一句:串口协议最大的坑往往不在协议本身,而在接地。两个设备地电位差超过几伏,什么协议都得报废。隔离芯片比换更贵的线管用得多——这是用烧了三块STM32换来的教训。

分享到: