对M4芯片的CRC模块改造来计算标准CRC32

对M4芯片的CRC模块改造来计算标准CRC32

【摘要】

  最近使用的M4系列芯片中,有用于计算CRC的硬件CRC模块,这个模块计算出的校验和与我们平时使用的CRC32并不相同。下文用CRC’32指代M4的硬件CRC模块计算出的校验和,以与标准CRC32区分。虽然我们可以使用纯软件的方法来计算CRC32,不过,既然有CRC硬件,我们不妨试试对其进行加工,软件硬件配合来进行计算。

一、 案例概述

  这个硬件CRC模块有两个问题:其一,是其计算的CRC’32,计算过程与标准的CRC32算法并不一致;其二,是传给CRC模块的数据,必须以32位进行分组。若分组后剩余1~3字节,不足32位的情况,是无法计算的,必须补齐32位才行。但补齐之后,CRC值自然也就改变了。

二、 问题原因分析 

  标准CRC32的模型如下:
 POLY = 0x04C11DB7, INIT_REM = 0xFFFFFFFF, FIN_XOR = 0xFFFFFFFF, REF_IN = TRUE, REF_REM = TRUE
  那么算法不一致,就一定是上述几项有不同。根据Data Sheet的描述:
    Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7.
    The CRC calculator can be reset to 0xFFFF FFFF with the RESET control bit in the CRC_CR register.
  从这两点可以确定的是POLY和INIT_REM的值,剩下的三个虽然不确定,但是取值有限,可以轻易穷举得出。
  FIN_XOR的值虽然是32位的,有着丰富的可能性,但是常见取值只有两个,那就是0x000000000xFFFFFFFF。REF_IN和REF_REM都是布尔值,取值也只有TRUEFALSE。这样组合之后,只有8种可能。依次测试对照,便可以确定,其CRC’32模型如下:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值