分享

UDS—ECU刷写

 车载诊断技术 2022-02-04

刷写,顾名思义就是两个动作:刷和写:

刷是擦除ECU芯片内存上原有的数据;

写是重新在ECU芯片内存上写入新的数据(Applicationor Calibration Data……);

        在控制器量产之初,会将valid application data烧录到控制器芯片内存上。但随着时间推移,控制器中运行代码出现Bug或者更新控制器功能(比如车载娱乐系统中导航地图更新),需要更新控制器中运行的应用程序。若在控制器研发前期,可以通过下载器(类同J-Link)将更新的应用程序数据烧录到芯片内存上,后期装车,车主不会允许破坏车的整体性,将刷写的功能归属到诊断范畴内(通过UDS服务实现对ECU的刷写)。

ECU可以通过UDS刷写,需满足以下三个条件:

1、实现ECU刷写,首先要求控制器芯片上具备Bootloader代码,代码可以解析上位机发送给ECU的诊断指令并执行;

2、要具有上位机,可以实现可以加载ECU所需的DriverFlash Data

通过上位机设置好与ECU的通信参数以及所需的安全解锁文件(dll),按照OEM定义的刷写流程执行刷写步骤,完成对ECU的刷写。

而对于刷写步骤,在UDS协议中有建议的流程,每个OEM基于这个建议流程做自己的刷写规范定义。

ECU中,芯片内存上分两个地址区域存放不同代码:ApplicationBootloaderApp代码运行的是控制器功能代码,比如这个控制器是车载娱乐系统,App中自属功能包括控制器电源管理模块、屏幕显示(Audio/Video功能、与空调模块数据交互并显示、与倒车雷达数据交互并显示)、诊断功能……Bootloader用于ECU基于UDS协议的刷写功能代码。当上位机开始发送刷写动作,由Bootloader代码来执行具体服务功能。并且存放该代码的内存区域需要受到保护,以防止意外擦除。在刷写过程中如果遇到以下错误情况,则Server端应能够恢复并重新刷写。

ECU上电开机后,如下图UDS协议推荐的BootloaderApplication程序之间的相互作用和过度:

1、控制器重新上电后,首先检查是否有ProgrammingRequest?比如在车载娱乐系统中会定义几个按键,当重新上电时,长按定义的按键即可进入到Boot模式;

2、若无ProgrammingRequest,再检查控制器中应用软件Application是否正确?根据判定结果进入不同的程序(ApplicationSoftware or Reprogramming Software

1、在数据链路上进行任何通信之前,应初始化网络(比如在网络上执行网络唤醒)。唤醒方法和策略由OEM选择,此外该步骤允许确定Server端通信参数;

2、为了能够禁用Server之间的正常通信和DTC的设置,需要在禁用正常通信和DTC的每个Server中启动non-defaultSession

3、过渡到ExtendedDiagnostic Session之后,可以选择执行其他特定于车辆制造商的数据链路初始化步骤。示例:特定于车辆制造商的其他初始化步骤可以是发出请求,使网关设备在所有未连接的数据链路上执行唤醒客户端可直接通过诊断连接器进行访问。只要non-DefaultSession在网关中保持活动状态,网关就会保持数据链接的唤醒状态;

4、这个可选的例程标识符(由车辆制造商选择的编号)允许客户端在尝试过渡之前检查是否满足所有过渡到programmingSession的前提条件;

5、客户端使用DTCSettingType等于“ off”的ControlDTCSetting85)服务禁用每个服务器中的DTC检测设置。该请求可以通过单个请求消息功能上发送给所有服务器,也可以通过单独的请求消息物理上发送给每个服务器。是否需要响应消息取决于OEM

6、出于安全原因,此可选的例程标识(由车辆制造商选择的编号)允许客户端根据需要启用或禁用ECU的故障安全响应;

7、客户端使用CommunicationControl28)服务禁用非诊断消息的发送和接收。Control Type参数和communicationType参数值是特定于车辆制造商的(一个OEM可能仅根据车辆制造商的需求禁用传输,而另一个OEM可能根据车辆制造商的特定需求禁用传输和接收)。该请求可以通过单个请求消息功能上发送给所有服务器,也可以通过单独的请求消息物理上发送给每个服务器。是否需要响应消息取决于车辆制造商;

8、禁用正常通信后,将执行可选的汽车制造商特定步骤,该步骤允许以下操作:

读取要编程的服务器的状态(例如,应用软件/已编程的数据)。从要编程的服务器读取服务器标识数据:

—标识(请参阅dataIdentifier定义):

applicationSoftwareIdentificationapplicationDataIdentification

—指纹(请参阅dataIdentifier定义):

applicationSoftwareFingerprintapplicationDataFingerprint

通信配置,例如为“服务ECU”动态分配地址标识符。

为即将到来的编程活动准备非可编程服务器,以使其能够优化

他们的数据链路硬件验收过滤方式可以处理100%的总线利用率而无需

丢弃数据链接帧(仅接受功能请求地址标识符及其自身的物理请求地址标识符)

9、可以选择增加编程事件的带宽,以减少总体刷写编程时间并获得额外的带宽,以便能够并行刷写多个服务器。

一条带有linkControl等于verifyBaudrateTransitionWithFixedModeverifyBaudrateTransitionWithSpecificModeLinkControl87)服务通过一条单条请求消息在功能上或物理上发送给所有服务器,其中responseRequire等于“ yes”。该服务用于验证是否可以在关联的数据链路上执行模式转换。此时不执行转换。

第二个LinkControl87)具有SubFunctiontransitionMode的服务在功能上通过单个请求消息(其responseRequired等于“ no”)发送到所有服务器。成功发送请求消息后,客户端和所有服务器将转换为刷写编程事件的先前验证模式。服务器应在OEM特定的时间窗口内转换特定数据链路的特定模式。在此期间加上安全裕度,不允许客户端将任何请求消息(包括TesterPresent请求消息)传输到车辆网络。

成功完成过渡后,请求的模式将在服务器切换期间保持活动状态在非defaultSession之间。一旦服务器过渡到defaultSession,它将重新启用它所连接的车辆链接的正常模式。模式开关的使用要求在单个Server上的每台服务器中支持功能诊断通信。数据链路,应转换为相关的数据链路相关模式

以上描述了Pre-Programmingstep。有些Steps是可选,一些是OEM自定义。

在如图ProgrammingStepUDS协议给出相应的推荐步骤:

  1. 首先从扩展会话模式进入编程会话模式(programmingSession),这时ECU会从Application进入Boot模式。接着为了保证数据安全,会进行安全访问进行解锁。只有解锁成功,才可以执行下一步操作。写指纹(fingerprint)表示刷写ECU的时间、刷写工具供应商信息、刷写软件序列号等等;

  2. 请求下载Driver以及flash data,用RoutineControl检查是否下载数据完整、正确以及合法;

  3. 写入配置数据内容(writingconfiguration data e.g. VIN)。

对于Post reprogrammingstep,重启初始化,也可以做clearDTC 操作(service14.

伴随着OTA越来越普及,可设想以后对于控制器软件更新频率会越发快速。像蔚来汽车基于整车控制器软件更新一月一次,类似于手机APP更新模式一样。基于这样的操作,ECU刷写稳健性需更加重视。车载环境是一个很复杂的运行环境,控制器刷写过程中不可控会出现各种状况。这时需要对ECU刷写测试重视,来保证Bootloader代码的稳健性。

-----------------------------------------

   作者简介 | 穿拖鞋的汉子

           汽车电子工程师

    来,每天进步一点点!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多