PIC单片机HEX文件格式分析

  在调试PIC单片机在bootloader程序时,需要将hex文件转换为bin文件,在转换之前先了解一下hex文件中数据是如何定义的。
直接打开一个LED灯闪烁的程序生成的hex文件,芯片型号为PIC18F46K80
在这里插入图片描述
可以看到每条数据都是由6部分组成的,下面分别解释这6部分的含义。
第1部分,紫色数据,也就是冒号:,这是数据的起始标志。
第2部分,棕黄色数据,1个字节,表示数据字节数,也就是后面黑色数据的字节个数。相当于要写入flash地址中的数据。
第3部分,蓝色数据,2个字节,表示数据的地址,地址范围就是从0x0000到0xFFFF,地址范围最大为64K。
第4部分,棕红色数据,1个字节,表示数据类型。
  值有3中情况00,01,04。
  00 表示后面的数据是需要给flash中写入的数据。如上图中第1行到第10行。
  01 表示文件结束,如上图中13行所示。
  04 表示后面的地址为扩展地址,因为数据地址只有2个字节,最大值只能表示到0xFFFF,如果地址超过0xFFFF,就需要用到扩展地址,表示将后面的地址值左移16位,如图中11行所示,后面的地址为0x0030,前面的数据为04,地址值就要左移16位,所以实际的地址值就是0x0300 0000。这个地址值刚好是配置位的地址值。所以上面第12行的数据其实就是写配置位。
在这里插入图片描述
第5部分,黑色数据,字节长度最大为16,表示要给flash中真正写入的数据。
第6部分,绿色数据,1个字节,表示从冒号后面到校验位前面所有数据的校验值。校验值的计算方法为,从冒号后面开始,所有的数据累加和再加上校验值,结果必须为256的整倍数。也就是说冒号后面所有的数据,去掉进位累加,结果要为0.比如全面所有的数据累加和为0xFE,那么校验值就必须为0x02,这样加起来的结果为0x100,最后两位值为0.

  所以上面的hex文件表示的含义就是:
第1行写6个数据,写入的地址为0x2000,写入的数据值为 BA EF 7F F0 00 00 校验值为C2.
第2行写16个数据,写入的地址是0xFF74,写入的数据值为 00 01 BD EF 7F F0 0F 01 5C 6B 93 92 93 98 93 9A ,校验值为0D.
第3行到第10行都是这种方式写入数据。
第11行是将写入地址跳转到0x0300 0000处。
第12行是,再新跳转的地址处,也就是0x0300 0000处写入14个数据,其实就是代码中的配置字。
在这里插入图片描述
第12行代码文件结束。

一般情况下跳转到配置字地址的这行数据,都是固定的。比如这款单片机跳转到配置字的数据 每个hex文件 都是 ”020000040030CA“。

再打开一个EEPROM工程生成hex文件
在这里插入图片描述
可以看出第14行代码也是跳转到配置字的地址0x0030 0000 地址处。
那么第12行跳转到0x0020 0000 地址处是写什么数据的?可以直接再芯片手册中查找这个地址。
在这里插入图片描述
可以看到这个地址是用户ID的存储地址。第16行是跳转到地址0x00F0 0000地址处,这个地址在芯片手册上未找到相关资料,不过根据17行的数据可以看出,在这个地址上写入的值是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
在这里插入图片描述
此代码中在编译的时候直接给EEPROM中0–15地址中写入了数据0到15。

通过对hex文件有了深入了解之后,在编写调试bootloader代码时,就更容易了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958346.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

17-使用椭圆制作鼻子

17-使用椭圆制作鼻子_哔哩哔哩_bilibili17-使用椭圆制作鼻子是一次性学会 Canvas 动画绘图(核心精讲50个案例)2023最新教程的第18集视频,该合集共计53集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bi…

通过 Visual Studio Code 启动 IPython

在Visual Studio Code 中,你可以使用内置的终端来启动 ipython,当然首先要安装好ipython。 安装ipython的方法是在cmd里面输入以下命令安装: pip install ipython 启动ipython的步骤如下: 打开 VSCode 终端: 在 VSCo…

网络(三) 协议

目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…

Qt基础项目篇——Qt版Word字处理软件

一、核心功能 本软件为多文档型程序,界面是标准的 Windows 主从窗口 拥有:主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西,均在下图了。 开发该软件,主要分为下面三个阶段 1)界面设计开发 多窗口 MDI 程序…

