基础知识 · 2024年 9月 13日·45 次浏览 0

串口通信数据包介绍和包结构定义实例

在串口通信中,使用数据包(数据帧)是为了确保数据的完整性、可靠性以及高效的传输。串口通信是一个低级别的逐字节传输机制,使用数据包可以提供很多优势:

1. 数据完整性与边界划分

串口通信逐字节发送数据,而接收方无法直接知道数据的起始和结束位置。通过数据包的封装,能够明确传输的数据起点和终点。

  • 数据边界:数据包通常包含一个起始位和结束位,明确数据的边界,帮助接收方正确解析和分隔数据。
  • 避免粘包与拆包:串口通信是一个连续的数据流,多个数据包可能会黏在一起,或者一个数据包可能被拆分成多个传输段。使用特定的起始和结束标志可以避免这些问题。

2. 错误检测与纠正

在串口通信中,传输过程中可能会出现噪声或干扰,导致数据错误。使用数据包可以在数据中添加校验机制来检测和纠正这些错误。

  • 校验位:常用的错误检测方法是加入校验位(如 CRC、奇偶校验),通过对接收到的数据进行校验,确保数据的完整性。如果发现错误,可以请求重新发送数据包。

3. 协议控制

数据包能够提供对通信协议的支持。串口通信本身是无状态的,而数据包可以封装协议信息,让双方按照特定的规则进行通信。

  • 控制信息:数据包不仅可以传输数据,还可以传输控制信息,例如包头(header)、包尾(trailer)、命令码、数据长度等。这些信息可以帮助接收方解释数据的意义、进行多任务处理或识别不同类型的通信请求。

4. 提高传输效率

如果没有数据包,数据流传输的开销会增加,尤其是对于长时间传输或复杂数据时。通过打包,可以分段发送大数据块,同时进行优化处理。

  • 分段传输:将长数据拆分成多个较小的数据包,允许发送方和接收方可以逐包确认数据,而不是等待整个数据流传输完毕才进行验证。

5. 流量控制和重传机制

在数据包中可以引入流量控制、应答机制及重传功能,增强通信的可靠性。比如在接收数据时,可以根据包的确认信息(ACK)请求重新发送丢失或损坏的数据。

6. 设备兼容性与标准化

使用标准的数据包格式可以在不同设备之间保持兼容性,使通信系统更容易互操作。例如,常见的串口通信协议如 ModbusCANRS-232 等,都使用标准化的数据包格式来确保设备间的互通。

7. 简化解析和处理

数据包结构有助于简化数据解析。接收方知道如何解析数据包的头部、数据区和校验码,不必在每个字节上进行复杂的操作。

8.数据包的典型结构

一个常见的数据包结构可能如下:

  • 起始位(Header):标识数据包的开始。
  • 长度字段:表示数据区的长度。
  • 数据区:实际传输的数据内容。
  • 校验字段(Checksum):用于检测数据包的完整性。
  • 结束位(Trailer):标识数据包的结束。

9.下面是我常用的一种数据包定义

开头长度命令数据CRC校验结尾
FF  AA2字节2字节N字节(0~200)2字节无结尾
波特率:115200  无校验位  8位数据位  1位停止位

数据格式:大端模式

CRC校验:CRC-16-CCITT-FALSE 多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低位在后,高位在前,结果与0x0000异或

举例:FFAA 0001 0102 88 04F3 代表包命令是0x0102,包长度是1字节,数据是0x88,校验0x04F3
CRC在线校验工具:https://www.lddgo.net/encrypt/crc https://crccalc.com/

总结

使用数据包的主要目的是提高串口通信的可靠性和有效性,确保数据传输完整、准确,并简化设备之间的通信流程。通过数据包,可以实现更加复杂的协议,提供错误检测、流量控制等机制,使串口通信更具鲁棒性。