Hex格式和Mot格式简介

一、Hex格式介绍 
 
1.1 什么是 Intel HEX 文件格式? 
Intel HEX文件 是由一行行符合 Intel HEX文件格式的文本所构成的ASCII文本文件。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。
Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。
大多数EPROM编程器或模拟器使用Intel HEX文件。 
 
1.2 记录格式 
Intel HEX由任意数量的十六进制记录组成。
每个记录包含5个域,它们按以下格式排列: 
:llaaaatt[dd...]cc 
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。
 
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: 
: 每个Intel HEX记录都由冒号开头. 
ll 是数据长度域,它代表记录当中数据字节(dd)的数量. 
aaaa 是地址域,它代表记录当中数据的起始地址. 
tt 是代表HEX记录类型的域,它可能是以下数据当中的一个: 
00 – 数据记录 
01 – 文件结束记录 
02 – 扩展段地址记录 
04 – 扩展线性地址记录 
dd 是数据域,它代表一个字节的数据.
一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符. 
cc 是校验和域,它表示这个记录的校验和.
校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足. 
 
1.3.1 数据记录 
Intel HEX文件由任意数量以回车换行符结束的数据记录组成.
数据记录外观如下: 
:10246200464C5549442050524F46494C4500464C33 
其中: 
10 是这个记录当中数据字节的数量. 
2462 是数据将被下载到存储器当中的地址. 
00 是记录类型(数据记录) 
464C…464C是数据. 
33 是这个记录的校验和. 
 
1.3.2 扩展线性地址记录(HEX386) 
扩展线性地址记录也叫作32位地址记录或HEX386记录.
这些记录包含数据地址的高16位.
扩展线性地址记录总是有两个数据字节,外观如下: 
:02000004FFFFFC 
其中: 
02 是这个记录当中数据字节的数量. 
0000 是地址域,对于扩展线性地址记录,这个域总是0000. 
04 是记录类型 04(扩展线性地址记录) 
FFFF 是地址的高16位. 
FC 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh). 
 
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.
线性地址保持有效,直到它被另外一个扩展地址记录所改变. 
通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址. 
 
以下的例子演示了这个过程.. 
来自数据记录地址域的地址(2462)+ 扩展线性地址记录的数据域(FFFF) = 绝对存储器地址(FFFF2462)。  
 
1.3.3 扩展段地址记录(HEX86) 扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.
扩展段地址记录总是有两个数据字节,外观如下: 
:020000021200EA 
其中: 
02 是记录当中数据字节的数量. 
0000 是地址域.对于扩展段地址记录,这个域总是0000. 
02 是记录类型 02(扩展段地址记录) 
1200 是地址段. 
EA 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h). 
 
当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.
段地址保持有效,直到它被另外一个扩展地址记录所改变. 
通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址. 
 
以下的例子演示了这个过程.. 
来自数据记录地址域的地址(2462)+ 扩展段地址记录数据域(1200)= 绝对存储器地址(00014462)。
 
1.3.4 文件结束(EOF)记录 
Intel HEX文件必须以文件结束(EOF)记录结束.
这个记录的记录类型域的值必须是01.
EOF记录外观总是如下: 
:00000001FF 
其中: 
00 是记录当中数据字节的数量. 
0000 是数据被下载到存储器当中的地址. 在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址. 
01   是记录类型 01(文件结束记录) 
FF   是这个记录的校验和,计算方法如下: 01h + NOT(00h + 00h + 00h + 01h). 
 
 
1.4 Intel HEX文件例子: 
下面是一个完整的Intel HEX文件的例子: 
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244 
:10000300E50B250DF509E50A350CF5081200132259 
:03000000020023D8 
:0C002300787FE4F6D8FD7581130200031D 
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 
:04003F00A42EFE22CB 
:00000001FF   
 
 
二、Mot格式介绍   
Motorola S-records 16进制文件格式是嵌入式中除intel hex之外很常见的格式,下面是它的格式:
 
+-------------------//------------------//-----------------------+ 
| type(hex1) | count(hex 1) | address | data | checksum(从count累加到checksum,总和为0xFF) | 
+-------------------//------------------//-----------------------+ 
 
S0 :标识记录,地址域长度为2个字节,并用0000填充,数据区记录了一些模块名称和版本之类的信息 
S1 :数据记录,地址域长度为2个字节,数据区域为数据内容。 
S2 :数据记录,地址域长度为3个字节,数据区域为数据内容。 
S3 :数据记录,地址域长度为4个字节,数据区域为数据内容。 
S5 :统计记录,地址域长度为2个字节,内容是之前数据记录(S1,S2,S3)的个数,数据区域空。 
S7 :运行记录,地址域长度为4个字节,内容是程序启动的地址,数据域空。 
S8 :运行记录,地址域长度为3个字节,内容是程序启动的地址,数据域空。 
S9 :运行记录,地址域长度为2个字节,内容是程序启动的地址,数据域空。 
 
