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. CUDA kernel使用printf调试,一定要加cudaDeviceSynchronize

    #include <stdio.h> __global__ void print() { printf("Hello from (%d, %d)\n", blockId ...

  2. PGI 用户手册之 Site-Specific Customization of the Compilers

    翻译自PGI Compiler User's Guide 1.6. 使用PGI编译器进行并行编程 PGI编译器支持多种样式的并行编程: 使用pgf77,pgf95,pgfortran,pgcc或pgc ...

  3. CSS中的选择( ::selection和user-select)

      CSS中的选择( ::selection和user-select) 在网络上,我们出于不同原因选择内容,也许我们想复制文本并在某处引用它.对于移动端来说,选择内容比较难,我不喜欢在移动端选择内容. ...

  4. Anaconda之conda常用命令介绍

    anaconda用法: 查看已经安装的包: pip list 或者 conda list 安装和更新: pip install requests pip install requests --upgr ...

  5. echarts的bug

    Uncaught Error: Invalide sourceFormat: unknown at assert (util.js:404:15) at mountMethods (dataProvi ...

  6. C# 实现窗体底部滚动字幕

    使用的控件 panel和label及其定时器. 实现原理 通过定时器定时将label的位置在panel上进行移动,实现滚动的视觉效果,此处将label放在panel上的好处是可以单独设置滚动字母的背景 ...

  7. CSS兄弟范围选择器

    我们想要选择一部分兄弟元素,根据需要试着写了一个  td:nth-child(4)~td:not(:nth-child(7)~td) {        display: none;  } 从第5个元素 ...

  8. 【读书笔记】Linux系统管理初学者指南读书笔记1——第1-2章

    本博客记录一下<Linux系统管理初学者指南>这本书的读书笔记,最近由于想做一些关于嵌入式的项目,所以需要对Linux系统进行学习,正好之前买过这本书,内容还可以,能作为入门阅读 第1章 ...

  9. Python中用requests处理cookies的3种方法

    在接口测试中,大多数项目的接口是需要登录后进行操作的,经常用到requests库进行模拟登录及登录后的操作,下面是我不断踩坑后总结出来的关于登录凭证cookies的3种操作方法. 一. 用 reque ...

  10. #ifdef _WIN32 #ifdef _WIN64

    #ifdef _WIN32#ifdef _WIN64 这样的代码,实际上这提供了一种抽象机制,使代码可以在不同平台间移植. #ifdef _WIN32 #ifdef _WIN64 {windows 6 ...