Xilinx MCS(HEX)文件格式详解

简介: Xilinx MCS(HEX)文件格式详解

HEX 文件是指以hex为后缀,采用Intel-HEX编码规则的文件,可以直接使用文本编辑工具打开。通常用来对微控制器或ROM进行编程,本质上都是对存储器编程,其中包含了每个地址对应的数据。


Xilinx 用于程序固化的MCS文件虽然是以.mcs后缀命名,但其本质是hex文件,把后缀改成.hex后,可以直接使用文件工具打开,完全符合Intel-HEX文件格式。


先自己定义个文件格式


比如,我们有10个数据,需要存放在10个地址,我们可以自己定义一个文件格式

地址a1:数据d1
地址a2:数据d2
地址a3:数据d3


文件内容就像这样:

1001:11            //地址0x1001存放数据0x11
1002:22
1003:33
1004:44
1005:55
1006:66
1007:77
1008:88
1009:99
100A:AA


如果数据量少这样表示也还算清晰,如果数据量大,这种数据存储方式就会使得文件行数非常多。


如果能把多个数据放在同一行就好了,我们改变一下文件格式:

本行数据长度n 起始地址a:数据d1数据d2....数据dn


然后上面的10行数据变成了下面这样:

041001:11223344        //1001起始的4个地址存放的数据:11 22 33 44
041005:55667788        //1005起始的4个地址存放的数据:55 66 77 88
021009:99AA            //1009起始的2个地址存放的数据:99 AA


这样10行数据就被压缩到了3行,当然也可以10个数据放在一行表示:

0A1001:112233445566778899AA        //1001起始的10个地址数据


为了保证文件传输的可靠性,我们还需要添加校验数据,附加在每一行的末尾,用来对本行数据进行校验。


校验算法采用累加和,只对数据部分进行求和运算,取累加和的低8位数据。


于是,上面的10组数据变成了下面这样:

041001:11223344 AA        //0xAA  = 0x11 + 0x22 + 0x33 + 0x44
041005:55667788 BA        //0x1BA = 0x55 + 0x66 + 0x77 + 0x88
021009:99AA 43            //0x143 = 0x99 + 0xAA


这样,数据在传输过程中的完整性和准确性就大大提高了。


其实HEX文件也是以类似的方式,表示存储器的地址和数据的。


HEX文件格式详解

我们使用Notepad++打开一个Hex文件:

640.jpg


可以看到一些数据被不同颜色区分出来了,相同颜色的数据含义是相同的


黑色字体的为真正的数据部分,每行末尾的一个字节数据为当前行数据的校验字节,校验和=0x100-累加和


Notepad++有HEX文件自动校验功能,如果累加和不对最后一个字节会是红色字体。

640.jpg


冒号后的第一个字节数据,如02/10,分别表示当前行有2/16字节数据。


HEX文件每行数据都由4部分构成:

起始代码:+数据个数(2字节)+起始地址(4字节)+记录类型(1字节)+数据(N字节)+校验和(1字节)


其中记录类型对应:

00:数据,示例:0B 0010 00 6164647265737320676170 A7
01:文件结束,示例:00 0000 01 FF
02:扩展段地址,示例:02 0000 02 1200 EA
03:起始段地址,示例:04 0000 03 0000 3800 C1
04:扩展线性地址,示例:02 0000 04 FFFF FC
05:起始线性地址,示例:04 0000 05 0000 00CD 2A


详细描述,可以查看Wikipedia:

https://en.wikipedia.org/wiki/Intel_HEX

640.jpg


第一行的数据格式分析:

:02 0000 04 0800 F2
02:本行有2个字节数据
0000:本行数据的起始地址
04:本行记录类型为扩展线性地址
0800:2字节数据
F2:校验和=0x100-(02+04+08) = 0xF2


中间行数据格式分析:

:10 0010 00 CD020008CF020008D102000800000000 55
10:本行有16字节数据
0010:本行数据起始地址0x0010
00:本行记录类型为数据
CD020008CF020008D102000800000000:16字节数据
55:校验和


最后几行的数据:

:1029F00001020304060708090000000000000000AF//数据
:102A00000000000001020304010203040607080994//数据
:04 2A10 00 02040608 AE        //数据
:04 0000 05 080000F9 F6        //起始线性地址
:00 0000 01 FF                //文件结束


其他文件格式,比如BIN文件格式,就简单干脆了,只有数据部分,没有任何的地址信息,也没有校验信息,所以BIN格式文件使用时需要指定起始地址。


关于各种文件格式的区别可以查看:BIN、HEX、AXF、ELF文件格式有什么区别

目录
相关文章
|
芯片
STM32U5系列芯片,不支持ST-LINK v2怎么办
STM32U5系列芯片,不支持ST-LINK v2怎么办
117 0
|
Linux 开发工具 git
Xilinx Bit文件格式详解
Xilinx Bit文件格式详解
889 0
Xilinx Bit文件格式详解
|
测试技术
elf格式转换为hex格式文件的两种方法
这周工作终于不太忙了,可以写点笔记总结一下了。 之前的文章如何在Keil-MDK开发环境生成Bin格式文件,介绍了如何在Keil开发环境使用fromelf软件,将生成的axf文件转换为bin文件,这次我们再来介绍一下如何将elf文件转换为hex文件。
1904 0
|
7月前
|
存储 算法 物联网
MCU的最佳存储方案CS创世 SD NAND
MCU的最佳存储方案CS创世 SD NAND
99 7
|
异构计算
【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证
【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证
1213 0
|
算法 异构计算
基于FPGA的HDB3编译码verilog实现,包括testbench
基于FPGA的HDB3编译码verilog实现,包括testbench
228 0
|
传感器 芯片
【Renesas RA6M4开发板之I2C读取mpu6050】
【Renesas RA6M4开发板之I2C读取mpu6050】
260 0
|
存储 芯片 异构计算
使用ISE iMPACT实现一键bit转mcs,bit文件下载,mcs文件下载
使用ISE iMPACT实现一键bit转mcs,bit文件下载,mcs文件下载
882 0
使用ISE iMPACT实现一键bit转mcs,bit文件下载,mcs文件下载
|
芯片 数据格式 异构计算
音频DA转换芯片CS4334及基于FPGA的时钟配置
音频DA转换芯片CS4334及基于FPGA的时钟配置
音频DA转换芯片CS4334及基于FPGA的时钟配置