管理Linux和Arduino之间的串行对话
我想通过USB将二进制数据传输到Arduino或从Arduino传输到另一端。现在,我用ASCII来做,很简单。使用ASCII,您可以看到垃圾,直到双方同步。但使用二进制,将很难区分数据和噪声。是否有一些标准方法来重置连接并获得可靠的字节流?我能不能暂停一下,让Arduino重新启动?只是想寻求最佳实践的建议。为了实现可靠的通信,您需要在二进制数据中包含一些协议,以便管理Linux和Arduino之间的串行对话,arduino,usbserial,Arduino,Usbserial,我想通过USB将二进制数据传输到Arduino或从Arduino传输到另一端。现在,我用ASCII来做,很简单。使用ASCII,您可以看到垃圾,直到双方同步。但使用二进制,将很难区分数据和噪声。是否有一些标准方法来重置连接并获得可靠的字节流?我能不能暂停一下,让Arduino重新启动?只是想寻求最佳实践的建议。为了实现可靠的通信,您需要在二进制数据中包含一些协议,以便 你知道什么时候出了问题 你可以恢复同步 例如,提供了一种简单的方法,通过使用一个特殊字符包围数据段来对数据段进行帧处理,该
- 你知道什么时候出了问题
- 你可以恢复同步
您也可以(取决于错误数据通过时的糟糕程度)向消息中添加校验和或CRC-PPP将其称为帧检查序列或FCS 如果你真的想推出你自己的协议,你想成为真正的8位功能,有几件事你必须做。如果你身处一个数据从未丢失的理想世界,那会更简单,但事实并非如此
- 你必须转义两个字符字节,比如X和Z。每次你想发送X,你就发送Z1,当你想发送Z,你就发送Z2。这样你就永远不会发送一个普通的X
- 现在,您可以用一个完全唯一的标识符X开始每条消息
- 接收器现在可以等待X,并开始收集字节。每次它看到一个Z,它就必须读取一个额外的字节,并对数字进行解码,以获得真正的字节
- 现在,用一个标题和一个校验和来开始每条消息,标题解释消息将包含多少数据。读卡器应在具有指定数字时停止读取,如果校验和失败,则放弃所有内容
- 就在标题之后,您将数据放入