Microchip
直播中

刘秀兰

7年用户 196经验值
私信 关注
[问答]

怎么在PIC18上计算32位CRC?

我正在研究一个项目,它包含相当数量的数据(135K)位于外部EEPROM上。如果当前数据与EEPROM上的数据不同,则该数据只是一组表,如果当前数据在闪存中,则这些表被传输到处理器的内部程序存储器。EEPROM需要能够更新,而电力是对董事会。(我们正在所有不同的板之间使用CAN网络,并且所有新数据将通过该网络从单独的板发送)。它目前使用的是32位2的补校验和,但这不是我们想要的。EEPROM将有一个由PC应用程序生成的32位CRC,用于创建所有表。另一块板(将把所有数据传送到我的板上)有32位ARM处理器,还计算32位CRC。我的板对这组板是新的,只有一块PIC18(实际上有两块板,一块是PIC18F2585,另一块是PIC18F25K82)。我已经浏览过william hill官网 ,在谷歌上进行了搜索,但是我找到的32位CRC生成的所有东西都是用至少PIC24s完成的。有可能获得一个32位CRC与PIC18?此外,什么是最好的方法来实现CRC(即逐位,切片2,等等)?这种计算不会经常发生,它将永远是一个更大的“登录序列”的一部分,所以时间不是一个真正的问题。

回帖(21)

李维嘉

2019-9-30 12:43:06
CRC32似乎有点过分了。我记得在AN1229http://ww1.micro..com/downloads/en/AppNotes/90003128A.pdf中看到过CRC例程。
举报

周彦楠

2019-9-30 12:58:18
由于数据块大小为135KB,CRC32可能被认为不够强和足够好。这取决于需求。回到最初的问题,是的,在PIC18上是完全可能的。由于计算时间不是很关键,你可以看一下多重乘法算法。它是最简单和最小的一种。
举报

陈晨

2019-9-30 13:05:52
对于CRC32,非表方法将是慢的,但将工作。表方法将更大。
举报

张旭

2019-9-30 13:17:55
谢谢你的回复。前面省略的另一条信息是,我将以64字节的组接收所有新数据(EEPROM的页面大小,然后在接收下一组64之前将其写入EEPROM)。基于这些响应,我认为应该能够在接收数据的整个过程中保持滚动CRC计算,然后在最后进行比较。另一个选择是将所有的数据输入EEPROM,然后执行CRC计算。所以我想知道在数据进入时进行滚动计算是否更好,或者等到所有数据都加载到EEPROM之后再读取并执行CRC计算?一种方式比另一种方式好得多,或者它们是相同的,只是一种偏好的问题?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分