Autosar BSW 之诊断 (1) UDS

1. 介绍

UDS协议即ISO14229,全称Unified Diagnostic Services,统一诊断服务;

UDS诊断服务的主要应用包括诊断/通讯管理、数据处理、故障信息读取、在线编程及功能/元件测试等。

UDS采用的是Client/Server的模式,基本是Client发送一个请求报文,Server会根据请求报文做出相应的响应。Client一般情况下是指测试仪(Tester),发送诊断请求;Server一般是指电控单元(诊断响应的提供者),发送诊断响应。

UDS不属于AUTOSAR,他们之间的关系,只是AUTOSAR提供了一些接口,可以与UDS进行集成;

在AUTOSAR架构中,应用层(Application Layer)提供了一些标准的应用程序接口(API),可以与诊断协议进行集成,这些诊断协议之中就包括UDS协议。而这些接口中也包含了DCM与DEM,虽然这两个名字与UDS中的类似,但是它们的实现方式与作用,有一些不同:

UDS协议中的DCM和DEM是用于实现通信管理和故障管理的两个服务。

AUTOSAR架构中的DCM和DEM是两个具体的模块,分别用于实现车辆诊断系统中的通信管理和故障管理功能,DCM和DEM还可以与其他模块和服务进行集成,例如CanTp、PduR等,实现更加复杂的车辆诊断和通信功能。

DCM和DEM是UDS协议栈的两个组成部分,属于应用层;应用层是整个协议栈的核心部分,它定义了大部分的诊断服务和数据标识符,包括DEM和DCM服务;

2. 服务种类

诊断单元

服务种类

服务说明

服务Id

诊断和通信管理功能单元

DiagnosticSessionControl

客户端请求控制和服务器的诊断会话

0x10

ECUReset

客户端请求服务器执行重置

0x11

SecurityAccess

客户端请求解锁受保护的服务器

0x27

CommunicationControl

客户端控制服务器通信参数的设置

0x28

Authentication

验证客户端身份合法性

0x29

TesterPresent

客户端向服务器指示他仍然存在

0x3E

SecuredDataTransmission

客户端使用该服务在扩展数据链路安全性的情况下执行数据传输

0x84

ControlDTCSetting

客户端控制服务器中DTC的设置

0x85

ResponseOnEvent

客户端请求设置和控制服务器中的事件机制

0x86

LinkControl

客户端请求控制通信波特率

0x87

数据传输功能单元

ReadDataByIdentifier

客户端请求读取由提供的DataIdentifier标识DID记录的当前值

0x22

ReadMemoryByAddress

客户端请求读取所提供内存范围的当前值

0x23

ReadScalingDataByIdentifier

客户端请求读取由提供的DataIdentifier标识的DID记录的伸缩信息

0x24

ReadDataByPeriodicIdentifier

客户端请求调度服务器中的数据进行周期性传输

0x2A

DynamicallyDefineDataIdentifier

客户端请求动态定义的数据标识符,这些标识符由0x22服务读取

0x2C

WriteDataByIdentifier

客户端请求写入由提供的DataIdentifier标识DID指定的记录

0x2E

WriteMemoryByAddress

客户端请求覆盖提供的内存范围

0x3D

已存储数据传输功能单元

ClearDiagnosticInformation

允许客户端清除服务器上的诊断信息

0x14

ReadDTCInformation

允许客户端向服务器请求诊断信息

0x19

输入输出控制功能单元

InputOutputControlByIdentifier

客户端请求控制特定服务器的输入、输出

0x2F

例程控制功能单元

RoutineControl

客户端请求启动、停止服务器中的例程或请求例程结果

0x31

上传和下载功能单元

RequestDownload

客户端请求从客户端到服务器传输数据的协商

0x34

RequestUpload

客户端请求从服务器到客户端传输数据的协商

0x35

TransferData

客户端将数据传输到服务器或者服务器将数据传输到客户端

0x36

RequestTransferExit

客户端请求中止传输数据

0x37

RequestFileTransfer

客户端请求服务端和客户端之间的文件传输协议

0x38

3. 通信方式

UDS诊断是基于问答形式实现,"请求"由client端发送给server

3.1 request

  • [SID] + [Sub-Function]

  • [SID] + [DID]

  • [SID] + [Sub-Function] + [DID]

