您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 招标投标 > S19与HEX文件格式解析
S19格式与HEX格式详解2019.03S19与HEX文件中的所有字节都是可打印的ASCII字符,可用任何文本编辑器打开查看S19S-record格式文件是FreescaleCodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问MotorolaformatforEEPROMprogramming。S19格式是每一行为一个记录,每个记录由6个部分组成,除起始代码外,均用十六进制数大端格式表示:1.起始代码:一个大写字母“S”,表示一个新记录的开始。2.记录类型:1个十六进制位,取值0~9,定义记录块的类型,详见下文。3.字节数:2个十六进制位,表示地址、数据、校验和的总字节数。4.地址:4,6或8个十六进制位,具体的长度由记录类型决定,表示本条记录在内存中的起始地址。5.实际数据:2n个十六进制字符,n为前面指定的字节数的值减去地址和校验和的长度。6.校验和:2个十六进制字符,为字节数、地址和实际数据的所有字节(两个十六进制位)的和对0xFF取模,再求反码得到。一个完整的MOTOROLAS-Record格式数据包含如下区域:typelengthaddressdatachecksum各字段的意思分别如下:type:标示记录的类型,该字段占据1-byte。它可以有如下数值:“S0”,“S1”,“S2”,“S3”,“S5”,“S7”,“S8”,“S9”“S0”--记录描述信息“S1”,“S2”,“S3”--记录存储的数据。这三者的区别在于地址(address)的长度不同,S1为2-byte,S2为3-byte,以及S3为4-byte。“S5”--包含了“S1”,“S2”,“S3”的信息。“S7”,“S8”,“S9”--确定程序的开始地址。这三者的区别也在于地址(address)的长度不同,S9为2-byte,S8为3-byte,以及S7为4-byte。length:标示了数据的长度,确切地说,是address,data和checksum这三个字段的byte的个数。该字段占据1-byte。address:标示了数据写入的起始地址。该字段的长度取决于type的取值。data:标示了存储的数据。该字段占据的byte个数可以这样计算:length的值-address字段的长度(取值为2、3、4)-1(checksum字段的长度)checksum:标示校验位,占据1-byte。该数据可以由address和data的数据累加然后每bit取反获得。各记录类型代表的意义如下:记录类型描述地址字节数是否数据序列S0块头部2是S1数据序列2是S2数据序列3是S3数据序列4是S5记录数2否S7块结束4否S8块结束3否S9块结束2否S0类型的数据序列包含厂商指定数据而不是程序数据。S5类型记录的记录数存放在2字节的地址域中。S7,S8和S9类型记录的地址域可存放程序的起始地址。S0Record:记录类型是“S0”(0x5330)。地址场没有被用,用零置位(0x0000)。数据场中的信息被划分为以下四个子域:name(名称):20个字符,用来编码单元名称ver(版本):2个字符,用来编码版本号rev(修订版本):2个字符,用来编码修订版本号description(描述):0-36个字符,用来编码文本注释此行表示程序的开始,不需烧入memory。S1Record:记录类型是“S1”(0x5331)。地址场由2个字节地址来说明。数据场由可载入的数据组成。S2Record:记录类型是“S2”(0x5332)。地址场由3个字节地址来说明。数据场由可载入的数据组成。S3Record:记录类型是“S3”(0x5333)。地址场由4个字节地址来说明。数据场由可载入的数据组成。S5Record:记录类型是“S5”(0x5335)。地址场由2字节的值说明,包含了先前传输的S1、S2、S3记录的计数。没有数据场。S7Record:记录类型是“S7”(0x5337)。地址场由4字节的地址说明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。S8Record:记录类型是“S8”(0x5338)。地址场由3字节的地址说明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。S9Record:记录类型是“S9”(0x5339)。地址场由2字节的地址说明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。例如:S02B0000433A5C446F63756D656E747320616E642053657474696E67735C7A6F75642E4143434F554E54535C7DS208010000FFFFFFFFFAS30800020000000000F5S5030002FAS9030000FC第一行:没什么,开个头而已。第二行:地址0x10000有4个0xFF第三行:地址0x20000有3个0x00第四行:标明之前有两条数据记录第五行:程序从0x0000地址开始运行例如:S00F000068656C6C6F202020202000003CS11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9S111003848656C6C6F20776F726C642E0A0042S5030003F9S9030000FC起始代码记录类型字节数地址数据校验和IntelHEXIntelHEX文件中每一行称为一个记录,每个记录由6个部分组成,除起始代码外,均用十六进制数表示:1.起始代码:一个半角冒号“:”,表示一个新记录的开始。2.字节数:2个十六进制位,表示数据域的字节数,通常为16(0x10)或32(0x20)。3.地址:4个十六进制位,表示本条记录在内存中的起始地址。由于只能表示64KB范围的地址,故利用段地址和段内偏移量的寻址方案,段地址和段内偏移量使用不同的记录类型区分,详见下文。地址采用大端格式。4.记录类型:2个十六进制位,取值00~05,定义记录块的类型,详见下文。5.实际数据:2n个十六进制字符,n为前面指定的字节数的值。6.校验和:2个十六进制字符,为除冒号和校验和本身外的所有字节(两个十六进制位)的和对0xFF取模,再求补码得到。例如一条记录“:0300300002337A1E”中,03+00+30+00+02+33+7A=E2,再对E2求补码(按位取反再加1)得到1E。验证记录块是否正确时,将除冒号外的所有字节相加再对0xFF取模,应得0。六种记录类型分别为:00:可重定位的数据记录,使用如上所述格式。01:文件结束标志,一个文件只允许在文件的最后有一个01类型的记录,通常为“:00000001FF”。02:扩展段地址记录,当16位地址不够用时,用此类型记录指定段地址,用随后的一个00类型记录指定段内偏移量及数据。段地址左移四个二进制位再加上段内偏移量为实际的地址,与80x86实模式的寻址方案相同,详见本站另一篇文章《段地址:段内偏移量寻址方案》。02类型记录的地址域必须为0000,段地址存放在数据域,故字节数必须为02。03:起始段地址记录。对于80x86处理器,此类型记录用于指定CS:IP寄存器对的初始值。03类型记录的地址域必须为0000,字节数为04,其中数据的前两个字节指定CS值,后两个字节指定IP值。04:扩展线性地址记录,用于32位寻址。用一个04类型记录指定32位地址的高16位,用随后的一个00类型记录指定32位地址的低16位及数据。04类型记录的地址域必须为0000,32位地址的高16位存放在数据域,故字节数必须为02。05:起始线性地址记录。05类型记录的地址域必须为0000,字节数必须为04。4个字节的记录表示80386及更高级CPU中EIP寄存器的值。IntelHEX还有几个子类型的格式:I8HEX或INTEL8:8位格式。I16HEX或INTEL16:16位格式。允许使用02类型记录,数据域的大小端格式可交换。I32HEX或INTEL32:32位格式。允许使用03,04,05类型记录,数据域的大小端格式可交换。例如::10010000214601360121470136007EFE09D2190140:100110002146017EB7C20001FF5F16002148011988:10012000194E79234623965778239EDA3F01B2CAA7:100130003F0156702B5E712B722B732146013421C7:00000001FF起始代码字节数地址记录类型数据校验和
本文标题:S19与HEX文件格式解析
链接地址:https://www.777doc.com/doc-5775603 .html