下面是一个例子,大家看看: 
S02B0000433A5C446F63756D656E747320616E642053657474696E67735C7A6F75642E4143434F554E54535C7D 
S208010000FFFFFFFFFA 
S30800020000000000F5 
S5030002FA 
S9030000FC 
 
第一行:没什么,开个头而已。 
第二行:地址0x10000有4个0xFF 
第三行:地址0x20000有3个0x00 
第四行:标明之前有两条数据记录 
第五行:程序从0x0000地址开始运行 
 
关于checksum的算法 
checksum = 0xFF - (从count段开始所有字节的总和)。 
 
转自:http://www.cnblogs.com/guoyiqi/archive/2013/06/12/3203859.html
完结。

Hex格式和Mot格式简介的更多相关文章

  1. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  2. AngularJS过滤器filter-时间日期格式-渲染日期格式-$filter

    今天遇到了这些问题索性就 写篇文章吧 话不多说直接上栗子 不管任何是HTML格式还是JS格式必须要在  controller 里面写 // new Date() 获取当前时间 yyyy-MM-ddd ...

  3. C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用

    .net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...

  4. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

  5. Linux下如何将数据库脚本文件从sh格式变为sql格式

    在从事软件开发的过程中,经常会涉及到在Linux下将数据库脚本文件从sh格式变为sql格式的问题.本文以一个实际的脚本文件为例,说明格式转换的过程.        1. sh文件内容 本文中的文件名为 ...

  6. TLV格式是什么格式

    TLV 格式是什么格式 一种可变格式, TLV 的意思就是: Type 类型, Lenght 长度, Value 值: Type 和 Length 的长度固定,一般那是 2 . 4 个字节: Valu ...

  7. 把硬盘格式化成ext格式的cpu占用率就下来了

    把硬盘格式化成ext格式的cpu占用率就下来了我是使用ext4格式 @Paulz 还有这种事情? 现在是什么格式?- - ,你自己用top命令看一下啊就知道什么东西在占用cpu了下载软件一半cpu都用 ...

  8. Linux在什么样的从脚本文件数据库sh格式改变sql格式

    在软件开发过程中,经常参与Linux从下一个脚本文件数据库sh格式改变sql格式问题.在本文中,一个实际的脚本文件,例如.描述格式转换过程.        1. sh文件内容 本文中的文件名称为exa ...

  9. Excel 转 vCard格式、CSV格式

    Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...

  10. Intel格式与Motorola格式的区别

      Intel低字节在前 Motorola高字节在前    在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式.究竟两种编码格式有 ...

随机推荐

  1. 【小记】如果 golang 内存不够了怎么办

    在看 redis 1.0 源码时,总会看到需要申请内存的地方,如果申请不到需要大的内存就会返回 NULL,然后在调用层抛出 oom. 比如 listDup 中在复制特殊 value 或者加入新节点时都 ...

  2. C# DateTime转换为字符串

    12小时制:DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 24小时制:DateTime.Now.ToString("yyyy- ...

  3. rust字节数组转换为string

    一.String::from_utf8 fn main() { let bytes = vec![0x41, 0x42, 0x43]; let s = String::from_utf8(bytes) ...

  4. PHPStudy设置局域网访问

    PHPStudy是一款轻量级PHP服务器,搭建环境迅速.但是与XAMPP之类服务器不同的是,PHPStudy默认只有本机才能设置域名.访问网站.需要更改vhost.conf中的文件,才可以使得内网可以 ...

  5. Nmap常见命令

    一测试环境 靶机:metasploitable2-linux  [下载地址]   IP:192.168.88.128 攻击机: kali   IP :192.168.88..131 二 Nmap命令 ...

  6. QFramework UI 笔记(后续不断 直到UKitI篇结束)

    1.所有的UIElement  传消息给 UIPanel 时,必须先注册 SendEvent();      RegisterEvent(); 2.注意Unity直接生成控件的名称,命名带(1)之类的 ...

  7. 使用vue3在element plus中在el-table中拖拽

    1.安装 vuedraggable npm i -S vuedraggable 2.在使用的组件,引入.sortablejs包含在vuedraggable import Sortable from & ...

  8. go 死锁示例

    以下代码不会有任何打印.原因是:channel ch 在make 时是无缓冲区的channel.无缓冲区的channel 发送一个数据进入后需要等待这个数据被消耗才能继续发送下一个数据.然而getFr ...

  9. PostScript语言教程(五、文本打印)

    5.1.POSTSCRIPT字体 字体是具有统一规格的字符集.其中包含数百个字符集,包含熟悉的TIMES和HELVETICA 使用POSTSCRIPT字体 在你打印文本之前,你需要指定所需的字体,这个 ...

  10. pandas的数据结构--Series创建使用

    # 1. 使用Series创建一个空的系列:import pandas as pds=pd.Series()print(s)输出结果为:Series([], dtype: float64) # 2. ...