CAPL_构建基于UDS的刷写学习—01 Hex文件的解析

news2024/9/21 13:56:48

前言:

打算写一个系列:CAPL_构建基于UDS的刷写学习,大致写一下写作的思路

1:本文是第1篇首先讲解基础。首先搞清楚,各种不同文件(常见的S19,hex,bin,以及汽车行业主机厂自己的各种文件CBF(奇瑞特有),VBF(VOLOVL))的格式,以及文件的结构。

2:第二阶段详细简绍CAPL中各种解析文件的函数,以及各种数据转换格式的函数。

3:讲解清楚UDS中0x34,0x35,0x36,0x37等各种服务

4:最后做一个总结,写出一个适合项目应用的CAPL刷写文件。

1:什么是HEX文件?

用处:嵌入式系统中常见的一种文件,通过烧录器写入CPU的flash存储器中的一种文件

起源:Hex文件是Intel公司提出

文件性质的基本定义:是一种按地址排列的数据信息格式。并且以ASCII码的形式,按行记录数据

2:理解HEX文件的构成

首先打开一个Hex文件,可以看到Hex文件是以行为排列的,我们把每一行又可以分为5个部分

如下图:

注意两点:**1)Hex文件不要以HexView软件来打开,要以txt文本形式打开

                **2)为了方便观看,使用空格键,隔开了各个不同的数据段,实际文件打开时,数据中间是不存在空格的,需要注意

Hex文件的格式说明
部分解释按上图说明性质
1

表示第4部分数据的长度

如:上图中第1行蓝色部分字节的长度=4个ASCIL码的字符.故用02表示

第2行蓝色部分=20个ASCIL码的字符.故用0x20表示

位置:固定在开头

长度:固定为2个ASCIL字符

2地址信息表示数据记录的地址,根据类型不同有可能是基地址、段地址或偏移地址

位置:固定在数据长度之后

长度:固定为4个ASCIL字符

3地址类型这个比较复杂,后文单独解释

位置固定

长度:固定为2个ASCIL字符

4数据段字节顺序根据芯片大小端和字长决定

位置固定在地址类型后

长度:不固定

5校验和除冒号和自身以外的其他字节数据加起来模除256的余数的补码

位置:固定在数据段结束之后

长度:固定为2个ASCIL字符

3:部分单独讲解“地址类型”:可以根据数值不同分为以下几类

  • '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
  • '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
  • '02' Extended Segment Address Record: 用来标识扩展段地址的记录
  • '03' Start Segment Address Record: 段地址 STM32不用
  • '04' Extended Linear Address Record: 用来标识扩展线性地址
  • '05' Start Linear Address Record: 程序启动运行的地址

如果暂时看不懂,也没关系,但是也需要强制记忆,后续会结合实例来讲解,地址类型是非常重要的一种重要的类型。不同的地址类型,数据的组成也是不一样的。

3:理解地址的重要性

3.1 什么是烧录的目标地址

对于我们很多初学者,需要理解地址的00-05拢共6种类型,和基地址,偏倚地址,段地址的各种复杂的概念。

其实首先要了解的是,这些概念都是为了一个目的,就是能将数据成功的写入flash中的固定地址中去。首先我们来了解一下单片机flash(也就是ROM代码存放的区域)的基础知识。

假设一个芯片内置的Flash ROM=20KB,  ==20,480个Byte,要准确寻址到每一个字节,就需要地址至少16bit长度的地址。

3.2 烧写时,数据是按照连续一段连续写入的

这句话的意思是,Hex数据在写入时,会一段一段的成片写入,而不是一个Byte一个Byte的依次写入,因为烧写也是需要讲究效率的

4:大致了解下,基地址,段地址和偏移地址

4.1 :基地址(Base Address)

基地址,可以暂时记为基本地址,基地址是占据地址位高Byte中的

4.2:段地址(Segment Adress)

段地址是指:Hex会将整体分为若干个段,确切的说是将基地址包含的范围分为若干个段(segment)

4.3:偏移地址 (Offset Adress)

即是指段内地址再细分

5:从实例出发,理解地址信息是如何在Hex文件中表示的

有了以上基础我们再来看

 实例1:02 0000 04 0800 F2 <------- 首行给出烧录的目标地址的高16位 : 0x0800,给出地址类型为0x04(拓展线性地址标识)

看标准规范中对,RecTYP:0x04的解释

04的出现表示了,地址为32bit 

名称:拓展线性地址记录  (32bit格式专属),这里的32bit是指32位的单片机系统。

RecordMark 就是=每一行开头的“:

RecLen 是指数据段的长度,长度固定1byte,值固定为02

LoadOFFSET:是指载入地址偏移,在地址记录=0x04时,值只能=0000

ULBA: 这才是重点,首行给出烧录的目标地址的高16位

实例2:10 0000 00 00F000204501000839FE00088D800008 3E <------- 烧写到0x0800 0000 处的数据

RecTYP:00的解释

