我应该将CRC-16或IP校验和(RFC1071)用于嵌入式应用程序吗?

我正在ARM7处理器上编写一个嵌入式应用程序,我需要某种形式的校验和,用于通过串行链路发送的数据,以及我存储在闪存中的数据.我想知道两个CRC中哪一个更适合这个目的.主要的权衡是代码速度与稳健性.我应该考虑另一个CRC?您是否有链接到ARM的有效实现?
RFC1071是一对简单的16位字节对.因此,两个错误可能会“取消”,并仍然会给出“通过”校验和.例如.一个比特错误从1翻转到0比特.然后16比特的另一个比特错误从0翻转到1比特.RFC1071将不会检测到这一点.但是,如果用CRC检查,则会检测到相同的双位翻转错误.

在串行传输中可能出现这种双位翻转错误. (更有可能在并行电缆上,特别是如果一根电线“嘈杂”但是现在谁使用并联?)在闪存芯片中也是可能的,特别是如果PCB在微芯片和闪存芯片之间有一个不良的焊点.总的来说,CRC在检测错误时在统计上更加稳健,因为输入中的单个位变化会影响CRC移位寄存器中的多个位.

实际上,您想要检测的另一件事是Flash上​​传不完整,因此很少有代码丢失.为此,从统计上来说,校验和可能没什么问题,但我总是偏爱我所参与的项目中的CRC.使用基于表格的CRC算法,我们已经能够获得所需的计算速度.

相关文章
相关标签/搜索