白话学习又一篇。感谢Vector 官方自制 UDS Protocol. 【官方自制】UDS Protocol_哔哩哔哩_bilibili
1. 什么是UDS
UDS是unified diagnostic service的缩写。
标准是ISO 14229 Road vehicles-Unified diagnostic Services (UDS),定义了服务的用法、服务的用法和标准化的数据,还有一些OEM定义的数据。
2. UDS在OSI的适用标准
随着控制器数量的增加,总线通讯协议也有发展。ISO 14229-2013还增加了UDS在各个总线上应用的定义, 比如CAN,LIN, K-linel, Ethernet.
UDS在OSI模型上的标准
3. 服务和请求的格式
请求是tester发给ECU端的,是一个SID(service identifier),就是所说的XX服务,根据具体的内容,后面加数据;
肯定响应,postive respond由SID+40,后面加数据。
否定响应,negative respond由7F+SID+NRC(1 byte)
4. 一些名词学习
4.1 subfunction和data identifier (DID)
UDS服务支持subfunction的请求和响应。
请求格式:SID+SF+数据
响应格式:SID+40+SF+数据;
有的UDS服务不支持subfunction, 支持DID (Data identifier)
请求格式:SID+DID+数据
响应格式:SID+40+DID+数据;
有两个服务支持这两种feature:
31-例程控制服务,2F - IO控制服务;
在subfunction的一个字节中,最后一位,第七位,是肯定响应抑制位,suppressive positive response message indication bit SPRMIB
0: positive answer- no suppressed
1: positive answer- suppressed
4.2 否定响应NRC
不同的NRC代表了不同原因, 比如服务不支持, 或者subfunction不支持,请求超出范围等。
4.3 两个时间格式:P2server, P2server*
当tester给ECU发送请求时,ECU要在P2server时间内给出响应,如果由于在处理别的任务,不能给出响应,现在P2server内给出pending的响应,然后在P2server*时间内给出响应。
5. UDS服务
UDS包含26个服务 ,下面重点介绍6个。
6.1 10服务 诊断会话控制
与10服务有关的三个NRC:
7F:serviceNotSupportedInActiveSession 在当前会话下不支持
7E:subFunctionNotSupportedInActiveSession 在当前子功能不支持
31: requestOutOfRange
Session 会话分哪几个?01 Default sesssion, 02 programming session, 03 Extended Session
10服务做的Session state handling:
Power on就进入default session, 1002或者1003可以进入非默认会话,1001跳回到默认会话,在非默认会话状态下,S3 timer 超时,也会回到默认会话,如果要一直维持在非默认会话状态下,tester要一直发送3E
ECU在一般状态处于locked状态,比如2E write, 2F I/O control, reprogramming services,这些被保护的服务,ECU在解锁状态才能执行。
6.2 27解锁服务
如果要进行被保护的服务,ECU要先解锁,进行27解锁服务:通过tester发送seed,计算key, 进行比对
安全状态可以有好几个等级;要跳回lock状态有特定的方法,比如上下电等。
6.3 22服务:通过DID读取数据
请求格式:22+DID(2 byte)
响应格式:62+DID+data
14229-1-2013 附录C有推荐使用的DID
6.4 2E服务:通过DID写入数据
请求格式:2E+DID+data
响应格式:6E+DID
下面几个是和故障存储有关的服务 。
记录故障的代码:diagnostic trouble code DTC, 可以反映出故障发生的位置和原因,还有和法律有关的故障,比如排放相关,未来,还有安全相关的故障。
很多标准都有对于DTC的定义,
UDS:对DTC有3个字节的定义
ISO 15031-6: root DTC (2 byte) + FTB (1 byte)
WWH-OBD in ISO 27145-2: root DTC (2 byte) + FTB (1 byte)
OBD II: DTC (2 byte)
J1939-73: SPN+FMI
6.5 19服务:读取DTC
19服务有28个subfunction, 下面介绍4个:
1902: 通过DTC的状态码读取DTC
1904: 读取DTC的快照数据 ,一些环境数据,比如发动机转速、水温等(14229里是snapshot, 在Autosar里是冻结帧)
1906: 获取DTC存储时的扩展数据,一些老化计数器,等
190A:获取ECU全部的DTC,即使没有产生,也都被读取
根据DTC的状态码读取DTC
请求格式:19+02+SM(statusMask)
回复格式:59+02+SAM(statusAvailabilityMask)(DTC+status)
读取ECU支持的所有的DTC
请求格式:19+0A
回复格式:59+0A+SAM+DTC+status
6.6 14服务:清除DTC
请求格式:14+三个字节,如果是FFFFFF,是全部DTC;也可以按组清除DTC
回复格式:54