为什么0x7E通常用作通信协议中的起始分隔符?

时间:2014-02-17 02:30:23

标签: serial-port serial-communication xbee

我希望通过简单的通信在2台设备之间实现串行通信。

似乎HDLC和xBee中使用的协议使用 0x7E 作为起始分隔符。

是否有任何特殊原因或我可以使用任何角色作为替代。

1 个答案:

答案 0 :(得分:6)

原因与数据框架有关。

  • 他们需要一个标志着传输开始和结束的标志。
  • 如果需要,他们希望能够复制那个标志几次 - 例如,如果你发送
    01111110 01111110 01111110 - 与其他集合相比,很容易识别出这个集合,即使某些位没有到达另一侧,因此它更容易出错。 (0x7E的= 01111110)

扩展示例:

机器1已发送:01111110 01111110 01111110
接收错误的一些选项:
机器2 recv:011110011111001111110 - 注意你可以非常容易地识别3帧 机器2 recv:11111001111110011111 - 再次你可以很容易识别3帧。
机器2 recv:01111110111111001111110 - 再一次可以很容易地确定3帧。

现在让我们看看如果我们选择不同的序列作为标志会发生什么。

示例1:

机器1已发送:01011010 01011010 01011010(此处标记为01011010
接收错误的一些选项:
机器2 recv:010010100101101001011010 - 你无法识别那些是否是偶数帧..

例2:

机器1已发送:00011000 00011000 00011000(此处标记为00011000
接收错误的一些选项:
机器2 recv:00110000001100000011000 - 这个是好的...我们可以很容易地看到3帧...但是..
机器2 recv:0010000001100000011000 - 这更难..可能是3帧但不能确定..

您可以在Wikipedia information about HDLC中阅读更多内容(查看主题框架)

还有一件事...... SO Folks我知道这有火焰可能性:) 请记住,我没有选择这个仲裁序列。我只解释了这个特定序列作为选择的原因。