Python+langchain+通义千问qwen(大模型实现自己的聊天机器人)

Langchain langchain是一个用于开发由语言模型驱动的应用程序的框架,致力于简化AI模型应用的开发。简单来说,langchain就是一个(帮助开发者轻松完成AI模型应用开发的)框架,现在支持python和js两个版本,它集成多种大语…

FPGA中场战事

2023年10月3日,英特尔宣布由桑德拉里维拉(Sandra Rivera)担任“分拆”后独立运营的可编程事业部首席执行官。 从数据中心和人工智能(DCAI)部门总经理,转身为执掌该业务的CEO,对她取得像AMD掌门人苏姿丰博士类似的成功,无疑抱以厚望。 十年前,英特尔花费167亿美元真金白银…

【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报

本文章介绍,Logstash进行自动采集服务器日志文件,并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式,可以在kibana中看到采集到的日志 日志流程 logfile-> l…

探索Linux中的进程控制:从启动到退出的背后原理

个人主页:chian-ocean 文章专栏-Linux 前言: 进程控制是操作系统对进程的创建、运行、调度、中止等活动进行管理和协调的行为。它是操作系统中至关重要的一部分,保证多任务处理环境下的资源分配和系统稳定性。 进程创建 fork( ) fork() 调…

【ComfyUI】python调用生图API,实现批量出图

官方给的示例: https://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyU…

推箱子游戏

java小游戏2 一游戏介绍 二图像准备 墙、箱子、人、箱子目的地,人左边、人右边、人上边、人下边 三结构准备 地图是什么,我们把地图想象成一个网格,每个格子就是工人每次移动的步长,也是箱子移动的距离,设置一个二维数…

软件鉴定测试重要性和流程分享

在当今快速发展的数字时代,软件系统的可靠性和安全性变得至关重要。越来越多的企业意识到,进行专业的软件鉴定与测试不仅是保证产品质量的必要步骤,也是提升市场竞争力的重要手段。软件鉴定测试指通过对软件进行评估和验证,以确保…

Linux C\C++编程-建立文件和内存映射

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Linu…

15-spring整合mybatis方式一

spring整合mybatis 方式一【重要】 步骤: 1.导入相关jar包 junit mybatis mysql数据库 spring相关的 aop织入 mybatis-spring 【new】 junit junit 4.12 mysql mysql-connector-java 8.0.23 org.mybatis mybatis 3.5.2 org.springframework spring-webmvc 5…

基于深度学习的视觉检测小项目(十五) 用户的登录界面

用户管理离不开的是消息框(QMessageBox)和对话框(QDialog),比如对话框用于用户名和密码输入,消息框用于提示登录成功、密码错误。 • 基础知识:PySide6(PyQT5)的常用对话…

什么是COLLATE排序规则?

在当今数字化世界中,数据的整理、比较和排序是至关重要的。在数据库管理和编程语言中,我们经常需要对字符串进行排序,以展示或处理信息。为了实现这一点,各种系统和工具提供了排序规则,其中COLLATE排序规则就是其中的一…

Linux:信号的保存[2]

1.信号在内核中的表示 因为是三种内核的数据结构,操作系统就可以通过操作这些数据结构提供接口。 如果一个信号没有产生,并不妨碍它可以先被阻塞。 当同一时刻发送大量相同信号时,会丢失。 2.信号的捕捉(重点) 信号产…

顺序表和链表(详解)

线性表 线性表( linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。…

【电脑无法通过鼠标和键盘唤醒应该怎么办】

【电脑无法通过鼠标和键盘唤醒应该怎么办】 方法一(有时候不起作用):方法二(方法一无效时,使用方法二): 方法一(有时候不起作用): 方法二(方法一无效时,使用方法二):

动态规划(路径问题)

62. 不同路径 62. 不同路径 - 力扣(LeetCode) 动态规划思想第一步:描述状态~ dp[i][j]:表示走到i,j位置时,一共有多少种方法~ 动态规划思想第二步:状态转移方程~ 动态规划思想第三步&#xf…

vue + element-ui 组件样式缺失导致没有效果

失效 代码: 修改方法: 在main.js文件里面加上: import element-ui/lib/theme-chalk/index.css; 最后: