【汽车ECU电控数据管理篇】HEX文件格式解析篇章
一、HEX格式文件是啥
HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式,通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据,每一行以冒号开头,包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程序存储器的编程,比如将代码下载到微控制器中。他是电控数据管理中最终的转换文件,把次文件刷写到ECU寄存器中。
二、HEX格式和A2L格式文件
-
HEX 文件:包含 ECU(电子控制单元)的二进制代码,用于将程序下载到 ECU 的存储器中。
-
A2L 文件:用于描述 ECU 的参数,例如标定变量的位置、类型等,以便进行标定和测量。
A2L 文件和 HEX 文件可能会一起使用。A2L 文件提供了对 ECU 参数的描述,而 HEX 文件包含了这些参数所在的程序代码。
三、HEX格式架构解析
如图所示,HEX文件每一行均以“:”开头,表明记录的开始,“:”之后,每至少2个字符表示一组16进制数据,格式形如:BBAAAATTHHHH....HHHCC。
- BB:表示此行数据长度字节数,也就是HHHHH的数量
- AAAA:表示数据记录的地址(根据类型不同分别 基地址、段地址或者偏移地址)
- TT:表示记录类型
- 00:本行是数据记录
- 01:HEX文件结束
- 02:标识扩展段地址记录,后面所有数据地址需要加上段地址左移4位
- 03:开始段地址记录
- 04:标识扩展线性地址记录-后面所有数据地址+线性地址左移16位,将该地址左移16 位后作为基地址,并且表示在下一个04类型行出现之前都要使用该地址作为基地址
- 05:开始线性地址记录
- HHHH....HHH:字节顺序根据芯片大小端和字长决定 (此处根据A2L文件中的 mod_common 中的BYTE_ORDER 来判断如何读取)
- CC:本行的校验码,每次更新都要重新计算
四、HEX文件示例
:02000004801B5F
:20000000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C380
:20002000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C360
:20004000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C340
:00000001FF
:02000004801B5F
:20000000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C380
:20002000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C360
:00000001FF
针对这段HEX中的代码来做一次解析:
第一行:02带标数值长度,也就是 801B,0000是基地址,04表示需要把后面的做左移动16位即801B0000
第二行:20表示数值长度,00说明这行是数据,也就是 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3,这段数据的存储地址即为801B0000 至 801B0020
第二行:20表示数值长度,00说明这行是数据,也就是 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3,这段数据的存储地址即为801B0020 至 801B0040
第三行 :00000001FF 表示结束
总结以下,根据A2L文件的mod_common 中的BYTE_ORDER 来判断如何读取,随后根据A2L变量的文件地址找到对应HEX中的文件地址,比如 A 变量在 A2L文件中的地址为801B0020开始,我们找到801B的地址段,随后向下遍历找到0020,开始数据读写操作。
相关文章:
【汽车ECU电控数据管理篇】HEX文件格式解析篇章
一、HEX格式文件是啥 HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式,通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据,每一行以冒号开头,包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程…...

SOLID Principle基础入门
(Robert C. Martin (Uncle Bob)) 什么是SOLID原则? SOLID原则是面向对象编程(OOP)中编写高质量代码的指导方针。实际上,即使不使用SOLID原则,仅通过类、继承、封装和多态性,也可以让程序正常运行。那么为…...

keil主题(vscode风格)
#修改global.prop文件,重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…...
微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...
大模型使用
prompt生成bot 角色:你扮演一个帮助用户生成大模型prompt内容的角色,不要直接回答问题,而是帮助用户生成prompt 任务:根据用户的输入,分析用户意图,与用户进行多轮沟通,最后根据对话形成最终的prompt 指令:最终形成的prompt必须包含以下6个方面: 1.所有三个引号之间的内容原样输…...

ISP 常见流程
1.sensor输出:一般为raw-OBpedestal。加pedestal避免减OB出现负值,同时保证信号超过ADC最小电压阈值,使信号落在ADC正常工作范围。 2. pedestal correction:移除sensor加的基底,确保后续处理信号起点正确。 3. Linea…...

SpringBoot原理-02.自动配置-概述
一.自动配置 所谓自动配置,就是Spring容器启动后,一些配置类、bean对象就自动存入了IOC容器当中,而不需要我们手动声明,直接从IOC容器中引入即可。省去了繁琐的配置操作。 我们可以首先将spring项目启动起来,里面有一…...

