读懂 Intel Hex 文件

1、问题描述

在生成Atmega128的固件程序时,常指定格式为"intel-extended",如下:

今天要生成一版新的含Boot的程序,这就涉及到hex的拼接工作。

那首先要搞清楚的问题就是intel hex的具体格式是什么?

2、 intel hex 的具体格式

Intel Hex文件是遵循Intel Hex文件格式的ASCII文本文件。
在Intel Hex 文件的每一行中都包含了一个hex记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成。

Intel Hex文件常用来传输要存储在ROM、EPROM或者Flash中的程序和数据。大部分的EPROM编程器都能使用Intel Hex文件。

Intel Hex由任意数量的十六进制记录组成。每个记录包含6个域,它们按以下格式排列。

Start Code(冒号): 每个 Intel HEX 记录都由冒号开头
Byte count(本行数据长度):是数据长度域,它代表记录当中数据字节的数量
Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址
Record type(数据类型): 是代表HEX记录类型的域,它可能是以下数据当中的一个:
  00-数据记录
  01-文件结束记录
  02-扩展段地址记录
  03-开始段地址记录
  04-扩展线性地址记录
  05-开始线性地址记录
Data(数据): 是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符
Checksum(校验码): 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对
的值相加,以256为模进行补足。

注:目前我看到的hex文件末尾都以以下内容结束。
:00000001FF

3、关于扩展段地址记录

第一行中的021000 ,其中的02表示扩展段地址记录,扩展段的地址为1000。
第二行至以下行中的所有地址如,E000 其实际地址为0xE000 + 0x10000 = 0x1E000

时间: 2024-08-05 11:16:14

读懂 Intel Hex 文件的相关文章

Intel HEX文件解析

近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编译完以后都须要通过一个USB线来完毕传输烧录的工作,这个还是非常麻烦的. 原理解读 在Arduino中.利用USB来完毕传输烧录大概是这么一个过程. 每一个Arduino源程序.即sketch文件,经过一系列的编译处理以后.终于会形成一个Intel HEX格式的文件.这个HEX文件事实上就一个被封装

Json数据如果作为配置文件比较难读懂,XML文件作为配置文件有先天的优势,容易读懂和配置,因此不考虑效率时,在页面中宁可用XML文件作为配置文件再用JS做一次转化把XML转成JSON使用

比如如下相对比较复杂的XML <myobjects> <!--object 1--> <myobject> <id>yourID_1</id> <name>your name</name> <description> <![CDATA[Merck Biologics Pilot Plant ]]> </description> <locations> <location

Hex文件

那么什么是Hex文件呢?Intel Hex文件是由一行行符合Intel Hex文件格式的文本所构成的ASCII文本文件.在Intel Hex文件中,每一行包含一个Hex记录.这些记录由对应机器语言码和常量数据的十六进制编码数字组成.Intel Hex文件通常用于传输将被存于ROM或者EPROM中的程序和数据,如图19.3-1.大多数EPROM编程器或模拟器使用Intel Hex文件. 19.3.1 Hex的结构 Intel Hex由任意数量的十六进制记录组成.每个记录包含5个域,它们按以下格式排

使用 10046 查看执行计划并读懂 trace 文件

查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划中每一个步骤的逻辑读, 物理读以及花费的时间等. 这种细粒度的跟踪对于我们分析 sql 性能尤其有用. 一般来说, 使用 10046 事件得到 sql 执行计划的步骤如下: 1. 激活当前 session 10046 事件 2. 在当前 session 中执行 sql 语句 3. 关闭当前 sess

[转帖] 读懂YML文件.. 书买了还没看完...

Copy From https://www.cnblogs.com/CloudMan6/p/8370501.html 读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125) 既然要用 YAML 配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式,其他 Controller(比如 DaemonSet)非常类似. 还是以 nginx-deployment 为例,配置文件如下图所示: ① apiVersion 是当前配置格式的版本.② kin

读懂TCP状态转移

读懂TCP状态变换的过程,对于理解网络编程颇有帮助,本文将对TCP状态转移过程进行介绍,但各个状态(总共11个)的含义不在本文介绍的范围. 内容来源:<UNIX网络编程>第一卷第二章2.6节,若是读者对某个知识点不太理解,请参考原文. TCP状态转换图(state transition diagram) 1. 建立连接(three-way hand shake) 主动打开(passive open):服务器必须准备好接受外来的连接,通常通过socket.bind和listen完成. 被动打开(

ROM初始化HEX文件

intel hex格式 记录格式 Intel HEX由任意数量的十六进制记录组成.每个记录包含5个域,它们按以下格式排列: :llaaaatt[dd...]cc 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字.每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: : 每个Intel HEX记录都由冒号开头. ll 是数据长度域,它代表记录当中数据字节(dd...)的数量. aaaa 是地址域,它代表记录当中数据的起始地址. tt 是代表HEX记录类型的

读懂diff【转】

本文转载自:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 读懂diff 作者: 阮一峰 日期: 2012年8月29日 diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> diff就会告诉你,这两个文件有何差异.它的显示结果不太好懂,下面我就来说明,如何读懂diff. 一.diff的三种

Intel HEX file结构

https://en.wikipedia.org/wiki/Intel_HEX 1, Intel Hex每行的组成 开始标志+Byte数+地址+数据类型+数据+Checksum 2, 开始标志 冒号:,ASCII码 0x3A 3, Byte数量 1 Byte,实际有效数据的个数,即数据段的字节数.从1开始计数. 4, 地址 2 Bytes,指示接下来的数据段数据存储的偏移地址. 为什么是偏移地址呢?因为该地址段长度只有2 Bytes,假如存储区大小超过64KB,如果采用绝对地址,将有部分空间无法