MCS文件
- 本文档借鉴“https://blog.csdn.net/wordwarwordwar/article/details/77151619”
- 感谢前辈,我们都是站在巨人的肩膀上
一.MCS文件格式
Type 00
- 表示要传输的内容数据(也就是bin文件的内容),格式如下所示
开始字符 | Byte Count | Addr | Type | Data | Checksum |
---|---|---|---|---|---|
: | 传输长度(见1) | 偏移地址(见2) | 0x00 | bin文件内容 | 校验(见3) |
- 1、表示该条指令要传输的bin文件有效字节数
- 2、上述有效字节数在bin文件中的偏移地址
- 3、该协议中除校验外其他字节求和(益处后保留低字节有效)后,按位取反加一
:1000000000000014000000140000001400000014A0
:100010000000001400000014000000140000001490
:10002000665599AA584E4C58000000000000FCFF8D
:10003000002800000000000000000000B8C301001C
- 上面文本是从某mcs文件中截取的部分内容,按照协议解析
10 0000 00 00000014000000140000001400000014 A0 //长度16,地址累加16,type00,bin文件内容,和校验
10 0010 00 00000014000000140000001400000014 90 //长度16,地址累加16,type00,bin文件内容,和校验
10 0020 00 665599AA584E4C58000000000000FCFF 8D //长度16,地址累加16,type00,bin文件内容,和校验
10 0030 00 002800000000000000000000B8C30100 1C //长度16,地址累加16,type00,bin文件内容,和校验
- 下图是对应bin文件截图
Type 01
- 表示要传输的内容数据为文件结尾
开始字符 | Byte Count | Addr | Type | Data | Checksum |
---|---|---|---|---|---|
: | 传输长度 | 偏移地址 | 0x01 | bin文件内容 | 校验 |
- 对应mcs文件如下所示
:00000001FF
Type 02
- 提供用于确定绝对目标地址的偏移量
- 我目前还没用到
Type 03
- is ignored during input and not sent duringoutput by Data I/O translator firmware
- 我目前还没用到
Type 04
- 我理解为扇区编号
- 在Type 00中地址最大偏移量为0xFFFF(64KB)恰好为一个flash一个扇区大小,所以跨扇区操作时需要发送该协议
开始字符 | Byte Count | Addr | Type | Data | Checksum |
---|---|---|---|---|---|
: | 传输长度 | 0x0000 | 0x04 | 扇区编号 | 校验 |
- 截取部分mcs文件
:020000040000FA
:1000000000000014000000140000001400000014A0
:100010000000001400000014000000140000001490
:10002000665599AA584E4C58000000000000FCFF8D
:10003000002800000000000000000000B8C301001C
。。。
。。。
:020000040001F9
:1000000005A1BFF263041D32230000B9A30040B96B
:1000100063041C32A30000B9A34040B963041C323E
:10002000A34000B9A38040B963041C32A38000B987
:10003000A3C040B963041C32A3C000B9A30041B9F6
-
可以看到每隔64kByte会有tyte4,且扇区编号加一
-
下图为qspi flash原理图
-
对应扇区分配如下图所示
Type 05
- provides the execution start address
- 我目前还没用到
二.MCS文件和bin文件的关系
- bin文件即为二进制文件,内部不含地址和校验信息
- xilinx中bin和mcs文件是依靠bootgen工具和.bif生成的
- 下面是一个bif文件的例子,是告诉bootgen,bin(或mcs)中包含那些内容以及如何 (按照什么顺序)放置,可以参考ug1283文档
the_ROM_image:
{
[bootloader]/home/hhl/work/02_project/06_peta_prj/01_prj/c_prj/prj25/fx_no_os/export/fx_no_os/sw/fx_no_os/boot/fsbl.elf
/home/hhl/work/02_project/06_peta_prj/01_prj/c_prj/prj25/app/Debug/app.elf
}