您现在的位置:0A > 0A评价 > > ECUHEX文件的解析

ECUHEX文件的解析

2023-2-13 来源:本站原创 浏览次数:

汽车的电气化程度越来越高,一辆汽车大概有几十、上百个不同的控制器组成。当汽车进行售后维修时,不可避免的会进行控制器的刷新。汽车控制器的刷新文件格式大多为S19和HEX文件,本文章将重点介绍HEX文件的解析(ECUS19文件的解析)。

一、HEX文件说明

Hex文件是ASCII文本文件,HEX文件包含单片机使用的程序和数据,可以被烧写到单片机MCU中,生成Hex文件的方式有许多种,技术人员可以通过不同的编译器(如CodeWarrior)将C程序或者汇编程序编译生成hex。

CodeWarrior工具

Hex文件可以通过记事本打开。在详细讲解格式之前,我们首先来看一个工具HexView(可在网上下载不同的版本,但是作者推荐使用vector的HexView工具,功能强大)。

HexView工具

1、行记录

HEX文件每行的ASCII数据作为一个记录-行记录,由16进制数据组成。并且每行数据包含5个不同的域。

Hex文件数据格式

(1):--每个行记录都以冒号作为开始;

(2)LL--表示当前行记录的数据长度(1个字节),表示当前行当中的数据域(D.D)字节长度,可为0x00;

(3)aaaa--地址域,根据TT域的不同分别代表不同含义,地址字节为2个字节,最大只能表示64K(2)的数据大小。;

(4)TT--当前行记录的类型(1个字节),可能的值为:0x00(数据记录)、0x01(HEX文件结束记录,在最后一行)、0x02(扩展段地址记录)、0x03(开始段地址记录)、0x04(扩展线性地址记录)、0x05(开始线性地址记录);

(5)DD--行记录的数据域,其字节长度域LL对应,可为空,长度不定;

(6)CC--校验和(1个字节),校验和=0x-(累加和%),其中累加和为LL、aaaa、TT、DD四个域的相加的结果;

2、行记录类型

下面将对TT的行数据类型进行详细解析:

(1)0x00-数据记录

:AFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B,上面的数据的不同含义可转换为:(开始)20(数据长度为32个字节或64个字符)(偏移地址)00(记录类型)AFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(数据域)8B(校验和),后面会举例详细讲解。

(2)0x01-结束记录

:0001FF,数据的不同含义可转换为:(开始)00(数据长度为0)(偏移地址,无意义)01(记录类型)(无行数据)FF(校验和)。

每个文件的该记录是必然存在的。

(3)0x02-扩展段地址记录

:0202EA,数据的不同含义可转换为:(开始)02(数据长度)(偏移地址,无意义)02(记录类型)(数据域)EA(校验和)。

那么存储器的绝对存储器地址=0x4=0x12。可参考后面的详细讲解(与0x04类型相似)

(4)0x03-开始段地址记录

此记录类型使用很少,不做解释

(5)0x04-扩展线性地址记录:020408FCF6,数据的不同含义可转换为:(开始)02(数据长度)(地址域,无意义)04(记录类型)08FC(数据域)F6(校验和),这行的数据就是随后数据的基地址。

由于地址字节为2个字节,最大只能表示64K的数据大小。当一个HEX文件的数据超过64k(2^16)的时候,文件中就会出现多个扩展线性地址记录。后面会举例详细讲解。

(6)0x05-开始线性地址记录

:04050800,数据的不同含义可转换为:(开始)04(数据长度)(地址域,无意义)05(记录类型)(数据域)65(校验和)。

开始线性地址记录就是函数的入口地址。

3、校验和的计算

(1):0001FF,累加和=0x00+0x00+0x00+0x00+0x01=0x01,校验和=0x-(0x01%)=0xFF。

(2):020408FCF6,累加和=0x02+0x00+0x00+0x04+0x08+0xFC=0x10A,校验和=0x-(0x10A%)=0x-0x0A=0xF6。

4、数据文件解析示例

HEX数据文件前5行

请看下面的数据记录,取其前三行数据进行分析,

:020408FCF6//数据记录的绝对存储器地址高16位为=0x08FC16=0x08FC

:25AFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B

:DEADBEEF88

第一行记录类型为扩展线性地址记录,基地址是0x08FC,第二行是数据类型,里面的地址值是0x。那么数据05AFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(共32个字节)要写入FLASH中的地址为(0x08FC16)+0x,也就是写入FLASH的0x08FC这个地址;第三行的数据写入地址为0x08FC。

由于地址字节为2个字节,最大只能表示64K的数据大小。当一个HEX文件的数据超过64k(2^16)的时候,文件中就会出现多个扩展线性地址记录。

二、HEX文件的代码解析

前面已经详细描述了HEX文件的格式,下面将会从代码编写的角度,提出几个文件解析会遇到的难点或注意不到的问题

(1)HEX数据文件的Block非连续排列,例如HEX文件存在三个block,分别为block1、block2、block3。但是在文件中的排列并不一定是block1-block2-block3,而可能是block1-block3-block2;

(2)刷新到控制器的时候的顺序可能并不是按照block的顺序进行的,如HEX文件存在block1、block2、block3,那么控制器刷新的时候可能是按照block3-block1-block2进行的;

(3)HexView解析到的数据并不一定要全部刷入控制器中,如HEX文件存在block1、block2、block3,控制器只需要输入block2和block3即可。

Android实现代码C语言实现的代码

转载请注明:
http://www.wqopd.com/ynywh/12203.html
  • 上一篇文章:

  • 下一篇文章:
  • 网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介
    医院地址: 健康热线:
    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有 2014-2024
    今天是: