我试图了解我的冗余是否在我的通信协议中包含某种CRC或校验和。如果有人可以与他们交谈,chrome.serial
和其他Chrome硬件通信API是否一般(例如chrome.hid
,chrome.bluetoothLowEnergy
,...)
答案 0 :(得分:1)
串行通信只是一种传输比特的方式,其存在的主要原因是它一次只能一个比特 - 因此可以仅通过一条通信链路工作,例如简单的电话线。没有内置的CRC或校验和或任何东西。
有许多系统存在于串行通信之上,试图处理通信通常发生在嘈杂环境中的事实。回到调制解调器通过电话线的那一天,你可能不得不处理这样一个事实:房子里的其他人可能会在电话线上拿起另一个分机,并在你的下载中注入一堆噪音。因此,发明了像XMODEM这样的协议,在一个更健壮的框架中包装串行通信。 (然后,当证明XMODEM不可靠时,我们去了YMODEM和ZMODEM。)
根据您的谈话内容(例如,像Arduino这样的设备通过25厘米长的电线连接到USB串口),您可能会发现将工作放入校验和数据并不值得,因为干扰的可能性很小,后果微不足道。另一方面,如果您正在与激光武器的控制器交谈,您可能需要确保您发送的命令是收到的命令。
我对你提到的其他系统一无所知,但我已经足够大,已经花了很多时间在80年代重新进行串口通信(现在再做一次)对于使用chrome.serial的设备,请参阅图)。
答案 1 :(得分:1)
我使用Chrome的串行API与Arduino设备进行通信,而且我还没有在交换过程中遇到随机损坏(我的交换是短突发,最多50-500字节)。但是,如果连接是片状的或电缆是粗暴的,那么我确实看到垃圾字节爆炸了。断开连接(就像几分钟前我绊倒FTDI线缆时)。
在我的项目中,错误处理的命令不会破坏任何东西,我可以使用主从协议。因此,我设计了一个非常纤薄的解决方案:Arduino奴隶会监听一个"注意字节" (!)后跟一个命令字节,然后根据命令读取固定数量的数据字节。由于Arduino丢弃直到听到注意字节和有效命令,因此当从属设备等待x数据字节时,通常会发生断开错误。#34;等待x数据字节"。为了解释这一点,主人在连接上做的第一件事就是盲目地发出足够的AT字节来推动Arduino通过"等待数据"即使在最糟糕的情况下。原油,但足够了。
我意识到我的解决方案非常低保,所以我做了一些冲浪,我觉得这篇文章非常全面:Simple serial point-to-point communication protocol
另外,如果你需要一个错误 - 纠正的策略而不是错误检测/重新传输(或者我的策略,我猜是"错误强制&#34) ;),您可能想查看一个名为"汉明的技术的链接,"靠近那个线程的底部 - 那个看起来很有希望!
祝你好运!-Matt