我正在寻找使用简单的通信实现2设备之间的串行通信。0x7E为什么通常用作通讯协议中的起始分隔符?
看来像HDLC和xBee中使用的协议似乎使用0x7E作为起始分隔符。
有什么特别的原因,或者我可以使用任何字符作为替代。
我正在寻找使用简单的通信实现2设备之间的串行通信。0x7E为什么通常用作通讯协议中的起始分隔符?
看来像HDLC和xBee中使用的协议似乎使用0x7E作为起始分隔符。
有什么特别的原因,或者我可以使用任何字符作为替代。
原因与数据的组帧有关。
扩展示例:
机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(检查帧主体)
一件事.. 所以我知道这家伙有火焰潜力:)
P请记住,我没有选择这个仲裁程序。我只是解释了这个特定序列的原因作为选择。
曾经(很久以前)曾经为串行磁带协议工作过,我可以说你说的是真的,但也有一些其他的考虑因素也是类似的。 –
@HotLicks我也知道这些......但如果我将这些包含在我的答案中,“flame-potential”的数量将会高得多:) 而且,如果我们想要给你买啤酒遇到。 –
似乎0x3c会更好,为此目的(或0x3e为此)。而且甚至可以计算出最好的#假设所有位都有相同的丢弃概率(并且可能不是0x7e)。为什么使用0x7e? – thang
您是否使用AT模式或API模式? 0x7E只是API模式的起始分隔符,在这种情况下,您必须根据“用户指南”构建数据包。 – LeonardBlunderbuss
嗨,我没有使用xBee。我只是好奇为什么选择0x7E作为起始分隔符。 – sean
好的。那么如果你使用AT模式的默认通信方式,则不需要分隔符。 – LeonardBlunderbuss