3.2 positive response

  • [SID + 40] + [Sub-Function]

  • [SID + 40] + [DID]

  • [SID + 40] + [Sub-Function] + [DID]

3.3 negative response:

  • [0x7F] + [SID] +[NRC]

3.4 NRC:Negative Response Code(否定响应码)

否定响应码

说明

Description

0x10

该否定响应不是协议里已定义的

General Reject

0x11

请求的服务不支持

Service Not Support

0x12

ECU不支持当前请求的子功能

Sub-function Not Support

0x13

请求报文的长度和格式不正确

Incorrect Message Length Or Invalid Format

0x22

先决条件不满足

Conditions Not Correct

0x24

请求报文的顺序不正确

Request Sequence Error

0x31

参数超出范围/数据ID不支持

Request Out Of Range

0x33

不满足安全策略,请先解锁

Security Access Denied

0x35

密钥不匹配(27服务)

Invalid Key

0x36

尝试解锁次数已达上限

Exceed Number Of Attempts

0x37

超时时间未到

Required Time Delay Not Expired

0x70

不允许上传/下载

Upload/Download Not Accepted

0x71

数据传输中止

Transfer Data Suspended

0x72

擦除或烧写内存时错误

General Programming Failure

0x73

块序列计数错误

Wrong Block Sequence Counter

0x78

已收到请求,但会晚些响应

Request Correctly Received - Response Pending

0x7E

当前会话下,该子功能不支持

Sub-function Not Supported In Active Session

0x7F

当前会话下,该服务不支持

Service Not Supported In Active Session

0x92

电压过高

Voltage Too High

0x93

电压过低

Voltage Too Low

  • 优先级:0x11 > 0x7F > 0x13 > 0x12 > 0x7E > 0x33 > 0x24 > 0x31 > 0x22 > 0x78

  • 区别:

    • 0x11和0x7F的区别:都是服务不支持,但0x11是整个服务不支持;而0x7F是在某个会话不支持,在其他服务下是支持的。

    • 0x11和0x12的区别:0x11是服务不支持,0x12是子功能不支持。例子:19服务有很多子功能,假设客户不支持0A子功能,那执行19 0A就会回复0x12;假设客户需求不支持23服务,那执行23服务就回复0x11,而且不管你后面传的子功能参数对不对,长度对不对,都是回复0x11

    • 0x12和0x7E的区别:0x12是整个子功能不支持,而0x7E是在当前会话不支持。例子: 19服务有很多子功能,假设客户需求不支持0A子功能,那执行19 0A就会回复0x12;假设10 02服务只在扩展会话下支持,但在默认会话下执行了,就会回复0x7E。

    • 0x7F和0x7E的区别: 0x7F是当前会话下服务不支持,0x7E是当前会话下子功能不支持。

4. 常用服务介绍

操作

Byte0

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

实体

跳转到默认会话

02

10

01

55

55

55

55

55

Tester

跳转到编程会话

02

10

02

55

55

55

55

55

Tester

跳转到扩展会话

02

10

03

55

55

55

55

55

Tester

10服务正响应

06

50

03

00

32

00

C8

AA

ECU

10服务子功能不支持

03

7F

10

12

AA

AA

AA

AA

ECU

硬件复位

02

11

01

55

55

55

55

55

Tester

软件复位

02

11

03

55

55

55

55

55

Tester

请求种子

02

27

01

55

55

55

55

55

Tester

回复种子

06

67

01

B1

B2

B3

B4

ECU

发送密钥

06

27

02

C1

C2

C3

C4

55

Tester

密钥不正确

03

7F

27

35

AA

AA

AA

AA

ECU

启用Rx和Tx应用报文

03

28

00

01

55

55

55

55

Tester

启用Rx且启用Tx网络报文

03

28

01

02

55

55

55

55

Tester

禁用Rx和Tx所有报文

03

28

03

03

55

55

55

55

Tester

保持非默认会话_勿回

02

3E

80

55

55

55

55

55

Tester

开启DTC记录

02

85

01

55

55

55

55

55

Tester

关闭DTC记录

02

85

02

55

55

55

55

55

Tester

关闭DTC记录正响应

02

C5

02

AA

AA

AA

AA

AA

ECU

读取当前诊断会话状态

03

22

F1

86

55

55

55

55

Tester

