首页 > 其他分享 >ECU刷写流程之压缩刷写技术解析

ECU刷写流程之压缩刷写技术解析

时间:2024-05-15 14:41:34浏览次数:20  
标签:00 压缩 memorySize ECU 地址 解析 刷写

背景

 

 

在现代汽车电子技术中,ECU(电子控制单元)的软件升级是一项关键任务。为了提高数据传输的效率和安全性,压缩刷写技术应运而生。通过数据压缩传输,我们可以有效地增加带宽利用率,减少刷写工具与ECU之间的数据传输量,从而显著缩短ECU升级时间。此外,为了加强数据的安全性和保密性,数据传输还可以进行加密处理。在ISO14229-1规范中,请求下载服务(SID=0x34)和请求文件传输服务(0x38)定义了数据可以基于压缩和加密的方式进行传输。本文以请求下载服务为例重点介绍数据压缩部分。

 

1.ISO14229-1:2020规范中定义请求下载服务(0x34)的请求报文格式

 

 

根据ISO14229-1:2020规范,请求下载服务(0x34)允许数据通过压缩和加密的方式进行传输。在该服务的请求报文格式中,”dataFormatIdentifier“是一个关键的参数,大小为1个字节,其中高四位(bit4-bit7)为参数”compressionMethod“,定义数据是否需要压缩, 其中低四位(bit0-bit3)为参数”encryptingMethod“,定义数据是否需要加密。若下载的数据既不需要压缩也不需要加密,则该参数值为0x00,若使用非0x00的值,则表示下载数据需要进行压缩、加密,或二者兼有。如”dataFormatIdentifier“此值为0x10,表示下载数据需要压缩不需要加密,如”dataFormatIdentifier“此值为0x11,表示下载数据需要压缩也需要加密。

 

值得注意的是,下载数据的压缩与加密需求并不影响参数”addressAndLengthFormatIdentifier

 

“和”memoryAddress“,但会影响”memorySize“参数,该参数定义了需要刷写数据的大小,这个大小将与通过TransferData(0x36)服务传输的数据大小进行比较。

 

当下载的数据是压缩数据时,由OEM来定义”memorySize“代表的是压缩数据的大小还是压缩前数据的大小。不同的定义对于刷写流程的实现代码也不相同。

 

若”memorySize“代表压缩数据的大小,那么当TransferData(0x36)服务将压缩数据传输完成后,ECU将根据“memorySize”参数来判断数据是否下载完成,ECU会比较传输的压缩数据与”memorySize“参数定义的数据大小是否一致,并相应地发送肯定或否定响应。

 

若”memorySize“代表非压缩数据的大小,那么TransferData(0x36)服务传输的压缩数据大小一般小于”memorySize“的值。这时ECU将接收到的压缩数据解压,并计算所有解压后数据大小的总和。在压缩数据传输完成后,ECU会比较解压后的数据大小与”memorySize“参数定义的数据大小是否一致,并相应地发送肯定或否定响应。

 

当然,对于”memorySize“代表压缩数据的大小还是非压缩数据大小,数据传输完成后ECU判断下载数据是否正确的方法各OEM定义也不尽相同。

 

2.压缩前后刷写文件比对

 

软件刷写是指将软件程序烧录或者通过UDS刷写传输到ECU芯片内存的特定地址段,然后ECU就会运行该软件程序,去实现其特有的功能。常用的ECU刷写文件格式有:.hex,.s19和.bin等。压缩刷写文件是通过特定的压缩算法制作而成。

 

压缩前:

 

 

刷写文件分3个逻辑块,各块起始地址、结束地址、长度为:

 

Block0:起始地址:0x80138020 结束地址:0x801FFFDF 长度:0xC7FC0

Block1:起始地址:0x80300020 结束地址:0x804FFFDF 长度:0x1FFFC0

Block2:起始地址:0xA0078020 结束地址:0xA0137FFF 长度:0xBFFE0

压缩后:

 

 

压缩后刷写文件仍分3个逻辑块,各块起始地址、结束地址、长度为:

Block0:起始地址:0x80138020 结束地址:0x8015E60E 长度:0x265EF

Block1:起始地址:0x80300020 结束地址:0x80448DD7 长度:0x148DB8

Block2:起始地址:0xA0078020 结束地址:0xA00AD0F6 长度:0x350D7

 

可以发现,压缩前后的刷写文件逻辑块数量未变化,起始地址未变化,各逻辑块的数据长度变小了,对应的结束地址也产生了变化。

 

每个逻辑块独立压缩:

对于压缩前刷写文件中分为多个逻辑块,在压缩之后的逻辑块数量未发生变化的情况可称之为“每个逻辑块独立压缩”。与之不同,也存在“整体压缩”的方式。

整体压缩:

压缩前:

 

 

刷写文件分3个逻辑块,各块起始地址、结束地址、长度为:

Block0:起始地址:0x8FC0060 结束地址:0x9194FFF 长度:0x1D4FA0

Block1:起始地址:0x91C0000 结束地址:0x91D9EBF 长度:0x19EC0

Block2:起始地址:0x9200000 结束地址:0x9237FFF 长度:0x38000

压缩后:

 

 

压缩后刷写文件只有1个逻辑块,无起始地址。

 

对于“整体压缩方式”,刷写流程中内存擦除(EarseMemmory)服务和0x34(RequestDownload)服务中起始地址等信息由ECU供应商或者OEM定义。

 

3.压缩刷写日志分析

 

非压缩刷写日志:

 

 

压缩刷写日志:

 

 

通过分析刷写日志,我们可以发现压缩刷写与非压缩刷写的主要区别在于:

1).请求下载服务(SID=0x34)指令参数(dataFormatIdentifier)不同。

非压缩:刷写工具发送:34 00 44 A0 07 80 00 00 10 00 01

压缩:刷写工具发送:34 10 44 A0 07 80 00 00 03 50 F7

其中10代表:使用压缩数据;00代表:使用非压缩数据。

2).请求下载服务(SID=0x34)指令参数(memorySize)不同。

非压缩刷写:刷写工具发送:34 00 44 A0 07 80 00 00 10 00 01

压缩刷写:刷写工具发送:34 10 44 A0 07 80 00 00 03 50 F7

非压缩刷写中请求下载服务(SID=0x34)中memorySize大小大于压缩刷写中的memorySize大小,如果最大块长度值一致,则对于后续数据传输服务(SID=0x36)的个数,压缩刷写则要小于非压缩刷写。

如日志中压缩刷写与非压缩刷写最大块长度值皆为0xFFF,可计算出:

非压缩刷写后续数据传输服务(SID=0x36)的个数为257个;

压缩刷写后续数据传输服务(SID=0x36)的个数为54个;

数据传输服务(SID=0x36)的个数越少,则所需数据传输的时间也就越少,这也就是压缩刷写可以提升刷写效率的主要原因。

 

 

总结

 

 

随着ECU软件功能的日益复杂,提高ECU软件升级效率变得尤为重要,Bootloader作为一项必不可少的功能软件,其高效的刷写方式是实现ECU软件更新的关键。目前,北汇信息已经完成压缩刷写测试方案的落地,期待与感兴趣的朋友进行交流合作。

 

参考文献:

【1】ISO14229-1:2020

 

翻译

搜索

复制

<iframe></iframe>

标签:00,压缩,memorySize,ECU,地址,解析,刷写
From: https://www.cnblogs.com/polelink/p/18193837

