引言
s19和.mot文件只是后缀不同,其余相同
1.bin、hex和s19(mot)介绍
1.1 bin
对二进制文件而言,其实没有”格式”。文件只包括了纯粹的二进制数据。
1.2 hex
Intel Hex由任意数量的十六进制记录组成。每个记录包含6个域,它们按以下格式排列。
| MARK | RECLEN | OFFSET | RECTYP | DATA | CHKSUM |
| MARK |--------> (1Byte)Start Code(冒号): 每个 Intel HEX 记录都由冒号开头;
| RECLEN |-----> (1Byte)Byte count(本行数据长度):是数据长度域,它代表记录当中数据字节的数量;
| OFFSET |-----> (2 Byte)Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址;
| RECTYP |-----> (1 Byte)Record type(数据类型): 是代表HEX记录类型的域,它可能是以下数据当中的一个:
| DATA |----------> (n Byte)Data(数据): 是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符;
| CHKSUM |-----> (1 Byte)Checksum(校验码): 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码的值相加,以256为模进行补足(补码)。
校验和计算举例
最后一个字节表示除了起始码之后,其余字节的校验和,其计算方式,下面简单介绍一下,这里为更加直观
对之前的hex
做了一些简单处理,便于后面分析:
:04 02B0 00 92020008 AE
0x04 + 0x02 + 0xB0 + 0x92 + 0x02 + 0x08 = 0x152
~0x52 + 1 = 0xAE
:04 0000 05 08000135 B9
0x04 + 0x05 + 0x80 + 0x01 + 0x35 = 0X47
~0x47 + 1 = 0XB9
:00 0000 01 FF
~0x01 + 1 = 0xFF
1.3 s19格式
2.bin、hex和s19文件互转思路分析
2.1 bin转hex(s19)
思路:从上面介绍可知,bin文件为全数据文件,不记录地址信息;那么地址信息从哪里来呢?不卖关子直接回答:地址信息取决于硬件。知道地址信息后,就可以按照hex文件的格式进行转换了
2.2 hex(s19)转bin
思路:根据hex(s19)文件的格式,提取出数据,写入bin文件
2.3 hex和s19互转
思路:提取对应数据,按照对应格式进行组装即可