报告当前诊断会话状态

04

62

F1

86

03

AA

AA

AA

ECU

写入VIN码(17字节)

10

14

2E

F1

90

01

02

03

Tester

21

04

05

06

07

08

09

0A

Tester

22

0B

0C

0D

0E

0F

10

11

Tester

清除全部DTC

04

14

FF

FF

FF

55

55

55

Tester

按状态掩码读取DTC数量

03

19

01

09

55

55

55

55

Tester

按状态掩码报告DTC

03

19

02

09

55

55

55

55

Tester

按DTC号报告DTC快照信息

06

19

04

C1

23

45

88

55

Tester

报告所有支持的DTC

02

19

0A

55

55

55

55

55

Tester

控制权交还ECU

04

2F

D1

D2

00

55

55

55

Tester

暂时取得控制权_开

05

2F

D1

D2

03

01

55

55

Tester

暂时取得控制权_关

05

2F

D1

D2

03

00

55

55

Tester

启动例程

04

31

01

FF

01

55

55

55

Tester

请求下载

10

0B

34

00

44

A1

A2

A3

Tester

21

A4

00

00

00

2F

55

55

Tester

请求下载服务正响应

04

74

20

FF

FF

AA

AA

AA

ECU

传输数据

11

2B

36

01

D1

D2

D3

D4

Tester

请求退出传输

01

37

55

55

55

55

55

55

Tester

5. 快照数据

  • 组成

    • 故障码(DTC): 指示与故障相关的特定代码。

    • 故障数据记录数量: 表示与故障相关的数据记录数量。

    • 故障数据记录: 每个故障数据记录可能包括以下内容:

      1. 数据记录标识: 表示每个数据记录的唯一标识。

      2. 数据记录长度: 表示数据记录的长度,即包含的数据字节数。

      3. 数据: 包含与故障相关的实际数据。这可能是传感器数据、状态信息、错误码等。

      4. 数据标识: 对数据的类型和含义进行标识,以便诊断设备和技术人员可以正确地解释和使用数据。

      5. 数据单位: 表示数据的单位,例如温度的单位可以是摄氏度或华氏度。

      6. 时间戳: 表示数据记录的时间戳,用于确定数据记录的时间。

      7. 数据状态: 表示数据的状态,例如数据的有效性、可靠性等。

5. DID

  • 说明

代表着特定的数据标识符。DID用于标识和获取ECU中的特定参数数据,如传感器数据、状态信息等。通过使用DID,诊断工具可以准确地获取所需的数据,从而帮助诊断人员更好地了解车辆的状态和性能。

  • 组成

    • 标识符:标识符是一个唯一的数字或字母组合,用于标识特定的数据项。不同的车辆制造商和标准组织可能会定义自己的标识符格式和规范。

    • 参数:参数是与标识符相关联的具体数据项。它可以是传感器数据、状态信息、故障码等。参数的具体含义和格式取决于标识符的定义和上下文。

  • 应用

    • 读取传感器数据:通过特定的DID,诊断工具可以读取车辆各个传感器的数据,如发动机冷却液温度、车速、油压等。这些传感器数据对于故障诊断和性能评估非常重要。

    • 检查ECU状态:DID可以用于检查车辆的电子控制单元(ECU)的状态和健康状况。通过读取特定的DID,诊断工具可以获取ECU的工作状态、故障码和运行参数,以评估ECU的性能和健康程度。

    • 读取故障码:DID可以用于读取车辆的故障码,这些故障码记录了车辆系统中的问题和故障。通过读取故障码,诊断工具可以了解车辆存在的问题,并进行相应的故障排查和修复。

    • 清除故障码:诊断工具可以使用特定的DID来清除车辆的故障码。一旦故障得到修复,清除故障码可以重置车辆系统,并确认故障已被解决。

    • 读取冻结帧数据:通过特定的DID,诊断工具可以读取车辆在特定事件发生时记录的冻结帧数据。这些数据可以帮助诊断人员了解事件发生时车辆各个系统的状态和参数,从而更好地了解故障的原因。

  • 服务

    • 读取数据服务(Read Data Service) - SID: 0x22

    • 读取扩展数据服务(Read Extended Data Service) - SID: 0x23

    • 读取数据标识符列表服务(Read Data Identifier List Service) - SID: 0x2C

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶小破孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值