研发生产-出厂包制作

背景:

  • 公司的嵌入式产品有两个程序,一个是bootloader(启动引导,做升级功能和分区跳转功能不带APP程序),另外一个是APP程序。生产每次在新板子烧录程序需要两边,一次是使用jflash软件通过jlink工具进行烧录bootloader,烧录完成后并不能直接启动,还需要插入U盘把APP程序通过USB升级的方式烧录到MCU,这样对批量生产产生的生产时间成本有比较大的影响。我之前在其他公司见过,把bootloader和APP做成出厂包的方式,进行一次性把bootloader和APP一次性烧录。更好的提高生产效率,就把出厂包列入开发

原理:

  • 因为bootloader和APP程序都是bin文件,可以直接使用批处理命令copy进行两个文件拼接,做成一个文件然后通过flash软件烧录就是出厂包的基本思路。在CMD命令行切换到对应的目录执行下面的语句。
 copy /b .\boot.bin + .\project\APP.bin factoryFlash.bin

实际操作问题:
1.如果把做好的工厂固件进行烧录,你可能会遇到bootloader正常,无法进入APP的情况。

  • 因为bootloader程序和APP程序,不一定占满分配的分区,还需要在bootloader程序和APP程序之间进行填充,否则出厂包烧录连续烧录的位置可能不对,比如bootloader分区可能为16k,你的bootloader程序编译出来的bin文件只有10k,那就需要进行填充。

2.数据怎么填充?

  • 数据填充有很多方式,我这里建议统一使用电脑带的命令行工具,不用安装第三方工具,否则你在不同的机器进行生产包制作都需要搭建一次打包环境才能使用。
    我的思路是,使用命令生成一个新的bin文件,然后把新的bin文件拼接到bootloader后面,然后再把生成的文件再拼接APP程序,这样bootloader和APP程序中间就相当于进行的数据补充

fsutil file createnew temp.bin   6144
copy /b boot.bin + .\temp.bin boottmp.bin
copy /b .\boottmp.bin + .\project\APP.bin factoryFlash.bin

这样就可以完成在bootloader和APP程序之间填充了6k的内容。
3.命令太复杂,容易输入错误?

  • 因为制作生产包需要执行的命令比较多,手工输入还可能有输如错误的情况,因为都是批处理命令,可以做成批处理脚本的方式,只需要命令行输入批处理脚本执行命令即可,不需要每个命令都输入,还可以双击自动执行,非常方便。
    使用记事本创建一个新的txt文件,然后把指令拷贝到文件保存,然后更改文件后缀为.bat即可


4.填充文件大小输入容易出错?

  • 不用手工输入,可以使用批处理脚本获取bootloader大小,再把分配的boot分区大小减去bootloader文件大小,就是需要填充的文件大小。
set /a BootFlashSize = 0x9000
set BootFile=.\boot.bin
for %%a in (%BootFile%) do set /a size=%BootFlashSize%-%%~za
echo %size%

以上指令获取的size就是需要填充文件大小。

解决了上面四个问题就可以全部命令拷贝到脚本,制作一个工厂包打包工具了。这个只是简单的打包合并,还可以丰富脚本,调用keil,完成编译,打包一键操作,后续再补充。

你可能感兴趣的:(嵌入式设备研发生产,windows,单片机,mcu,stm32,经验分享)