UDS基础

本文详细介绍了UDS(统一诊断服务),包括其定义、在OSI的适用标准、服务和请求格式等。还讲解了相关名词,如subfunction、DID、否定响应NRC等。重点介绍了UDS的6个服务,如诊断会话控制、解锁服务、通过DID读写数据、读取和清除DTC等。

白话学习又一篇。感谢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

### 零基础 UDS 诊断 学习教程 入门指南 #### 了解基本概念 为了从零开始学习UDS(统一诊断服务),首先要掌握的是UDS的基本概念及其在整个汽车网络中的作用。这不仅涉及理论知识,还包括实际操作技能。一份全面覆盖了UDS各方面内容的文档可以帮助建立坚实的知识体系[^1]。 #### 获取权威资料 对于希望深入研究并最终成为汽车诊断领域专家的人来说,《UDS诊断入门.pdf》是一个不可或缺的学习材料。这份PDF不仅是自学的理想选择,也适用于专业培训机构的教学用途。书中详细介绍了UDS的核心原理和技术细节,有助于逐步加深对该主题的理解和应用能力[^2]。 #### 掌握具体服务 随着对UDS有了初步认识之后,下一步就是深入了解该协议所定义的服务。《UDS协议从入门到精通(UDS速查手册)》一书专门针对这一点进行了详细的讲解——总共涵盖了26种不同的服务类型,并配有图表形式的具体应用场景说明,使得抽象的概念变得更加直观易懂[^3]。 #### 动手实践项目 最后但同样重要的一环是通过具体的编程练习来巩固所学知识点。“ZLG_UDS_DEMO”就是一个很好的例子,它展示了如何基于MFC框架构建图形用户界面的应用程序,同时还包含了丰富的代码片段用于解释各种高级特性如对话框管理和ActiveX控件集成等内容。这对于想要进一步提高自己技术水平以及解决现实世界中遇到的问题非常有帮助[^5]。 ```python # 示例Python脚本模拟简单的UDS请求发送过程 import can def send_uds_request(bus, request_id): message = can.Message(arbitration_id=request_id, data=[0x10, 0x03]) try: bus.send(message) print(f"Message sent on {bus.channel_info}") except can.CanError: print("Message NOT sent") if __name__ == "__main__": with can.interface.Bus(bustype='socketcan', channel='vcan0') as bus: send_uds_request(bus, 0x7DF) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值