1.读取和生成hex文件
from intelhex import IntelHex
hex = IntelHex(path)
hex_data = hex.todict()
hex_data中的内容是{addr:value}形式,即每一个地址对应一个字节的数据,都是以10进制形式保存,如果想获得一段范围内的数据
from intelhex import IntelHex
ole_hex = IntelHex(path)
hex_data = old_hex.todict()
start_addr = "0x00000000"
end_addr = "0xA02fcfff"
save_data = {}
for addr in range(int(start_addr,16),int(end_addr,16)+1):
save_data[addr] = hex_data[addr]
save_hex = IntelHex(save_data)
#生成hex
with open("new_hex.hex",'w') as fileout:
save_hex.write_hex_file(fileout,write_start_addr = True)
2.合并hex文件
from intelhex import IntelHex
hex_1 = IntelHex(path)
hex_1_data = hex_1.todict()
hex_2 = InerlHex(path)
hex_2_data = hex_2.todict()
merge_hex_data = {**hex_1_data,**hex_2_data}
merge_hex = IntelHex(merge_hex_data)
with open("merge.hex","w") as fileout:
mewge_hex.write_hex_file(fileout,write_start_addr = True)
3.计算crc校验值,实测可用
import binascii
from intelhex import IntelHex
hex_1 = IntelHex(path)
hex_1_data = hex_1.todict()
content = ""
for key,value in hex_1_data.items():
int_hex = hex(value).split("0x")[1]#之所以用split不用strip去除0x,是因为strip在去除字符的时候会遇到意想不到的错误
if len(int_hex)<2:
int_hex = "0" + int_hex
content += int_hex
print('%08x'%(binascii.crc32(binascii).a2b_hex(content))))