本文转载自微信公众号“strongerHuang”,作者strongerHuang。转载本文请联系强黄公众号。现在很多产品都有IAP(BootLoader)和APP(应用程序)。一般在量产时,需要将这两部分程序结合起来。一般来说,程序的拼接和hex/bin格式的转换都可以通过编程(下载)工具来实现。下面结合STM32,以及对应的ST-LINKUtility、STM32CubeProg工具给大家简单介绍一下:IAP、APP程序拼接hex、bin格式相互转换1了解bin、hex、axf如果想掌握程序IAP+APP程序拼接,需要了解程序文件hex、bin文件格式的内容。用一张表来区分bin、hex和axf的关系:binhexaxfprogramdataprogramdataprogramdataaddress,type,checksum等tag信息address,type,checksum等tag信息调试信息Bin文件Bin文件是一个A程序文件没有格式,只包含程序数据。Hex文件Hex是Intel开发的一种十六进制标准文件格式,由编译器转换,用于下载处理器内部的文件。Hex文件格式由一行一行的十六进制数据组成,每一行包含:起始、长度、数据、类型、校验和等重要信息。axf文件axf文件是经过编译器编译后,包含了程序、调试等更多信息的文件。比较三个文件用MDK-ARM编译后的大小。Objects目录下:Demo.axf(236K)Demo.hex(4K)Bin目录下:Demo.bin(2K)2通过工具实现IAP+APP拼接,量产。要烧录的程序文件通常是hex或bin文件。不管是hex文件还是bin文件,我们都需要使用烧录软件+烧录(编程)工具来实现。烧录软件一般针对不同的MCU有不同的烧录软件。对于STM32,一般推荐使用官方的编程软件STVP、ST-LINKUtility和STM32CubeProg。拼接说明IAP+APP两个程序拼接一般简单的方法是:将两个程序分别烧录,一起读出,保存为量产文件。拼接显示IAP和APP程序的起始地址不同,所以烧入芯片,分别存放在两个区域。烧录程序时,特别是烧录bin文件(不带地址)时,注意设置起始地址。hex文件是有地址的,不用自己设置地址。读取“合并”的程序时,还要注意起始地址和读取大小,确保读取所有程序。例如通过ST-LINKUtility读取STM32程序:通过STM32CubeProg读取STM32程序:再次提醒:烧录bin文件时,设置起始地址;读取时设置起始地址和读取大小;保存可以选择hex,或者bin文件;3、通过工具进行bin和hex格式的转换在某些情况下,需要使用特定格式的文件,比如我们的远程升级,就需要一个bin文件来实现。通过上面的介绍,其实你会发现,使用编程软件ST-LINKUtility,或者STM32CubeProg,可以直接将其保存为hex或者bin文件格式。ST-LINKUtilitySaveAs:STM32CubeProgSaveAs:介绍过一篇MDK-ARM的文章,直接转成bin文件:KeilMDK使用fromelf实现axf转bin的方法当然这些方法都比较简单易用的方法。网上有很多bin和hex格式文件相互转换的工具。有兴趣的朋友可以搜索了解一下。
