2023年12月1日发(作者:性价比最高的手机推荐)
S19文件格式详解
1. 概述
为了在不同的计算机平台之间传输程序代码和数据,摩托罗拉将程序和数据文件以一种
可打印的格式(ASCII格式)编码成s格式文件。
S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,
S格式文件是 Freescale推荐使用的标准文件传送格式。编译完成之后,Freescale
CodeWarrior编译器将在bin文件夹下自动生成“*.abs.s19”文件,这个文件包含最终下
载带单片机中的所有内容。
是一段直接烧写进MCU的ASCII码,英文全称问Motorola format for EEPROM
programming。
2. 格式定义及含义
S-record每行最大是78个字节,156个字符。
S格式文件中的每一行称为一个S记录,每个S记录由记录类型、记录长度、存储地址、
代码/数据、校验和5个部分组成。
每字节数据被编码成2个16进制字符,第一个字符代表数据的高四位,第二个字符代
表数据的低4位。
5个部分具体内容如下:
记录类型记录长度存储地址代码数据校验和
/ / / (/) /
记录类型:
2个字符(即1个字节),用来描述记录的类型。记录供定义了8种类型:
S0:S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000置位。
此记录表示记录的开始,无需下载到MCU。
S1: 地址长度为2字节(4个字符)的记录。记录类型是“S1” (0x5331)。地址场由2个字
节地址来说明。数据场由可载入的数据组成。
S2: 地址长度为3字节的记录。记录类型是“S2” (0x5332)。地址场由3个字节地址来说
明。数据场由可载入的数据组成。
S3: 地址长度为4字节的记录。记录类型是“S3” (0x5333)。地址场由4个字节地址来说
明。数据场由可载入的数据组成。
S5: 标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。记录类型是
“S5” (0x5335)。地址场由2字节的值说明,包含了先前传输的S1、S2、S3记录的计数。
没有数据场。
只有S1、S2、S3、S5需要写入到FLASH中。
S7: 地址长度为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示
程序的结束,无需下载到MCU。记录类型是“S7”(0x5337)。地址场由4字节的地址说明,
包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。
S8: 地址长度为3字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示
程序的结束,无需下载到MCU。记录类型是“S8” (0x5338)。地址场由3字节的地址说
明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。
S9: 地址长度为2字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示
程序的结束,无需下载到MCU。记录类型是“S9” (0x5339)。地址场由2字节的地址说
明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。
记录长度:
2个字符(即1个字节),显示在记录中剩余的字节数。即
记录长度 = 存储地址字节数 + 代码/数据字节数 + 校验和字节数
存储地址:
2或3或4个字节(由记录类型决定),用来表示代码/数据应该装载的起始地址。这部
分的长度取决于载入地址的字节数。2个字节的地址占用4个字符,3个字节的地址占用6
个字符,4个字节的地址占用8个字符。
代码/数据:
0-64字符(即0-32字节),表示需要下载到MCU中的数据。
校验和:
2个字符(即1字节),校验数据,计算方法:
校验和 = 0Xff – (记录长度 + 存储地址 + 代码/数据)
注意,为校验和不是字符的校验和,而是实际二进制数的校验和。这些字符当被配对并
换算成16进制数据的时候形成了一个最低有效字符节,该字符节用来表达作为补充数据,
地址和数据库的字符对所代表的(字节的)补码的byte总和。即计数值、地址场和数据场
的若干字符以两个字符为一对, 将它们相加求和,和的溢出部分不计,只保留最低两位字
符NN,checksum =0xFF-0xNN。
3. 实例:
S01F0000443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
第一行:S0,表示S19文件格式开始;1F为剩余字节数;0000无用;
443A5C50726F6A6563745F335C62696E5C50726F6A6563742E616273
为D:Project_3binProject_.的ASCII码;71为校验和.
S123C000CF2100C6055B134A800BFE4A8000FE0000C015C00000
第二行: S1,表示本条记录存储地址长度为2字节;23(注意为16进制)剩余字节数,C000,
表示起始地址,92表示校验和。即,本行表示将
CF2100C6055B134A800BFE4A8000FE0000C015C0依
次下载到从地址C000开始的一段连续地址中。
S218FE8020F2FEC013EC31270BED31180A30700434F920F10A0B
第三行: S2,表示本条记录存储地址长度为3字节,18(16进制数)表示剩余字节数,FE8020
表示起始地址,0B为校验和。
S9030000FC
校验和的计算:以S2记录为例,
校验和 = 0xFF – (0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A)。
在用Freescale CodeWarrior调试FLASH擦除和写入时需注意以下几点:
1) 已写入过的FLASH地址需要在擦除后才能再次写入。
2) 在内存监视窗口有时无法看到是否正确写入和擦除,可用指针从地址处读出数据检查是
否正确擦除及写入。
3) 在BDM模式下,用自己写的FLASH下载代码通过串口导入s19文件后,将导致芯片
锁定,若不解锁(Unsecure),无法再次通过BDM或者串口下载s19文件。但当芯片
脱离BDM独立运行时未发现此问题。
注: 软件版本;CW for S12(X) 5.0,芯片型号:MC9S12XDP512
发布者:admin,转转请注明出处:http://www.yc00.com/num/1701382642a1075527.html
评论列表(0条)