在串行通信中需要校验和

时间:2015-04-01 07:45:19

标签: c# c communication serial-communication

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

波特率= 115200,

没有奇偶校验位,

One StopBit,

没有握手,

帧长:16字节

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

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

是的,你必须有校验和。唯一可接受的非业余爱好者解决方案是基于CRC的适当校验和。最常见的行业标准是“CRC-16-CCITT”(polynomal 0x1021)。这将捕获任何单比特错误,大多数双比特错误和一些突发错误。

即使您只在办公室环境中使用RS-232(?),由蹩脚的消费电子产品引起的任何EMI都可能导致故障和数据不正确。周围有很多这样糟糕的电子产品:例如,PC中的电子产品的EMC性能不佳并不罕见。特别是,有无数的USB转串口适配器具有非常糟糕的质量。

UART硬件本身没有值得一提的错误检测:它是20世纪60年代的古老技术。在硬件级别,它仅基于开始和停止位检查数据完整性,并且将错过其间的任何错误。 (奇偶校验同样差)。

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

答案 1 :(得分:1)

尽管串行通信相对可靠,但通常使用校验和来验证数据的正确性。您肯定需要一个由至少两个字节组成的同步,这些字节始终会被分配一个您不希望出现在数据中的特定值。在接收端使用同步来查找每个发送的消息的开始,因为它是流通信而不是基于分组的通信。