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

sea*_*ean 2 serial-port serial-communication xbee

我期待通过简单的通信在2个设备之间实现串行通信.

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

有什么特别的原因,或者我可以使用任何角色作为替代.

G.Y*_*G.Y 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上阅读有关HDLC的更多信息(查看框架主题)

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