我想为AVR制作引导加载程序代码,它可以通过无线方式更新固件。
现在我可以使用一些固定数据写入应用程序区域。我有一个要更新的新固件的十六进制文件。如何将该十六进制文件转换为原始数据,以便可以使用该原始数据更新应用程序?
我想为AVR制作引导加载程序代码,它可以通过无线方式更新固件。
现在我可以使用一些固定数据写入应用程序区域。我有一个要更新的新固件的十六进制文件。如何将该十六进制文件转换为原始数据,以便可以使用该原始数据更新应用程序?
如果您使用WinAVR进行编译,您可以使用 include 执行此操作avr-objcopy
:
C:\WinAVR-20100110\bin> avr-objcopy.exe -I ihex -O binary input_file.hex output.bin
如果您在 Linux 上进行开发,则有一个包 avr-binutils 与该avr-objcopy
程序一起使用。
正如您所指出的,十六进制文件以英特尔十六进制格式编码。您必须从数据记录中提取闪存数据。每条记录(行)最多可保存 16 个字节(常见,但可能有所不同)的数据。请注意,有不同的记录类型,有些可能会引入地址偏移,具体取决于闪存数据的分布方式。Wiki 描述应该足以了解这个概念。
您可以使用一些工具(http://hex2bin.sourceforge.net/或其他 hex2bin 转换器)或编写自己的十六进制解析器,当文件 > 64 KB 时可能会有一些警告。