就是代表,DATA是需要被写入到ROM中的数据,Load0FFset就称为偏移地址,单烧写器的程序读取到这行时,表达的意思是将“00F000204501000839FE00088D800008”写入到地址为0x0800 0000中去。

实例3:10 0010 00 19F20008B714000811A4010800000000 3C <------- 烧写到0x0800 0010 处的数据

此行解读,和上一行解读相同,重点关注0010的偏移地址,与第一行的目标地址比较一下,可以知道正好相减=10。这就说明了写入数据的第一段和第二段,在内存上是连续的。记住这个概念,对我们后续烧写代码的开发,会有作用。

  • 其他实例:05代表程序入口地址,其数据域的内容在本例中为0x08024433,该地址通常为MCU的复位向量地址,该地址在编译时由工程的链接脚本决定。
  • 04 0000 05 08024433 DD <------- 05类型的行对于烧写程序无用。见参看英文

其他实例:*记录类型:0x03,起始段地址标识

:0200000312FFBD                起始段地址标识:0x12FF

记录类型:0x02,扩展段地址标识

6:地址标识信息 和基地址,段地址,和偏移地址之间的关系

地址标识类型  0x04 =基地址

地址标识类型  0x02=段地址

地址标识类型  0x00=偏移地址

 一旦出现段地址或者线性地址,之后所有数据都要加偏移地址,直到出现一个新的段地址或者线性地址,再重新变更偏移地址。数据物理地址为:线性地址左移16位+段地址左移4位+偏移地址。   

地址计算示例:

:020000040108EA                   线性偏移地址:0x0108

:0200000212FFBD                  扩展段地址:0x12FF

:0401000090FFAA5502          数据地址:0x0100

基地址:0108左移16位,0x01080000;
扩展段地址:12FF左移4位,0x00012FF0;
数据偏移地址:0x0100;
实际物理地址=基地址+扩展段地址+偏移地址=0x010930F0。

7:数据中的大端表示和小端表示

即地址标识信息为0x00时,数据放入内存中的顺序是怎么样的?要理解这个概念首先要明白两个概念:如下

1*)数据中哪里是高位,哪里是低位

还是以上面例子0401000090FFAA5502,红色加粗为数据段,和我们日常写数字的规则一致,左边为高位,依次降低,最右边为最低位。

2*)内存中存放方式:(大端+小端)

大端即motorala格式,高字节放内存中低地址位置,低字节放内存中高地址位置。

小端即intel格式,高字节放内存中高地址位置,低字节放内存中高地址位置。

大端存放方式如下图,小端则将数据倒转过来即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud Alibaba之Nacos服务注册和配置中心

&#xff08;学习笔记&#xff09;nacos-server版本&#xff1a;2.2.3 总体介绍&#xff1a; 1、Nacos介绍 官网&#xff1a;Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字…

8路模拟量采集模块,4~20mA 0~10V电流电压高速采集——DAM-3054P

阿尔泰科技 DAM-3054P为8路差分模拟量采集模块&#xff0c;高速采集&#xff0c;每通道采集速率为500sps&#xff0c;16位AD&#xff0c;支持RS485通讯接口&#xff0c;带有标准ModbusRTU协议。配备良好的人机交互界面&#xff0c;使用方便&#xff0c;性能稳定。 指标参数&…

基于图像的端到端方案实现小车在模拟城市场景中的自主导航

基于图像的端到端方案实现小车在模拟城市场景中的自主导航 FSD&#xff08;Full Self-Driving&#xff09;是特斯拉公司推出的一种自动驾驶技术&#xff0c;旨在实现完全自主的驾驶体验。FSD系统依靠大量的数据和高级的机器学习算法&#xff0c;结合车载传感器&#xff08;如摄…

docker--刚开始学不知道如何操作拉取,或拉取失败(cmd)

报 unauthorized: incorrect username or password.&#xff08;未授权&#xff09; 进行授权 在docker desktop注册账号登录好docker desktop 在cmd中进行docker登录&#xff0c;输入账号密码&#xff0c;提示Login Succeeded&#xff0c;即登录成功 docker login -u xxx(x…

yjs04——matplotlib的使用(多个坐标图)

1.多个坐标图与一个图的折线对比 1.引入包&#xff1b;字体&#xff08;同&#xff09; import matplotlib.pyplot as plt import random plt.rcParams[font.family] [SimHei] plt.rcParams[axes.unicode_minus] False 2.创建幕布 2.1建立图层幕布 一个图&#xff1a;plt.fig…

Artec Leo协助定制维修管道,让石油和天然气炼油厂不停产

以下文章来源于Artec3D埃太科三维 &#xff0c;作者小埃 挑战 在高温、狭窄的炼油厂中&#xff0c;准确测量结构复杂的受损管道和设备&#xff0c;以便设计、制造、安装定制维修解决方案&#xff0c;从而尽快完成修复。 解决方案 Artec Leo, Artec Studio, Geomagic Design X…

关于Vue2里 v-for和v-if一起用的时候会出现的问题

关于Vue2里 v-for和v-if一起用的时候会出现的问题 &#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&…

roboguide将tp程序转化为LS文本格式的方法

