chrome.serial API 是否确保数据完整性?

Does chrome.serial API ensure data integrity?

我想了解在我的通信协议中包含某种 CRC 或校验和对我来说是否多余。如果有人可以与 chrome.serial 和其他 chrome 硬件通信 API(例如 chrome.hidchrome.bluetoothLowEnergy、...)API API =15=]

串行通信只是一种传输位的方式,其存在的主要原因是它一次传输一个位——因此可以仅通过单一通信工作 link,例如简单的电话phone 行。没有内置的 CRC 或校验和或任何东西。

有许多基于串行通信的系统试图处理通信经常发生在嘈杂环境中的事实。回到调制解调器通过 telephone 线路的时代,您可能不得不面对这样一个事实,即房子里的其他人可能会在 phone 线路上接听另一个分机,并向您的设备注入一堆噪音下载。因此,发明了像 XMODEM 这样的协议,将串行通信封装在一个更强大的框架中。 (然后,当 XMODEM 被证明不可靠时,我们去了 YMODEM 和 ZMODEM。)

根据您正在与之交谈的对象(例如,通过 25 厘米长的电线连接到 USB 串行端口的 Arduino 等设备),您可能会发现将工作放入数据校验和并不是值得麻烦,因为干扰的可能性很低,而且后果微不足道。另一方面,如果您正在与激光武器的控制器通话,您可能需要确保您发送的命令是收到的命令。

我对你提到的其他系统一无所知,但我已经足够大了,在 80 年代花了大量时间进行串行通信(现在对使用 [= 的设备再次进行) 18=],去图)。

我正在使用 Chrome 的串口 API 与 Arduino 设备通信,我还没有在交换过程中遇到随机损坏(我的交换是短暂的,50 -500 字节最大值)。然而,如果连接不稳定或电缆 "rudely" 断开(就像几分钟前我被 FTDI 电缆绊倒一样),我确实看到垃圾字节爆炸。

在我的项目中,错误处理的命令不会破坏任何东西,而且我可以使用主从协议。因此,我设计了一个非常精简的解决方案:Arduino 从设备监听一个 "attention byte" (!) 后跟一个命令字节,之后它根据命令读取固定数量的数据字节。由于 Arduino 在听到注意字节和有效命令之前会丢弃,因此中断错误通常发生在连接被切断而从属 "awaiting x data bytes" 时。为了解决这个问题,master 在连接时做的第一件事就是盲目地发出足够的 AT 字节来推动 Arduino 通过 "awaiting data",即使在最坏的情况下也是如此。简陋,但足够。

我意识到我的解决方案非常低保真,所以我四处浏览了一下,发现这个 post 非常全面:Simple serial point-to-point communication protocol

另外,如果你需要一个错误策略-校正超过error-detection/re-transmission(或超过我的策略,我猜是"error-brute-forcing"),你可能想在该线程底部附近检查 link 一项名为 "Hamming," 的技术 - 那个看起来很有希望!

祝你好运!

-马特