1.主题
本文针对vivado生成的MCS固化文件中的数据进行解析
2.MCS固化文件中的数据
2.1部分数据
MCS数据包含前导码,数据,结束码三部分,所有数据字段均为16进制,并且在FLASH中没有存数据的地址段,默认的数据都为FF。
/*前导码*/
:020000040000FA
/*数据*/
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
.........
/*另一分区启动程序前导码*/
:0200000400FFFB
/*数据*/
:10FC0000FFFFFFFF000000BB11220044FFFFFFFFCA
........
/*结束码*/
:00000001FF
2.2MCS固化文件数据结构
三种数据字段均遵循基本结构
/*信息结构*/
:LLAAAATTDD.....DDCC
1.LL:数据长度。
2.AAAA:地址字段,,根据TT类型分为扩展地址(高16位)、数据地址(低16位)以及无效地址。
3.TT:记录类型,00(数据)、01(文件结束)、04(扩展地址,用于地址为32位时)。
4.DD:数据,长度由LL决定。
5.校验和:每个字节相加后的结果的最低字节,在取补码校验和,即0x100-结果的最低字节。
2.3前导码字段举例分析
前导码:020000040000FA
1.LL(数据长度):0x02,代表该字段中有2字节数据;
2.AAAA(扩展地址):0x0000,代表地址的高16位;
3.TT(记录类型):0x04,记录类型为扩展地址或者前导码;
4.DDDD(数据):0x0000,2字节;
5.CC(校验和):0xFA,0x02+0x00+0x00+0x04+0x00+0x00=0x06(结果取低字节),补码校验和0x100-0x06=0xFA。
若MCS存在存储多个分区的程序,则会出现多个前导码,比如0200000400FFFB,前导码中主要存储的是高16位地址信息
2.4 数据字段举例分析
数据字段:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
1.LL(数据长度):0x10,代表该字段中有16字节数据;
2.AAAA(数据地址):0x0010,代表地址的低16位,数据的实际地址为(不考虑与Flash的地址映射关系):高16位(0x0000)<<16+低16位(0x0010)=0x00000010;
3.TT(记录类型):0x00,记录类型为数据;
4.DD…DD(数据):0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,16字节;
5.CC(校验和):0xF0,0x10+0x00+0x10+0x10+0x10*0xFF(数据为16个0xFF)=0x10(结果取低字节),补码校验和0x100-0x10=0xF0。
2.5 结束码字段举例分析
结束码字段:00000001FF
1.LL(数据长度):0x00,代表该字段中无数据;
2.AAAA(地址):0x0000,无意义;
3.TT(记录类型):0x01,记录类型为结束,表示有效数据到此结束;
4.DD(数据):无数据;
5.CC(校验和):0xFF,0x00+0x00+0x00+0x01=0x01(结果取低字节),补码校验和为0x100-0x01=0xFF。
3.结束语
只介绍遇到的三种类型,其他类型还未遇到,遇到,会继续更新!!!!!!