一、UDS诊断的基础定义
1.什么是UDS
UDS(Unified Diagnostic Services)是统一诊断服务。
诊断协议是汽车行业诊断通信的需求规范,由ISO-14229系列标准定义。在开放系统互连(OSI)基本参考模型中规定了各类物理层通信对应部分的UDS诊断协议。例如,CAN通信(ISO 11898-1、ISO 11898-2和ISO 11898-3)在应用层的UDS诊断协议是ISO 14229-1和ISO 14229-3。
应用层服务:通常指诊断服务,执行车载服务器的测试,检测,监控,诊断等功能。
2.什么是UDS诊断
UDS诊断是一种定向通讯的交互协议(Request/Response),由诊断方(tester)发送服务请求,ECU返回相应。
UDS诊断单元包括6个诊断单元,一共有26中服务;每种服务有自己的SID(Service Identifier)。
SID:诊断服务ID。
肯定响应(positive responds):首字节回复:SID+0x40(例如:请求0x10,响应0x50;请求0x22,响应0x62)
否定响应(negative responds):首字节回复:0xFF,第二字节回复:已询问的SID(表示该ID已拒绝访问),第三字节回复NRC(否定响应码:代表我否定你的依据)
Addressing information寻址信息:寻址信息包含了源地址(Source Address)和目标地址(Target Address),表明这条信息是由谁发给谁的,类似于收件人和发件人。
二、UDS诊断的重点服务
1.诊断会话(Diagnostic Session Control)
包含三个子功能:默认会话(Default),编程会话(Programming),扩展会话(Extended)。
设置会话原因:由于进入者不同的权限,设置了三种不同的会话模式。默认会话可操作服务最少。编程会话可以实现程序烧录。
下图表示实现各功能可以解锁的服务
下边介绍个例子,来解释一下报文的组成部分:请求(Request):02 10 02 xx xx xx xx xx
02:表示该应用层包含两个字节;10:表示进入诊断模式控制(SID号),02:子功能,进入编程会话。
响应回复:02 50 02 xx xx xx xx xx;应用层2个字节+肯定回复+子功能
肯定响应:03 7F 10 7E xx xx xx xx;应用层3字节+否定响应+SID+子功能
2.安全访问
为什么会有安全访问的模块:由于整车端的数据不希望开放给客户端,所以需要对其保密。在我们读取数据之前需要进行解锁。
解锁请求:$27+子服务+钥匙
第一轮:
tester发送请求指令:(27 01);ECU会返回:67+01+AA+BB+CC+DD;其中,AA-DD就是种子。
第二轮:
tester根据种子计算出k1,发送请求,子服务是02;tester发送:27+02+[k1]给ECU;ECU根据种子计算出k2,并且检查k1,k2是否一致。若是一致,解锁成功。
安全检验算法:一个核心,三个主体
三个主体分别为:ECU读取的SN,seed,执行次数
一个核心:算法
3.读数据
读取指令:22+DID
响应指令:62+DID+Data
例如:读取:03 22 F1 86 AA AA AA AA;响应:04 62 F1 86 01 AA AA AA
4.写数据
请求指令:2E+DID+Data
响应指令:6E+DID
例如:读取:03 2E F1 86 AA AA AA AA;响应:04 6E F1 86 01 AA AA AA
5.读DTC
DTC(diagnostic trouble code):如果系统检测到了一个错误,它将存储为DTC。
故障码包括4大类:P(Powertrain)C(Chassis)B(Body)U(network)
例如:P0047;P:Powertrain类别的故障,00/01/10/11分别表示P/C/B/U。
01 (读取符合掩码条件的DTC数量)(必须支持),后面的参数是DTC状态掩码,若为01表示我想读当前故障,若为08表示我想读历史故障,若为09表示当前故障和历史故障都想读。
02(读取符合掩码条件的DTC列表及其状态)(必须支持),后面的参数是DTC状态掩码,解读同上。
6.清除DTC
清除故障包括:包含当前故障(TestFailed)和历史故障(ConfirmedDTC)
3个FF代表清除所有DTC。Request:14+FF+FF+FF;Response:54 。
参考资料
汽车UDS:统一诊断服务概览 - 知乎 (zhihu.com)