背景
在现代汽车电子技术中,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