用户指南
串口协议指南

串口协议指南

本协议旨在通过串口通信传输数据。为了确保数据包的正确传输和接收,我们设计了一种带有包头、数据部分、校验和边界符的协议结构。此协议适用于数据长度不定且需要校验和边界识别的场景。

数据包结构

每个数据包由以下几部分组成:

  1. 边界符(Delimiter):用于标识数据包的开始和结束。边界符是一个独特的字节序列,能够清晰地划分数据包的边界。通常使用 0xAA 0xBB 或其他特定字节序列。
  2. 包头(Header):包含数据包的元信息,用于描述数据包的基本特征。
    • ID(1字节):包头标识符,通常用来标识包的类型或来源。
    • Type(2字节):包类型,表示数据包的处理方式或用途。
    • Length(2字节):数据部分的长度,指示数据字段的字节数。
  3. 数据(Data):实际传输的内容,长度由包头中的 Length 字段指定。
  4. CRC 校验(CRC):用于校验数据包的完整性。CRC 校验字段用于在接收端验证数据是否完整且未被篡改。

数据包格式

每个数据包的具体格式如下所示:

字段长度描述
Delimiter2 字节包的边界符,用于标识数据包的开始和结束
ID1 字节包头标识符,标识数据包的来源或用途
Type2 字节包类型,标识数据包的类型
Length2 字节数据长度,指示数据字段的字节数
Data可变数据部分,长度由 Length 字段决定
CRC4 字节CRC 校验,用于验证数据的完整性

数据包解析流程

数据包的解析流程如下:

  1. 读取边界符:在接收数据时,首先检查是否遇到预定的边界符(例如 0xAA 0xBB)。如果匹配到边界符,说明数据包开始。
  2. 读取包头:包头部分包含包的元信息(ID、Type、Length),通过解析包头,接收端能够了解后续数据部分的长度及如何处理数据。
  3. 读取数据部分:根据包头中的 Length 字段,读取指定长度的数据部分。
  4. 校验数据完整性:使用 CRC 校验字段对数据进行校验。如果校验失败,则丢弃该数据包,等待重新同步。
  5. 处理数据:根据包的类型 Type 进行相应的数据处理。如果数据包有效且校验通过,则继续进行处理。

说明与注意事项

  1. 边界符(Delimiter)
    • 边界符用于标识数据包的边界,防止数据包之间的混淆。常见的边界符是两个字节的特定标识符(如 0xAA 0xBB)。
    • 在实际应用中,接收方应该在每次读取数据时都检查边界符,并将其作为包的起始标识。
  2. 包头(Header)
    • 包头由 IDTypeLength 三个字段组成,确保接收方能够根据包头中的信息正确解析数据部分。
    • ID 用于标识数据包的来源或类型,Type 进一步说明数据包的具体用途,Length 用于指示数据部分的字节数。
  3. 数据部分(Data)
    • 数据部分的长度是由 Length 字段动态确定的,因此每个数据包的长度是可变的。接收方根据 Length 字段读取对应数量的字节数据。
  4. CRC 校验(CRC)
    • CRC 校验是为了确保数据传输过程中数据的完整性。接收方计算接收到的数据的 CRC 校验值并与包中传输的 CRC 校验值进行比对。
    • 如果 CRC 校验失败,则认为数据包无效,可以丢弃并重新接收数据。

协议流程示意图

+--------------------------------------+
|             Delimiter               | <- 2字节,标识包的边界
+--------------------------------------+
|                ID                   | <- 1字节,包标识符
+--------------------------------------+
|               Type                   | <- 2字节,包类型
+--------------------------------------+
|               Length                 | <- 2字节,数据长度
+--------------------------------------+
|                Data                  | <- 可变字节,数据部分
+--------------------------------------+
|                CRC                   | <- 4字节,CRC 校验
+--------------------------------------+

数据包示例

假设我们有一个数据包,它的包头和数据如下:

  • Delimiter: 0xAA 0xBB
  • ID: 0x01
  • Type: 0x02
  • Length: 0x04 (表示数据部分为 4 字节)
  • Data: 0x10 0x20 0x30 0x40
  • CRC: 0x12345678 (假设计算出的 CRC 校验值)

则数据包的结构为:

+------------+------------+------------+------------+---------------------+---------------------+
| 0xAA 0xBB  |  0x01      | 0x02 0x00  | 0x04 0x00  | 0x10 0x20 0x30 0x40 | 0x12 0x34 0x56 0x78 |
+------------+------------+------------+------------+---------------------+---------------------+

总结

该协议设计提供了一个可扩展的框架,适用于串口通信中可靠的数据传输。通过引入边界符、包头、数据长度、CRC 校验等机制,能够有效确保数据传输的完整性和正确性。接收方可以依据协议规则准确地解析数据,并通过 CRC 校验来检测是否存在传输错误。

© 2023-2025 RHILEX Technologies Inc. All rights reserved.