串口通信需要校验和

Need of checksum in serial communication

我目前正在从事一个项目,涉及从 PC(用 C# 编码的 USB 转串口应用程序)到嵌入式平台 (STM32F4) 的串行 COM。 我看到在某些情况下,通信帧中必须有校验和。 通信配置:

波特率=115200,

无校验位,

一个StopBit,

无握手,

帧长度:16 字节

是否值得在我的应用程序中添加校验和?我应该(不)有这个校验和的原因是什么?

感谢您的回答。

虽然串口通信比较靠谱,但习惯上还是有一个checksum来验证数据的正确性。您肯定需要一个由至少两个字节组成的同步,这些字节将始终被分配一个您不希望出现在数据中的特定值。同步在接收端用于查找发送的每条消息的开始,因为它是流通信而不是基于数据包的通信。

是的,您必须有一个校验和。唯一可接受的非爱好者解决方案是基于 CRC 的正确校验和。最常见的行业标准是 "CRC-16-CCITT"(多项式 0x1021)。这将捕获任何单位错误、大多数双位错误和一些突发错误。

即使您只会在办公环境中使用 RS-232(?),任何由劣质消费电子产品引起的 EMI 都可能导致故障和不正确的数据。周围有很多这样糟糕的电子产品:例如,PC 中的电子产品 EMC 性能不佳的情况并不少见。尤其是USB转串口转接头,质量实在是太差了。

UART 硬件本身没有值得一提的错误检测:它是古老的 1960 年代技术。在硬件层面,它只根据起始位和停止位来检查数据完整性,并且会漏掉中间的任何错误。 (奇偶校验同样很差)。

或者,您也可以使用 USB 转 RS-485 适配器并使用 RS-485,RS-485 具有差分信号,因此更加坚固。但这要求您在目标端也有 RS-485 收发器。