前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xilinx MCS(HEX)文件格式详解

Xilinx MCS(HEX)文件格式详解

作者头像
单片机点灯小能手
发布2021-08-06 11:21:06
2.4K0
发布2021-08-06 11:21:06
举报

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

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

先自己定义个文件格式

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

代码语言:javascript
复制
地址a1:数据d1
地址a2:数据d2
地址a3:数据d3

文件内容就像这样:

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

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

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

代码语言:javascript
复制
本行数据长度n 起始地址a:数据d1数据d2....数据dn

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

代码语言:javascript
复制
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个数据放在一行表示:

代码语言:javascript
复制
0A1001:112233445566778899AA        //1001起始的10个地址数据

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

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

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

代码语言:javascript
复制
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文件:

hex文件

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

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

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

校验和

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

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

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

其中记录类型对应:

代码语言:javascript
复制
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

hex文件

第一行的数据格式分析:

代码语言:javascript
复制
:02 0000 04 0800 F2

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

中间行数据格式分析:

代码语言:javascript
复制
:10 0010 00 CD020008CF020008D102000800000000 55


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

最后几行的数据:

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子电路开发学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先自己定义个文件格式
  • HEX文件格式详解
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档