如何确定CRC16的初始校验和,使产生的校验和为零?

我正在研究一个SAMD MCU阵列之间的SPI通信总线。

我有一个传入的数据包,它是这样的 { 0x00, 0xFF, 0x00, 0xFF }.接收芯片对传入的数据包进行CRC16校验。

由于我每次都希望得到完全相同的数据包,所以我希望数据包有效时CRC校验和为零,而不是出现传输错误时校验和为零。

我知道我可以在发送数据包时将计算出的CRC16加到数据包的末尾,在接收端CRC校验会输出0,但在这种情况下,由于数据包是由SPI线上的多个发送芯片构建的,每个芯片只能从整个数据包中填入自己的两个字节,所以不可能在数据包中加入CRC16校验和。

我需要在接收端加载一个初始的CRC校验和,这样在对接收的数据包进行校验后,得到的CRC等于零(如果数据包是完整的)。

答案是 在这里 其实是我要找的,但它是CRC32格式的,而我其实并不了解代码的原理,所以我不能把如果改写成CRC16格式。

任何帮助将是非常感激的

Regards,Niko

解决方案:

解决方法很简单,就是使用基于查找表的CRC。如果你不能附加校验和(也就是那个 帧检查序列,FCS)到包中,然后先进行查表,然后简单地将该表与你固定数据的预期序列进行比较。

请注意,”CRC 16 “可以指任何东西,有多个版本和(非)标准。最常见的可能是一个叫做 “CRC-16-CCITT “的,有1021h poly和初始值FFFh,但即使是那个,也有多种算法–有些是正确的,有些是错误的。你最大的挑战将是找到一个值得信赖的CRC算法。

然而,其实我觉得SAMD是专门用硬件生成的CRC-16-CCITT在片上,用于DMA目的。既然是SPI,应该是可以DMA的,所以也许可以调查一下是否可以用这个方法。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何选择带外键的项目?

2022-5-12 1:00:17

解决方案

ambari rest API + 在ambari中设置json配置。

2022-5-12 1:00:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索