不同的软件版本可能操作不同&#xff0c;但是仍然可以参考文章中的办法。 我使用的版本如图所示&#xff1a; 1.首先&#xff0c;打开任意一个工程&#xff0c;如果没有&#xff0c;可以打开自带的示例。 如图&#xff0c;我打开了自带的示例&#xff0c;在帮助文档中可以找到…

ubuntu中QT+opencv在QLable上显示摄像头

ubuntu中QTopencv在QLable上显示摄像头 饭前的一篇文章吧&#xff0c;写完吃饭走 图像在机器视觉中的重要性是不可忽视的。机器视觉是指计算机利用图像处理技术进行图像识别、分析和理解的科学与技术领域。图像是机器视觉的输入数据&#xff0c;通过分析和处理图像&#xff0…

【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶

目录 1、Class类 1.1 Class类 实例属性 1.2 Class类 构造函数 1.3 Class类 定义方法 1.4 静态属性 和 静态方法 1.5 继承 extends 和 super 关键字 1.6 instanceof 检测是否实例 1.7.修饰符(readonly、private、protected 、public) 1.7.1 readonly 1.7.2 Private …

Frida 脚本抓取 HttpURLConnection 请求和响应

引入 Java 类&#xff1a; 引入 okhttp3.OkHttpClient、okhttp3.OkHttpClient$Builder、okhttp3.Interceptor、okhttp3.ResponseBody 等类。 创建自定义拦截器&#xff1a; 通过 Java.registerClass 创建自定义拦截器 MyInterceptor。拦截器中重写 intercept 方法&#xff0…

凸优化学习(2)——梯度类方法求解(gradient descent)

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

使用ChatGPT撰写科研论文全攻略指南,附高效学术提示词指令

借助ChatGPT撰写科研论文,会让本该痛苦煎熬的写作过程变得有趣和高效。我会通过,了解 ChatGPT 如何改变撰写研究论文的传统方法,提供从构建大纲到制作复杂论点的创新解决方案。 无论您是经验丰富的研究人员还是新手作家,都可以了解 ChatGPT 的功能如何增强您的研究过程,确…

解决 VMware 无法上网问题

引言&#xff1a;平时学习某些技术&#xff0c;需要搭建集群环境&#xff0c;毕竟学习不可能真去购买那么多服务器来搭建集群。此时通过 VMware 安装多个系统来搭建集群是个不错的选择&#xff0c;而安装多个虚拟机容易出现网络问题&#xff0c;导致无法上网&#xff0c;这篇文…

重磅新品 HP1016:低功耗单相 CrM PFC 控制芯片正式发布

在输出功率 100-300W 的应用场景中&#xff0c;涵盖了消费电子、家用电器、LED 照明、通信设备等领域。传统的反激式架构逐渐难以应对现代大功率应用所需的高开关频率、高功率密度以及高效率标准&#xff0c;需要进行功率因数校正&#xff08;PFC&#xff09;。针对此类功率等级…

Brave编译指南2024 Windows篇:构建并启动Brave项目(七)

1.引言 在成功拉取Brave浏览器源码后&#xff0c;下一步就是进行项目的构建和启动。构建过程将源码转化为可执行的程序&#xff0c;使您能够在本地运行和测试Brave浏览器。在Windows环境下进行构建可能需要配置一些工具和环境变量&#xff0c;以确保整个过程的顺利进行。通过构…

这些211学校,跳一跳就能够着!自动化考研择校

这些211学校&#xff0c;努力跳一跳就能够着&#xff0c;搭配历年数据&#xff0c;供大家参考~ 目录 ① 中国矿业大学 ② 河海大学 ③ 上海大学 ④ 合肥工业大学 ⑤ 河北工大学 ① 中国矿业大学 复试线招生人数 23考研改考自控&#xff0c;专业课难度适中&#xff0c;学…

Qt 实现自定义截图工具

目录 Qt 实现自定义截图工具实现效果图PrintScreen 类介绍PrintScreen 类的主要特性 逐步实现第一步&#xff1a;类定义第二步&#xff1a;初始化截图窗口第三步&#xff1a;处理鼠标事件第四步&#xff1a;计算截图区域第五步&#xff1a;捕获和保存图像 完整代码PrintScreen.…

重学SpringBoot3-SpringApplicationRunListener

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringApplicationRunListener 1. 基本作用2. 如何实现2.1. 创建SpringApplicationRunListener2.2. 注册SpringApplicationRunListener2.3. 完整示例 3.…

fpga系列 HDL:利用泰勒级数实现指数函数模块exponent

模块实现了指数函数的计算&#xff0c;利用泰勒级数展开进行近似计算。 e x 1 x 1 ! x 2 2 ! x 3 3 ! x 4 4 ! ⋯ e^x 1 \frac{x}{1!} \frac{x^2}{2!} \frac{x^3}{3!} \frac{x^4}{4!} \cdots ex11!x​2!x2​3!x3​4!x4​⋯ 它依赖于 floatMult 和 floatAdd 两个子…