Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
管理Linux和Arduino之间的串行对话_Arduino_Usbserial - Fatal编程技术网

管理Linux和Arduino之间的串行对话

管理Linux和Arduino之间的串行对话,arduino,usbserial,Arduino,Usbserial,我想通过USB将二进制数据传输到Arduino或从Arduino传输到另一端。现在,我用ASCII来做,很简单。使用ASCII,您可以看到垃圾,直到双方同步。但使用二进制,将很难区分数据和噪声。是否有一些标准方法来重置连接并获得可靠的字节流?我能不能暂停一下,让Arduino重新启动?只是想寻求最佳实践的建议。为了实现可靠的通信,您需要在二进制数据中包含一些协议,以便 你知道什么时候出了问题 你可以恢复同步 例如,提供了一种简单的方法,通过使用一个特殊字符包围数据段来对数据段进行帧处理,该

我想通过USB将二进制数据传输到Arduino或从Arduino传输到另一端。现在,我用ASCII来做,很简单。使用ASCII,您可以看到垃圾,直到双方同步。但使用二进制,将很难区分数据和噪声。是否有一些标准方法来重置连接并获得可靠的字节流?我能不能暂停一下,让Arduino重新启动?只是想寻求最佳实践的建议。

为了实现可靠的通信,您需要在二进制数据中包含一些协议,以便

  • 你知道什么时候出了问题
  • 你可以恢复同步

例如,提供了一种简单的方法,通过使用一个特殊字符包围数据段来对数据段进行帧处理,该字符保证不会在二进制流中单独出现(有一种转义机制允许这种情况发生)。接收机可以使用帧字符进行同步


您也可以(取决于错误数据通过时的糟糕程度)向消息中添加校验和或CRC-PPP将其称为帧检查序列或FCS

如果你真的想推出你自己的协议,你想成为真正的8位功能,有几件事你必须做。如果你身处一个数据从未丢失的理想世界,那会更简单,但事实并非如此

  • 你必须转义两个字符字节,比如X和Z。每次你想发送X,你就发送Z1,当你想发送Z,你就发送Z2。这样你就永远不会发送一个普通的X
  • 现在,您可以用一个完全唯一的标识符X开始每条消息
  • 接收器现在可以等待X,并开始收集字节。每次它看到一个Z,它就必须读取一个额外的字节,并对数字进行解码,以获得真正的字节
  • 现在,用一个标题和一个校验和来开始每条消息,标题解释消息将包含多少数据。读卡器应在具有指定数字时停止读取,如果校验和失败,则放弃所有内容
  • 就在标题之后,您将数据放入
请注意,使用结构序列化数据被认为是不安全的,并且如果跨越架构边界(打包不同),通常会中断