由图2b)可知:擦除命令执行流程与写入命令执行流程大致相同,但写入命令调用Flash写入函数应将数据写入相应的地址,且等待Flash空闲时检验写入的数据是否正确,其余流程与擦除命令执行流程相同。
1.4 解析HEX文件
HEX文件以十六进制表示ASCII信息,以行为单位,每行以“:”开头,可以直接烧录到主芯片中。HEX文件每行包含5个域:数据长度域、数据地址域、数据记录类型域、数据域及校验和域。数据长度域占用1个字节,表示该行包含数据的字节数;数据地址域占用2个字节,表示该行首个数据的偏移地址。
数据记录类型域占用1个字节,有00、01、02、03、04、05等6种记录类型,其中00为记录数据,01为文件结束,02为记录扩展段地址,03为记录开始段地址,04为记录扩展段线性地址,05为记录开始线性地址。由于05类型不用于嵌入式程序,本系统无需解析05类型;数据域占用n个字节(1≤n≤32),表示具体数据;校验和域占用1个字节,用于校验数据。
HEX文件解析与校验流程如图3所示。
如图3可知:解析HEX文件时先判断数据的首字符是否为“:”,若是,则继续解析后面的数据;若不是,则报错;依次解析数据长度、数据偏移地址、数据记录类型,判断数据记录类型,若为00,则继续解析数据;若为01,则结束指令;若为02或04,则解析HEX文件基础地址;若为03,则解析开始段地址。00解析数据完成后进行数据校验,若数据校验通过,则写入主芯片相应的Flash地址中;校验不通过,则报错,并结束流程。