一、功能介绍
UDS(unified diagnostic services)统一诊断服务主要是针对汽车上对ECU进行诊断服务规范,下图是UDS在OSI分层中的具体规范,基于UDS的刷写应用逻辑体现在应用层的ISO14229规范。
汽车诊断是指通过诊断工具访问汽车上支持UDS的ECU进行故障访问、故障清除等,UDS还可以写入ECU的出厂信息和程序刷写。
此文主要是针对基于UDS的刷写功能介绍
二、名词解释
物理寻址:给指定唯一标识符的设备发送数据,在刷写流程中主要是指待刷写设备
功能寻址:给一类标识符设备发送数据,比如升级时给总线其他设备发送静默指令
DTC:诊断故障码
DID:数据标识符,在当前刷写流程的预编程阶段读取ECU信息时使用,比如不同的DID区分汽车转速、里程、冷却液温度等
会话模式:UDS客户端与服务端在不同的模式下数据访问权限不一样,主要有默认模式、编程模式以及扩展模式
肯定响应和否定响应:客户端对服务端发起请求时,服务端对客户端的响应类型包含肯定响应和否定响应,比如刷写流程中诊断仪对ECU发起的进入扩展会话指令,ECU可以可以给出肯定或者否定响应
指纹:固件刷写的当前信息,如日期、设备ID、刷写地点等
FlashDriver:擦除程序,autosar规范中规定程序存储器的驱动代码不能在应用程序中,防止程序运行过程中的缺陷导致应用程序代码被改变,所以程序刷写前需要将擦除程序提前下载在ram指定位置中,引导程序通过指定地址调用擦除程序进行刷写的擦除和写入操作
三、刷写流程
按照刷写流程分为三部分:
3.1 预编程
预编程是刷写前的一些准备工作比如会话切换、安全访问等
- 进入默认会话,功能寻址,建立通讯为进入扩展会话做准备,这里是不确定之前在什么会话模式下,为了稳定接下来进入扩展会话提前进入的默认会话
- 进入扩展会话,功能寻址,进入扩展会话以便后面的信息访问及其他指令
- 读取ECU信息,物理寻址,通过DID读取ECU的指纹、生产日期、厂商信息等
- DTC设置,功能寻址,这里是将总线上可能影响后续升级的DTC设置为关闭,被关闭的DTC不报故障信息做存储本地处理
- 禁止一般报文,功能寻址,禁止网络管理类、应用类报文,保证总线刷写的稳定性
3.2 编程
- 进入编程会话,物理寻址,让待刷写设备进入编程会话准备后续的程序刷写
- 读取ECU信息,物理寻址,读取待刷写ECU的设备信息
- 安全访问
- 安全访问请求种子,物理寻址,请求待刷写ECU的种子信息,种子是一个固定长度的随机数
- 安全访问发送密钥,物理寻址,诊断设备将上一步获取到的种子通过指定算法计算出密钥,再将密钥发送给ECU,ECU校验密钥的完整性。
- 写入指纹信息,物理寻址,记录当前刷写的信息,比如日期、刷写ID等
- 写入擦写程序,物理寻址,将FlashDriver驱动程序下载到ECU的RAM中,以便后续程序刷写的擦除和写入操作
- 检查编程完整性,物理寻址,检查上一步的擦写程序是否正确下载
- 擦除程序,物理寻址,使用5下载的擦写程序对待升级程序的存储逻辑块进行存储以便后续的程序写入
- 写入待刷写程序,物理寻址,将待刷写的程序通过擦写程序驱动写入7中擦除的指定地址,通过34、36、37三个服务对擦写文件进行写入,具体的流程见ISO15765中的连续帧写入
- 检查编程完整性,物理寻址,对8下载写入的刷写程序进行完整性校验
- 检查编程兼容性,物理寻址,验证整个下载是否成功
3.3 后编程
- 复位,功能寻址,刷写完成后对整车ECU进行复位
- 进入扩展会话,功能寻址,复位后ECU进入扩展会话,以便后续的刷写”恢复“操作 ·1
- 安全访问,物理寻址,更新ECU的访问等级
- 写入配置参数,物理寻址,向刷写的ECU写入钥匙信息等参数
- 报文控制,功能寻址,恢复ECU的应用报文和网络管理报文
- DTC设置,功能寻址,恢复ECU的DTC为打开
- 清除ECU故障,功能寻址,清除刷写过程中的故障
四、待补充
1、连续帧的传输流程(ISO15765)
2、UDS刷写上位机的QT实现