理论知识如下
S0:S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000置位。此记录表示记录的开始,无需下载到MCU。

S1: 地址为2字节(4个字符)的记录。

S2: 地址为3字节的记录。

S3: 地址为4字节的记录。

S5: 标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。

S7: 地为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。
下面是一个正式的文件:

S0190000072E314D4537303430303030323541412020202020000A
S315FFFDFF80108ADD4C1111198D098C8F9544271E08CA
S315FFFDFF90CD23A56EBF40AEAB10655930823887FB92
S315FFFDFFA06AEB6A9AF35848CD32517E0D0E31C5BFC5
S315FFFDFFB0A1B7B4AEE11586B87F431EC80F994804B5
S315FFFDFFC06A9D4247501A7BD123429A3DEF34C2B4B5
S315FFFDFFD0FEF114614C4C76240000938B580823FE14
S315FFFDFFE0D6496D3911579A003196EB0D31589E4E20
S315FFFDFFF0AB79CC4D480E07F0AE36C262A4ABA1512C
S70500000000FA

第一行S019... 表示当时编译mcu文件的时候,工程创建的路径(我猜测的,应该是这样吧)

第二行S3表示,这行是数据.(大概mcu是32位,所以内存地址是4字节),15表示,该行后面有21个字节(15是16进制)。FFFDFF80表示第一个地址,后面跟着的108ADD4CBC66E98D098C8F9544271E08都是数据,最后一个CA表示 校验字节。 不用理会。因此这一行实际要写入到flash中的数据就是21-1-4=16个字节。

第三行S3..和上面一样

最后一行 S7不用下载到flash中去。它是程序