4. ECU软件版本标识与命名规范

在ECU软件开发中,版本标识不是简单的“第几版”计数,而是一套贯穿需求、开发、集成、测试、刷写和售后诊断的标识体系。一个ECU软件通常同时存在多个“身份”:版本号用于区分同一软件零件的迭代;软件零件号用于在整车BOM和诊断仪中唯一识别可刷写软件;诊断标识(如F187/F189/F1A0等DID)用于在运行时读取软件与硬件信息;硬件兼容性标识则确保软件只能匹配正确的硬件状态。四者相互关联,但用途不同,不能混用。

版本号规则:语义化与工程化结合

版本号规则决定团队如何表达“变化程度”。推荐采用“主版本.次版本.修订号”三段式,并附加构建号或日期戳。主版本变化表示接口、诊断协议或功能安全相关行为发生不兼容变更;次版本表示向后兼容的功能新增;修订号表示缺陷修复或参数标定微调。例如:V2.3.1表示第2代主版本、第3次功能新增、第1次修复。构建号可写成V2.3.1+20240612.3,其中20240612为日期,.3为当日第3次构建。

版本号必须与配置管理工具中的基线一一对应。每次提交、构建、发布都应记录版本号、Git提交哈希、构建时间、构建人和变更说明。版本号一旦发布,不得回退或复用;若发现发布错误,应递增修订号重新发布,而不是覆盖原版本。

软件零件号:可刷写软件的唯一身份证

软件零件号(Software Part Number)是OEM和供应商之间约定的可刷写软件标识,通常由10到12位数字或字母数字组成。它不随每次编译变化,而是随“软件功能集”变化。例如,同一硬件上支持不同排放法规或不同车型配置的软件,应分配不同软件零件号。软件零件号通常写入ECU的刷写数据中,诊断仪通过读取该标识判断当前ECU内刷写的是哪一版软件。

软件零件号与硬件零件号必须成对管理。一个硬件零件号可以对应多个软件零件号,但一个软件零件号通常只允许在指定硬件零件号范围内刷写。若软件零件号与硬件不匹配,刷写工具应拒绝写入,或在刷写后报出兼容性故障码。

诊断标识:运行时读取软件与硬件信息

诊断标识通过UDS服务0x22(ReadDataByIdentifier)读取,常用DID包括:

  • F187:软件版本号,通常返回ASCII字符串或压缩BCD,用于诊断仪显示当前软件版本。
  • F189:软件零件号,返回与刷写数据一致的零件号。
  • F191:ECU硬件零件号,用于确认硬件状态。
  • F1A0:供应商软件版本,用于供应商内部追溯。
  • F18C:ECU序列号,用于唯一标识单个控制器。

这些DID必须在软件中静态定义,并在刷写后立即可读。诊断仪读取F187与F189后,应与OEM发布的软件清单比对,判断是否需要升级。若F187与F189不匹配,说明刷写数据被篡改或刷写不完整,应触发安全回滚或锁定。

硬件兼容性标识:防止“软硬错配”

硬件兼容性标识用于描述软件可运行的硬件范围。常见做法是在软件中定义硬件兼容性数组,包含允许的硬件零件号、硬件版本号或硬件变更索引。刷写前,刷写工具读取ECU的F191硬件零件号,并与待刷写软件中的兼容性列表比对;若不在列表内,则拒绝刷写。运行时,软件也可周期性检查硬件版本,若发现不匹配,则进入降级模式并记录DTC。

硬件兼容性标识应随硬件变更同步更新。例如,硬件从HW1.0升级到HW1.1,若仅修改了存储器容量,软件兼容性列表应增加HW1.1,但不必修改软件零件号;若硬件接口或引脚定义变化,则必须发布新软件零件号并更新兼容性列表。

Vector工具中的配置方法

在Vector工具链中,版本标识通常通过以下方式配置:

  • CANoe/CANalyzer:在诊断配置中导入CDD/ODX文件,定义DID读取与显示。可在CAPL中编写脚本自动读取F187/F189/F191,并与预期值比对。
  • vFlash:在刷写工程中配置软件零件号、硬件兼容性检查规则和刷写后验证DID。vFlash支持在刷写前执行0x22读取硬件零件号,并依据规则决定是否继续。
  • DaVinci Configurator:在ECU配置中定义软件版本号、零件号和兼容性数组,生成到AUTOSAR SWC或BSW中,最终编译进HEX文件。
  • CANoe.DiVa:用于自动化测试诊断DID读取与兼容性判断逻辑,验证F187/F189/F191返回值是否符合规范。

以下SVG展示了从软件构建到诊断读取的标识传递关系,以及Vector工具在其中的配置与校验位置。

ECU软件版本标识传递与Vector工具配置校验 构建阶段 DaVinci Configurator 定义版本号/零件号 兼容性数组 编译产物 HEX / A2L / ODX 含F187/F189/F191 及兼容性列表 刷写阶段 vFlash 读取F191硬件号 比对兼容性后刷写 运行时 ECU 响应0x22 返回DID数据 诊断仪读取(CANoe / CANalyzer) 0x22 F187 → 软件版本号 0x22 F189 → 软件零件号 0x22 F191 → 硬件零件号 校验与判断 F187/F189 与OEM软件清单比对 F191 与兼容性列表比对 不匹配 → 拒绝刷写 / 记录DTC 版本号随迭代递增;软件零件号随功能集变化;诊断DID运行时读取;硬件兼容性标识防止软硬错配

配置示例:vFlash刷写前兼容性检查

以下为vFlash工程中配置硬件兼容性检查的简化示例,用于说明关键参数如何设置。示例参数为教学假设,实际项目需按OEM规范填写。

[FlashProject]
SoftwarePartNumber = 1234567890AB
SoftwareVersion    = V2.3.1
HardwareCompatibility = HW1.0, HW1.1, HW1.2

[PreCheck]
ReadDID_F191 = true
ExpectedHardware = HW1.1
OnMismatch = AbortFlash
LogFile = flash_check.log

[PostCheck]
ReadDID_F187 = true
ExpectedVersion = V2.3.1
OnMismatch = WarnAndLog

刷写前,vFlash通过0x22 F191读取硬件零件号,若返回HW1.1且在兼容性列表内,则继续刷写;若返回HW2.0,则中止并记录日志。刷写后,读取F187确认软件版本为V2.3.1,若不一致则告警。

版本号、软件零件号、诊断DID和硬件兼容性标识应在项目初期定义并写入配置管理计划。任何变更都需同步更新四者,避免出现“版本号变了但零件号未变”或“DID返回值与刷写数据不一致”的问题。
严禁在未更新硬件兼容性列表的情况下,将软件刷写到不兼容的硬件上。即使刷写成功,也可能导致ECU功能异常、诊断通信失败或安全机制失效。刷写工具应强制启用兼容性检查,不得默认跳过。

总结来说,ECU软件版本标识体系的核心是“四个标识、一条链路”:版本号表达迭代,软件零件号表达功能集,诊断DID表达运行时身份,硬件兼容性标识表达匹配范围。在Vector工具链中,DaVinci负责定义,vFlash负责刷写校验,CANoe/CANalyzer负责诊断读取与验证。只有四者一致且可追溯,才能保证软件从开发到售后的全生命周期可控。