一、编译生成
我们在使用 Simplicity Studio 开发基于 EFR32 的 EmberZnet 时,发现当我们的固件编译结束之后,在工程根目录下的 GNU ARM v10.2.1 - Default 目录下可以得到很多种格式的固件,比如 .bin、.hex、.s37、.gbl 等等。
那么这些不同格式的文件到底有什么区别的?在什么情况下我们要用到对应的文件呢?
二、bin文件
.bin 文件是一个二进制镜像,它包含了一个字节一个字节的二进制镜像,可以烧录到任意地址中。我们在烧录时需要指定地址,所以我们一般不使用这个格式的文件。
三、hex文件
.hex 文件是标准的Intel HEX格式。这种 ASCII 文本文件包含在目标设备的什么位置编程哪些数据的记录,它可以包含应用程序固件、引导加载程序固件,甚至制造商 token和SimEEPROM token数据的编程数据。这是你将芯片的内容导出成文件时使用的格式。在 Silicon Labs 的开发中,.hex 文件通常被作为一种方式来提供一个单独的固件,该文件包含所有必要的信息(应用程序固件和任何必要的引导加载程序固件),用于一次加载一个芯片。这些类似于二进制文件,但它们也包含了 flash的地址。在实际量产过程中,我们可以将 bootloader 和 application合成一个 .hex 文件进行烧录。
四、s37文件
.s37 文件是标准的摩托罗拉S-Record格式。这种ASCII 文件包含有关已构建固件(无论是应用程序固件还是 bootloader固件)的编程数据和加载程序工具的一些原始数据。在 Silicon Labs 的开发中,一个 .s37 文件通常只代表一个固件(一个引导加载程序或一个应用程序,但不是两个同时包含)。它们类似于二进制 .bin 文件,但它们也包含了 flash的地址。我们正常调试固件时可以直接烧录 .hex 或者 .s37 文件,唯一的区别是 .s37 仅能是 bootloader 或 application中的一个,无法合并成一个 .s37 文件。
五、gbl文件
.gbl 文件是 Gecko BootLoader 数据文件的一个二进制格式的文件。使用 Simplicity Commander 工具可以将 .s37 文件转换成 .gbl 文件。由于 .gbl 文件是给 Gecko BootLoader 用的,因此这个文件格式仅适用于应用程序固件,而不适用于bootloader固件。我们在进行串口固件升级或者生成 .ota 文件时需要使用的都是这个格式的文件。更多关于 .gbl 格式的文件的详细信息请参考 Silicon Labs 的官方说明文档《UG266: Silicon Labs Gecko Bootloader User’s Guide》和《Gecko Bootloader File Format》。
(注:如果还有遇到问题,建议在文初或文末提及的技术交流QQ群中提问交流。)