我希望仅使用简单的通信就可以在2个设备之间实现串行通信。

看起来像HDLC和xBee中使用的那些协议使用0x7E作为起始定界符。

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

最佳答案

原因与数据成帧有关。


他们需要一个标记来标记传输的开始和结束。
他们希望能够根据需要多次复制该标志-例如,如果您发送
01111110 01111110 01111110-与其他集合相比,识别该集合非常容易,即使某些位没有到达另一侧,因此它也极少出错。
(0x7E = 01111110)


扩展示例:

机器1已发送:01111110 01111110 01111110
接收错误的一些选项:
机器2接收:011110011111001111110-请注意,您可以轻松识别3帧。
机器2录制:11111001111110011111-同样,您可以轻松识别3帧。
机器2接收:01111110111111001111110-再一次可以很容易地识别3帧。

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

范例1:

已发送机器1:01011010 01011010 01011010(此处选择的标志为01011010
接收错误的一些选项:
机器2接收:010010100101101001011010-您无法识别它们是否是偶数帧。

范例2:

已发送机器1:00011000 00011000 00011000(此处选择的标志为00011000
接收错误的一些选项:
机器2录制:00110000001100000011000-这是可以的...我们可以轻松看到3帧..但是..
机器2接收:0010000001100000011000-这很难。.可能是3帧,但不能确定。

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

还有一件事.. SO伙计们我知道这有潜在的火焰:)
请记住,我没有选择此仲裁程序序列。.我仅说明选择此特定序列的原因。

关于serial-port - 为什么0x7E通常在通信协议(protocol)中用作开始定界符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21819723/

10-10 16:18