首先以下内容由搜索网络并学习实践得到,主要用作记录使用。
在使用固件升级时会对固件进行完整性校验,使用STM内部硬件CRC与CRC在线计算 (lddgo.net)
MPEG-2生成的值不一致,主要由两个原因造成。
1、文件长度值,文件长度是以字节为单位,假设我们使用U盘升级,读取到的数据长度为64,那么实际校验长度为16。
res=f_read(&USBHFile,RAM_Buffer,sizeof(RAM_Buffer),(void *)&APP_Size);
HAL_CRC_Calculate(&hcrc,(uint32_t *)FLASH_USER_START_ADDR, APP_Size/4-1);//由于校验值放到最后一个位置,所以需要减去1。
2、以上操作后校验值依然不同,我们看下图
确定两个值不同,网上有说是PC与MCU的大小端什么的不同,搞不懂,但是确实不一样,那么把这个弄成一样计算结果就相同了。