一、串口的本质:硬件接口标准
串口(Serial Port)
定义:一种通过串行通信(逐位顺序传输)实现数据收发的物理接口标准。
层级定位:属于OSI模型的物理层,定义电气特性、连接器形状、信号传输方式等硬件规范。
常见类型:
- RS-232:传统计算机串口(如9针DB9接口),传输距离短(<15米)。
- RS-485:工业级差分信号接口,支持长距离(>1200米)和多设备通信。
- TTL-UART:单片机常用的5V/3.3V电平串口(如Arduino的TX/RX引脚)。
核心功能
仅负责将数据转换为电平信号并通过物理线路传输,不涉及数据含义或格式。
二、串口通信中的“协议”是什么?
协议的必要性
硬件层(串口)仅传输原始比特流,但设备间需约定:
- 如何识别数据起始/结束?
- 如何校验数据正确性?
- 如何解析数据含义?
- 这些规则即通信协议,属于OSI模型的数据链路层或应用层。
串口通信中常见的协议
基础协议(数据链路层):
UART协议:定义帧结构(起始位、数据位、停止位、奇偶校验位)和波特率同步。
例如:发送字节 0x55时,实际传输的比特流为:
起始位(0)+8位数据(01010101)+停止位(1)
应用层协议:
- Modbus RTU:规定数据帧格式(地址、功能码、数据域、CRC校验)。
- ASCII协议:用可读字符(如A=123\n)表示数据,需约定分隔符和编码方式。
- 自定义协议:用户根据需求设计的数据格式(如[HEAD][LEN][DATA][CRC])。
应用层协议传输消息时,每个字符的物理传输确实依赖UART协议(或其他串行通信协议),但应用层协议的逻辑与UART协议是分层协作的。
具体来说:
UART协议(数据链路层)负责将字符转换为串行比特流(包括添加起始位、停止位等)。
应用层协议(如Modbus、ASCII协议)负责定义消息的语义和结构(如指令格式、数据含义),不直接处理字符的物理传输细节。
三、串口与协议的关系
分层协作
物理层(串口):确保比特流在物理介质上可靠传输。
协议层:赋予比特流实际意义,确保设备正确解析数据。
四、常见误区澄清
误区1:认为“串口=协议”。
正解:串口是硬件标准,协议是软件规则,两者需配合使用。
误区2:忽略协议设计直接传输数据。
后果:设备因无法识别数据格式而通信失败。
五、实例分析
场景:通过RS-485串口发送Modbus RTU指令读取温度值。
应用层协议(Modbus RTU):
生成指令帧: 01 03 00 01 00 02 95 CB(设备地址01,读取寄存器0001的2个字节)。
UART协议:
将每个字符(如 0x01, 0x03)封装为串行帧,添加起始位、停止位。
按9600bps速率发送比特流。
物理层(RS-485):
将UART生成的TTL电平转换为差分信号,通过A/B线传输。
总结
串口是物理层接口标准,不是协议。
硬件层(如RS-232、RS-485)负责传输电平信号。
协议层(如UART帧结构、Modbus)负责定义数据格式和交互规则。
实际应用中,需同时配置串口参数(波特率、数据位等)和协议规则,才能实现有效通信。