热度 5
2024-5-23 11:02
671 次阅读|
0 个评论
背景 在现代汽车电子技术中,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定义。 压缩刷写日志分析 非压缩刷写日志: 压缩刷写日志: 通过分析刷写日志,我们可以发现压缩刷写与非压缩刷写的主要区别在于: 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