白话学习又一篇。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模型标准
请求是tester发给ECU端,是一个SID(service identifier),就是所说的XX服务,根据具体内容,以后添加数据;
肯定响应,postive respond由SID 后面加数据。
否定响应,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
0: positive answer- no suppressed
1: positive answer- suppressed
4.2 否定响应NRC
不同的NRC代表不同的原因, 例如,不支持服务, 或者subfunction不支持,请求超出范围等。
当tester给ECU发送请求时,ECU要在P2server如果在处理其他任务时不能给出响应,现在就给出响应P2server内给出pending然后在P2server*在时间内做出反应。
5. UDS服务
UDS包含26个服务 ,以下重点介绍6个。
与10服务相关的三个NRC:
7F:serviceNotSupportedInActiveSession 不支持当前会话
7E:subFunctionNotSupportedInActiveSession 不支持当前子功能
31: requestOutOfRange
Session 会话分哪几个? 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先解锁,再解锁:通过tester发送seed,计算key, 进行比对
安全状态可以有好几个等级;要跳回lock有具体的状态方法,如上下电等。
请求格式:22 DID(2 byte)
响应格式:62 DID data
14229-1-2013 推荐使用附录CDID
请求格式:2E DID data
响应格式:6E DID
以下是与故障存储相关的服务 。
记录故障代码:diagnostic trouble code DTC, 它可以反映故障的位置和原因,以及与排放、未来和安全相关的法律相关的故障。
许多标准都是正确的DTC的定义,
UDS:对DTC定义三个字节
WWH-OBD in ISO 27145-2: root DTC (2 byte) FTB (1 byte)
OBD II: DTC (2 byte)
J1939-73: SPN+FMI
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
请求格式:14+三个字节,如果是FFFFFF,是全部DTC;也可以按组清除DTC
回复格式:54