VBF(Versatile Binary Format)是主机厂常用的一种固件发行文件格式,包括沃尔沃、福特、吉利等均采用此格式。
VBF文件包含三部分:VBF版本段、文件头段、数据段。
- VBF版本段:表明当前VBF文件使用的版本号。版本号使用ASCII码存储;
- 文件头段:文件头段包含通用信息,例如使用说明、安装信息等。文件头使用ASCII存储;
- 数据段:数据段为实际写入ECU的数据信息。使用二进制格式存储;
VBF文件格式概览如下:
- vbf_version=2.7;
- vbf_version = 2.7 ;
VBF版本部分后必须紧跟文件头部分。BVF版本部分和文件头部分可以包含空白字符(见2.2章节8)
description标识符是可选的,用来简短的介绍文件。
description值需满足如下要求:
- 最多16行
- 每行最多80字节
- 每行都包含在引号(")中,并以逗号(,)结束,如果该行是最后一行,则以右括号(})后跟分号(;)结束
- 引号内的空白不会被忽略
- 无论是单行还是多行,所有描述行都应包含在大括号内
- 行内不允许使用引号(")
正确示例:
- description = {"Created:2022-03-14"};
- description = {"created by xxx",
"sop xxxx"
};
sw_part_number标识符为必选,用来识别汽车制造商的软件组件(VBF文件)的零部件号。
sw_part_number值需满足如下条件:
1.必须用引号包含
2.最多20个字节
3.不允许空白符和注释
正确示例:
- sw_part_number = "";
sw_version标识符为必选,用来识别汽车制造商的软件组件(VBF文件)的版本号。
sw_version值需满足如下条件:
1.必须用引号包含
2.最多4个字节
3.不允许空白符和注释
4.应只包含大写字符A-Z(不能出现数字)
正确示例:
- sw_part_number = "";
sw_part_type标识符为必选,用来指明ECU软件类型。
sw_part_type无需使用双引号包围,且仅允许使用下表中的值。
当sw_part_type值为SBL或SSBL时,不允许使用标识符erase。
正确示例:
- sw_part_type = EXE;
- sw_part_type = APP;
sw_current_part_number标识符为可选,用来识别汽车制造商的软件组件(VBF文件)的零部件号。该标识符值仅用于进行差分软件升级(delta software update)时,已安装的软件零部件号应匹配此值。此字段仅适用于软件升级且压缩类型为"delta"的软件升级时使用。
sw_current_part_number值需满足如下条件:
1.必须用引号包含
2.最多20个字节
3.不允许空白符和注释
正确示例:
- sw_current_part_number = "";
sw_current_version标识符为可选。当使用差分软件升级(delta software update)时,用来标识期望在当前ECU中已安装的汽车制造商的软件组件(VBF文件)的版本号。该字段仅在软件升级且压缩类型为delta时使用。
sw_current_version值需满足如下条件:
1.必须用引号包含
2.最多4个字节
3.不允许空白符和注释
4.应只包含大写字符A-Z(不能出现数字)
正确示例:
- sw_current_version = "ABC";
data_format_identifier标识符为可选,以非零值出现在头信息中。该字段表明数据的压缩和加密方式,字段的合法值范围为0x00到0xFF,其中高半个字节代表数据压缩方式,低半个自交代表数据加密方式。当该标识符未出现在头信息中,表明即不做压缩,也不做加密。
正确示例:
- data_format_identifier = 0x10; //压缩方式为#1,不加密
- data_format_identifier = 0x21; //压缩方式为#2,加密方式为#1
ecu_address标识符为必选,用来指明ECU的物理目标地址。该字段值被划分为3个不分:Domain ID,Network ID、ECU ID。ecu_address取决于ECU在网络拓扑中的位置。
ecu_address共2个字节,16个bit。bit 0-3为ECU ID,bit 4-7为Network ID,bit 8-11为Domain ID。
正确示例:
- ecu_address = 0x 1234; //Domain ID:0x2,Network ID:0x3,ECU ID:0x4
erase标识符为可选,指示在软件下载操作发生之前需要擦除的内存范围。擦除起始地址和长度不需要与flash扇区起始地址和长度匹配。擦除长度可以跨越多个Flash扇区,也可以在单个Flash扇区内。erase标识符值需使用大括号包含2个值,第一个值为起始地址,第二个值为长度。起始地址和长度的范围均为0x00000000到0xFFFFFFFF。
正确示例:
- erase = {{0x00001000,0x00003FFF}};
- erase = {{0x00001000,0x00003FFF},
{0x000060FF,0x00000500}
};
call标识符在sw_part_type为SBL或SSBL时是必选,在sw_part_type为TEST时是可选的。在sw_part_type为其他值是,不允许使用call标识符。
call标识符指示ECU内存里预定义的可执行函数的起始地址,其实地址为4个字节,范围在0x00000000到0xFFFFFFFF。
正确示例:
- sw_part_type = SBL;
call=0x00001000; - sw_part_type = SSBL;
call=0x00001000;
verification_block_start标识符为可选的,指示需要进行签名的原始数据(未压缩前)的起始地址。该标识符值为4个字节。
正确示例:
1.verification_block_start = 0x00001000;
verification_block_length标识符为可选的,指示需要进行签名的的原始数据(未压缩和加密前)的长度。该标识符值为4个字节。
正确示例:
1.verification_block_length = 0x00001000;
verification_block_length标识符为可选的,指示需要进行签名的的原始数据(未压缩和加密前)的哈希值。该标识符值长度依据HASH算法确定。
正确示例:
1.verification_block_length = 0xABCDEFABCDEF;
sw_signature标识符为可选的,代表签名值。该标识符值的长度需根据签名算法确定。
sw_signature_dev标识符为可选的,代表测试和开发阶段的签名值。该标识符值的长度需根据签名算法确定。使用开发阶段密钥对后续会发布的软件进行签名,形成签名值并存储在该标识符中。
file_checksum标识符为必选,长度为4个字节。checksum目的是在尝试下载前,进行文件完整性的校验。checksum使用CRC32算法,计算数据部分的所有数据,包括所有data block的start address、length、 checksum。
checksum满足如下规范:
- 32 bit CRC,多项式为0x04C11DB7(x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1)
- 初始值为0xFFFFFFFF
- 位反转
若没有data blocks,则file_checksum为0xFFFFFFFF。
正确示例:
1.file_checksum = 0x;
parameter_settings标识符为可选的,用于定义和携带off-board工具所需的配置。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/36396.html