佛山企业网站建设平台,政务信息网站建设方案,住建部四库一平台,域名历史价格查询本文介绍如何生成带有CRC的bin文件。
MCU在上电运行时#xff0c;通常需要校验程序是否正确#xff08;有无篡改或烧录文件出错#xff09;#xff0c;一般的做法是在烧录文件#xff08;通常是bin文件#xff09;末尾追加CRC#xff08;CRC-8#xff0c;CRC-16#…本文介绍如何生成带有CRC的bin文件。
MCU在上电运行时通常需要校验程序是否正确有无篡改或烧录文件出错一般的做法是在烧录文件通常是bin文件末尾追加CRCCRC-8CRC-16CRC-32程序运行时首先校验CRC是否正确再进行下一步运行。本文以Windows环境下生成带有CRC-32的bin文件为例对此作简要介绍。
1.工具下载与安装
这里用到srecord工具其官网地址
https://srecord.sourceforge.net/
我的电脑为Windows 10这里下载的是“srecord-1.65.0-win64.exe可根据实际情况进行下载安装过程比较简单这里就不再详细介绍。安装完成后会自动设置环境变量可通过下面的指令测试是否安装成功。在Windows命令行下输入
srec_cat -version
安装正常情况下会输出版本信息。 2.批处理文件编写
Windows环境下编写如下批处理文件post-build.bat。
echo OFFset START_ADDRESS0x08000000
set CRC_ADDRESS0x0807FFFC
set SRC_HEX_FILEtest.hex
set CRC_HEX_FILEtest-crc.hex
set CRC_BIN_FILEtest-crc.binecho ----------------------------------
echo Generating Checksum...echo ONsrec_cat %SRC_HEX_FILE% -intel -crop %START_ADDRESS% %CRC_ADDRESS% -fill 0xFF %START_ADDRESS% %CRC_ADDRESS% -CRC32_Little_Endian %CRC_ADDRESS% -CCITT -o %CRC_HEX_FILE% -intel
srec_cat %CRC_HEX_FILE% -intel -offset -%START_ADDRESS% -o %CRC_BIN_FILE% -binarydel -s %CRC_HEX_FILE%echo OFFecho Generate Checksum: OK
其中
1)START_ADDRESS:程序运行的存储器起始地址这里设置的是0x08000000 2)CRC_ADDRESS:添加CRC的存储器地址通常在存储器地址的末尾这里是512K的地址空间采用CRC-32校验因此地址设置的是0x0807FFFC 3)SRC_HEX_FILE:想要转换的hex文件 4)CRC_HEX_FILE:添加CRC后的hex文件此文件为临时文件 5)CRC_BIN_FILE:最终添加CRC后的bin文件
注意
1)以上值都需要根据实际情况进行设定
2)CRC校验选择的是CCITT的校验方式可根据实际情况设定具体请查阅srecord的reference 3.开发工具设置
以STM32CubeIDE为例将上述“post-build.bat”拷贝到“Release”文件夹中并设置好参数主要是地址及文件名。打开工程属性在“Post build steps”中添加“post-build.bat”设置如下图。 重新编译即可生成所要的带CRC的bin文件。 4.程序校验
本例中程序中的CRC校验可参考如下代码。在程序启动时可读取存储空间程序并对其进行校验。
uint32_t CalcCRC32(uint8_t *pData, uint32_t nCount)
{uint32_t index 0;uint32_t crc 0xffffffff; //initial valueuint8_t i 0;for (index 0; index nCount; index){crc (uint32_t)(crc ^ pData[index]);for (i 8; i 0; i--){if (crc 0x01){crc (uint32_t)((crc 1) ^ 0xEDB88320); /* XOR with polynomic,inversion bit sequence of 0x04C11DB7 */}else{crc (uint32_t)(crc 1);}}}crc crc ^ 0xffffffff;return crc;
} 总结本文介绍了如何生成带有CRC的bin文件。