相关文章

  • RetryableException: Read timed out executing导致服务假死无响应
    最近发现Plan这个微服务经常会无响应,后来发现是task微服务会调用plan的某个接口,经常报错如下异常,然后timeout后又30秒再次发起重试而这个业务处理时间1分钟-2小时都有可能所以把plan微服务线程池占满导致无响应2024-05-1314:27:00.282N/A,b1f2a3468b14468abef240bfeddd8b95,0......
  • Gitee千Star优质项目解析: ng-form-element低开引擎解析
    好家伙,在写项目的时候,我发现自己的平台的组件写的实在是太难看了,于是想去gitee上偷点东西,于是我们本期的受害者出现了gitee项目地址https://gitee.com/jjxliu306/ng-form-elementplus-sample.git组件库以及引擎完全开源,非常牛逼的项目,非常牛逼的作者 项目名:ng-form-......
  • JUC 源码解析:lock锁与synchronized锁的区别
    JUC源码解析:lock锁与synchronized锁的区别本文使用jdk1.8Lock锁的使用注意事项要在finally块中释放锁。保障锁一定能被释放不要把加锁代码写进try块里。因为我们可能会自己实现Lock接口,在一些实现中,如果获取锁时发生了异常,可能导致锁被无故释放lock与synchroniz......
  • 阿里云Windows server 2016服务器Antimalware Service Executable进程占比高,cpu接近10
    问题描述:阿里云Windowsserver2016服务器AntimalwareServiceExecutable进程占比高,cpu接近100%,需要强制关闭该进程,排查问题,进入系统服务关闭,提示拒绝访问(该服务关闭后有风险,需评估后操作)  操作步骤:1.进入服务器,进入Windowspowershell界面; 2. 输入 regadd"HKEY_L......
  • js车牌识别接口开发示例、Vin解析接口
    采用手机app扫描车牌来管理停车场车位或其他场景车位的方式已成为主流,车辆管理员们不再像以前一样使用一个小本子和笔来记录下车牌号码。如此一来,工作也仿佛变得轻松了不少,下面就让翔云为您介绍如何应用OCR技术来实现车牌识别功能。首先,我们来看一下车牌识别的功能一般都......
  • DNS原理及解析过程
    DNS(DomainNameSystem,域名系统)是一个将域名转换为IP地址的分布式数据库系统,它使得人们可以通过易于记忆的域名来访问互联网资源,而不是使用难以记忆的IP地址。以下是DNS的基本原理及解析过程:DNS原理分布式数据库:DNS是一个分布式数据库,由多个DNS服务器组成,这些服务器分布在互联......
  • 基于FPGA的贪吃蛇游戏 之代码解析
    基于FPGA的贪吃蛇游戏之代码解析1. 代码结构代码结构包含7格.v文件。  下面依次解析。   2. 代码解析(1) seg_display.v数码管的译码模块是最熟悉,最简单的模块了。这里是共阳极的数码管,用case语句编码即可。从上图可以看到,这个模块被例化了3次,分别驱动3个数码......
  • 考试解析(除T4外)
    T1攻击装置题目就不描述了吧其实就是二分图板子,连边的时候注意每个点标号怎么算,不能是\(i*j\),是\((i-1)*n+j\)千万注意啊。其次是加边的时候注意判断减的时候是判断>=1加的时候是判断<=n错误codeQAQ//未过且不对QAQ#include<bits/stdc++.h>usingnamespacestd;con......
  • antd upload action 不写(前端解析内容)
     在使用AntDesign的Upload组件时,如果不提供action属性,那么文件的上传处理需要通过customRequest属性来自定义实现。以下是一个不使用action属性,而是通过customRequest实现文件上传的例子: importReactfrom'react';import{Upload,message,Button}from'antd';imp......
  • 火电站与水电站的深度解析:能源转型的未来趋势与挑战
    电力是现代社会生活不可或缺的重要组成部分,它为我们的日常活动提供了必要的动力和便利。在电力生产方面,主要依赖于火电和水电两大来源。这两种发电方式各自拥有独特的优势和劣势,它们在能源供应中扮演着不可替代的角色。本文将深入探讨火电站和水电站这两种主要的发电方式,从技术原......