搜索
bottom↓
回复: 4

STM32H7的硬件CRC如何分多次计算数组的CRC值?

[复制链接]

出0入4汤圆

发表于 2022-8-31 17:56:05 | 显示全部楼层 |阅读模式
现在我的程序在OTA升级过程中需要同时分别计算CRC16和CRC32的数组数据,现在想通过硬件CRC完成CRC值的计算。但实际使用发现,拆分计算后的结果和一次计算的结果并不一致。
以下面的程序为例,把rt_uint8 data[8]=={0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}拆成4字节分两次计算:

        rt_uint8_t data[4]={0x01,0x01,0x01,0x01};
        CRC_HandleTypeDef _crc;
        _crc.Init.CRCLength=CRC_POLYLENGTH_32B;
        _crc.InputDataFormat=CRC_INPUTDATA_FORMAT_BYTES;
        _crc.Instance=CRC;
        _crc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
        _crc.Init.GeneratingPolynomial = 0x04C11DB7;
        _crc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;
        _crc.Init.InitValue = 0;
        _crc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_BYTE;
        _crc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_ENABLE;
        HAL_CRC_Init(&_crc);

       
        rt_uint32_t result = HAL_CRC_Calculate(&_crc,(uint32_t*)data,sizeof(data));
        HAL_CRC_DeInit(&_crc);
        _crc.Init.InitValue=result;
        HAL_CRC_Init(&_crc);
        result = HAL_CRC_Calculate(&_crc,(uint32_t*)data,sizeof(data));

和下图在线CRC计算的结果对比,4B83FDBA是我的期望值,但实际计算出来的结果是DC9C9E43。这个网站看来初始值的重新传入和STM32硬件的一样,但我网上找了别的CRC32算法,是可以拆分后也能算出4B83FDBA的。现在主要是知道STM32的硬件CRC怎样正常拆分计算?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入1209汤圆

发表于 2022-8-31 20:51:19 | 显示全部楼层
OTA没有效率要求,直接用软件算吧

出0入442汤圆

发表于 2022-8-31 21:46:47 来自手机 | 显示全部楼层
init value第一次为0xffffffff,第二次为你上一次计算的值。。

出0入4汤圆

 楼主| 发表于 2022-9-1 09:49:54 | 显示全部楼层
wye11083 发表于 2022-8-31 21:46
init value第一次为0xffffffff,第二次为你上一次计算的值。。
(引用自3楼)

现在就是这个思路嘛。
DEBU发现__HAL_CRC_DR_RESET(hcrc)这一句有时候执行无效果,原因未知。
反正第一次计算,始终没法把上一次的CRC值成功写回到DR寄存器,无论是通过初始值寄存器还是直接写CRC寄存器,始终不是我想要的值。

出0入442汤圆

发表于 2022-9-1 10:05:06 来自手机 | 显示全部楼层
SNOWA 发表于 2022-9-1 09:49
现在就是这个思路嘛。
DEBU发现__HAL_CRC_DR_RESET(hcrc)这一句有时候执行无效果,原因未知。
反正第一次 ...

(引用自4楼)

你代码里面有个default init value你看不到?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 08:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表