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

Serial port 为什么0x7E通常用作通信协议中的开始分隔符?,serial-port,serial-communication,xbee,Serial Port,Serial Communication,Xbee,我期待着实现两个设备之间的串行通信只使用一个简单的通信 似乎HDLC和xBee中使用的协议使用0x7E作为起始分隔符 是否有任何特殊原因,或者我可以使用任何字符作为替代。原因与数据帧有关 他们需要一个标记传输开始和结束的标志 他们希望能够在需要时复制该标志几次——例如,如果您发送 011111110 011111110 01111110-与其他集合相比,即使某些位没有到达另一端,也很容易识别此集合,因此它唯一的缺点是不易出错。 (0x7E=01111110) 扩展示例: 机器1已发送:011

我期待着实现两个设备之间的串行通信只使用一个简单的通信

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


是否有任何特殊原因,或者我可以使用任何字符作为替代。

原因与数据帧有关

  • 他们需要一个标记传输开始和结束的标志
  • 他们希望能够在需要时复制该标志几次——例如,如果您发送
    011111110 011111110 01111110-与其他集合相比,即使某些位没有到达另一端,也很容易识别此集合,因此它唯一的缺点是不易出错。
    (0x7E=01111110)
扩展示例:

机器1已发送:
01111110 01111110 01111110

接收错误的一些选项:
机器2记录:
011110011111111111110
-请注意,您可以很容易地识别3帧。
机器2记录:
11111 001111110011111
-同样,您可以很容易地识别3帧
机器2记录:
011111111111111001111110
-再次识别3帧非常容易

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

例1:

机器1已发送:
01011010 01011010 01011010
(此处选择的标志为
01011010

接收错误的一些选项:
机器2记录:
010010100101101001011010
-您无法识别这些帧是否为偶数帧

例2:

机器1已发送:
00011000001100001000
(此处选择的标志为
000110000

接收错误的一些选项:
机器2记录:
001100000011000000100011000
-这台没问题。。。我们可以很容易地看到3帧。。但是……
机器2记录:
0010000001100000011000
-这更难。。可能是3帧,但不能确定

您可以在中阅读更多内容(检查框架主题)

还有一件事。。所以我知道这有潜在的火焰:)

请记住,我没有选择这个仲裁程序。。我仅解释选择此特定序列的原因。

您使用的是AT模式还是API模式?0x7E只是API模式的起始分隔符,在这种情况下,您必须根据用户指南构造数据包。我只是好奇为什么选择0x7E作为开始分隔符。好的。如果您使用默认的通信方法,即AT模式,则不需要分隔符。有一次(很久以前)研究串行磁带的协议,我可以说您所说的是正确的,但还有一些其他类似的考虑因素。@HotLicks我也知道这些。。但是如果我在回答中包括这些。。“火焰潜能”的数量会更高:)而且,如果我们有机会见面,我想给你买杯啤酒。看来0x3c更适合这个目的(或者0x3e)。我们甚至可以算出确切的最佳值——假设所有位的丢弃概率相等(可能不是0x7e)。。为什么要使用0x7e?@thang我认为这个假设是不正确的。。1很可能比0更容易被删除。。传输1-脉冲需要从一侧到达另一侧,但传输0-无需到达。。然而,在某些情况下,某些东西可能会被钉住,但这种情况很少发生。。此外,~的发生率由于统计数据低于高G.Y,您的答案很好。只是想知道我们为什么不使用ascii表中未显示的内容(例如0x81 1000 0001)是否有原因?