Bootloader(MDK AC5) 进阶版(二)

本文详细介绍了如何在KeilMDK环境下使用srecord和hex2bin工具生成HEX文件,并添加CRC校验,确保固件完整性的过程,以及创建一个批处理脚本来自动化这些操作。
摘要由CSDN通过智能技术生成

如何在MDK中生成HEX文件,并转换成bin文件最后计算整个固件的CRC校验值

1.为什么要校验?

我们在进行升级时,首先要考虑一个问题,就是怎么保证我的固件是完整的,有没有可能我的固件输出过程中有数据丢失的情况??列几个例子,你使用串口做升级时,突然PC或者下位机异常或断电,你如果不做校验很可能固件升级到一半,导致产品出现意想不到的情况。所以验证固件是否完整在实际项目过程中是非常有必要的。即使固件校验失败,那么我们也有办法恢复原来的程序。

MDK如何做校验?

工欲善其事必先利其器,首先先找工具。

Keil平台,是没有像IAR平台那样,自身带有一个工具可以为bin文件生成CRC校验值。所以,要在Keil环境中添加CRC校验码,就需要借助第三方的工具。

下面我 srecord 这个工具生成 CRC 校验码,然后再使用 hex2bin 工具把具有CRC校验码的 hex 文件转换为bin文件。

srecord 工具官网:

https://srecord.sourceforge.net/

hex2bin 工具下载:

https://sourceforge.net/projects/hex2bin/

首先我们先找到项目工程所在位置:

添加这三个文件 srec_cat_exe、hex2bin.exe、最后是copyhex_flash.bat

我们来看看.bat的内容

copy Obj\output.hex .\output.hex

hex2bin output.hex

for /f %%i in ('dir /b output.bin') do (
set indexdx=%%~zi
)
ECHO %indexdx%

srec_cat.exe output.bin -Binary -crop 0 %indexdx%  -STM32_Little_Endian %indexdx% -o app.bin -Binary

来看看AI是如何解读这段脚本内容的:

这段代码是一个简单的批处理脚本,它执行了一系列的操作来处理二进制文件。下面是对每一行命令的解释:

  1. copy Obj\output.hex .\output.hex

    • 这条命令将Obj目录下的output.hex文件复制到当前目录下,文件名保持不变。
  2. hex2bin output.hex

    • 这里调用了一个名为hex2bin的程序,它通常用于将十六进制文件(.hex)转换为二进制文件(.bin)。这意味着output.hex文件被转换成了output.bin
  3. for /f %%i in ('dir /b output.bin') do (

    • 这是一个循环,使用for命令来遍历output.bin文件的大小(以字节为单位)。/b选项告诉dir命令只返回文件大小,不包括其他文件信息。
    • %%i是循环变量,代表当前遍历到的文件大小。
  4. set indexdx=%%~zi

    • 在循环内部,这条命令将%%i(文件大小)赋值给变量indexdx~zfor命令的一个修饰符,用于获取%%i的原始值(即不带任何引号的值)。
  5. ECHO %indexdx%

    • 打印变量indexdx的值,即output.bin文件的大小。
  6. srec_cat.exe output.bin -Binary -crop 0 %indexdx% -STM32_Little_Endian %indexdx% -o app.bin -Binary

    • 这条命令调用srec_cat工具,它是一个用于处理二进制文件的实用程序,可以转换文件格式,如S-Record、Motorola S-Record、Intel Hex等。
    • -Binary选项指定输入文件output.bin是二进制格式。
    • -crop 0选项用于裁剪文件,这里的0表示不裁剪任何字节。
    • -STM32_Little_Endian选项指定输出文件的地址和数据应该按照STM32微控制器的Little-Endian格式排列。
    • %indexdx%在这里作为裁剪后的文件大小,但由于-crop已经设置为0,这部分实际上没有效果。
    • -o app.bin指定输出文件名为app.bin
    • 最后的-Binary选项指定输出文件app.bin也是二进制格式。

总的来说,这个批处理脚本的作用是将一个十六进制文件转换为二进制文件,然后使用srec_cat工具将其转换为适合STM32微控制器的二进制文件,同时输出文件的大小被打印出来。

还有一个点别忘记了:

记得添加脚本文件链接。

程序编译后,我们可以看到程序大小为

打开我们的app.bin文件看看

可以看到最后四个字节就是CRC校验的结果

补:自己给自己留了个大坑,忘记改hex文件名称,导致系统找不到output文件,大家多留意一下自己的hex文件,一定要仔细再仔细

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值