小红书自动评论
现在越来越多的人做起来小红书,为了保证自己的粉丝和数据好看,需要定期养号。 那么养号除了发视频外,还需要积极在社区互动,比如点赞、评论等等,为了节省时间,我做了一个自动化评论工具。 先看效果 那这个是…...

CosyVoice2整合包 特殊声音标记,声音克隆更逼真,新增批量生成
新增批量生成,可用于制作直播话术音频 特殊声音标记 符号示例1_语气加强<strong> </strong>每天都<strong>付出</strong>和<strong>精进</strong>,才能达到巅峰。2_呼吸声[breath][breath] 吸气,[breath] 呼气! [breath] 吸,[b…...
每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用
引言 欢迎再次回到 每天一个Flutter开发小项目 系列博客!在之前的七篇博客中,我们已经掌握了 Flutter UI 构建、状态管理、路由导航、表单处理,甚至数据持久化等一系列核心技能。您已经能够构建功能相对完善的本地应用。 然而,在互联网时代,绝大多数应用都需要与服务器进…...

C++Primer学习(4.8位运算符)
4.8位运算符 位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。位运算符提供检查和设置二进制位的功能,如17.2节(第640页)将要介绍的,一种名为bitset的标准库类型也可以表示任意大小的二进制位集合,所以位运算符同样能用…...

在VSCode中使用MarsCode AI最新版本详解
如何在VSCode中使用MarsCode AI:最新版本详解与使用场景 在当今快速发展的软件开发领域,人工智能(AI)技术的应用已经变得越来越普遍。ByteDance推出的MarsCode AI是一款强大的AI编程助手,旨在帮助开发者更高效地编写代…...
可观测之Tracing-eBPF生态和发展
eBPF生态系统 eBPF已经不仅仅是一个内核技术,而是一个蓬勃发展的生态系统,涵盖了各种工具、库和项目,为可观测性、网络、安全等领域提供了强大的支持。 1. 核心工具与库 bcc (BPF Compiler Collection): 定位: 提供了更底层的e…...
linux 后台执行并输出日志
在Linux系统中,后台执行程序并输出日志通常有多种方法,这里列出几种常见的方法: 1. 使用&将命令放入后台 可以在命令的末尾加上&符号,将命令放入后台执行。例如: your_command > output.log 2>&1…...

C++ primer plus 第五节 循环
系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 文章目录 系列文章目录 文章目录 前言 一 for循环 总结 前言 由于作者看了后面的内容&…...

使用Hydra进行AI项目的动态配置管理
引言:机器学习中的超参数调优挑战 在机器学习领域,超参数调优是决定模型性能的关键环节。不同的模型架构,如神经网络中的层数、节点数,决策树中的最大深度、最小样本分割数等;以及各种训练相关的超参数,像学习率、优化器类型、批量大小等,其取值的选择对最终模型的效果…...

.bash_profile一些笔记
下方ffmpeg目录为/Users/sin/Downloads/kakaaaaa/bin/ffmpeg 第一种方法冒号后拼接路径 第二种方法冒号后拼接变量 第三种方法,依旧用PATH变量拼接,更清晰美观而已 export的作用 权限问题: 确保 /Users/sin/Downloads/kaka/bin/ffmpeg 有可执行权限(通…...
数据虚拟化的中阶实践:从概念到实现
数据虚拟化的中阶实践:从概念到实现 在大数据时代,数据的数量、种类和来源呈现爆炸式增长,如何高效、灵活地访问和利用这些数据成为了企业面临的重要问题。数据虚拟化作为一种创新的技术,正逐渐成为解决这一难题的关键。它通过抽象化层将底层数据源与应用程序隔离,使得数…...

MongoDB安全管理
MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样,MongoDB内部提供了一套完整的权限防护机制。如下例所示: mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...

[STM32]从零开始的STM32 DEBUG问题讲解及解决办法
一、前言 最近也是重装了一次keil,想着也是重装了,也是去官网下载了一个5.41的最新版,在安装和配置编译器和别的版本keil都没太大的区别,但是在调试时,遇到问题了,在我Debug的System Viewer窗口中没有GPIO&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...