我希望仅使用简单的通信就可以在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/