UDS诊断笔记

常见缩写

  • ECU: 电 子 控 制 单 元
  • UDS:Unified Diagnostic Service( 统 一 诊 断 服 务 )
  • SID:Service Identifier(服 务 标 识 符 )
  • DID:Data Identifier(数 据 标 识 符 )
  • DTC:Diagnostic Trouble Code(故 障 诊 断 代 码 )
  • NRC:Negative Response Code(否 定 响 应 码 )
  • EOL:End Of Line(下 线 )
  • ISO:International Standards Organization(国际标准组织)
  • NA:Not Applicable(不适用)
  • NRC: 否定响应代码
  • USDT: Unacknowledged Segmented Data Transfer(不需响应的分段数据传输)
  • APP: Application(应用程序)
  • FBL: Flash Boot Loader(刷写引导程序)
  • OBD: 车辆诊断连接接口

简介

UDS本质上是一系列服务的集合。UDS的服务包含6大类,共26种。每种服务都有自己独立的ID,即SID(Service Identifier)。

UDS本质上是一种定向的通信,是一种交互协议Request/Response)
在这里插入图片描述

Tester发给ECU的数据,应包含 SID,且SID处于该 应用层数据 的第一个字节。

  • 如果是肯定的响应(Positive Response)首字节回复[SID+0x40]外,其他字节根据服务返回;例如,请求0x10,响应返回0x50
  • 如果是否定的响应(Negative Response)首字节回复0x7F第二字节回复刚才询问的SID第三字节NRC(否定响应码),代表否定的依据

在这里插入图片描述

  • 如上图,TesterECU 发送的数据 为 02 10 01 AA AA AA AA AA
    • N_PCI = 02, 表示 此帧为单帧有效数据长度2
    • N_Data = 10 01, 表示 Tester 发送的有效信息,请求ECU进入默认会话
    • AA AA AA AA AA自定义自动填充数据
  • ECUTester 响应的数据 为 06 50 01 00 32 01 F4 CC
    • N_PCI = 06, 表示 此帧为单帧有效数据长度6
    • N_Data = 50 01 00 32 01 F4, 50 =[SID+0x40], 后面为该服务返回数据
    • CC 为自定义自动填充数据

UDS寻址模式

1. 物理寻址(点对点、一对一)

根据物理地址的不同进行访问,但只能访问(通过CAN ID访问)单个ECU节点,TesterSA源地址,ECU作为TA目标地址

2. 功能寻址(广播、一对多)

根据功能的不同进行访问,它能访问(通过CAN ID访问)多个ECU节点,对于标准帧来说,通常是0x7DF,也就是说本网络中所有ECU都要对这条指令做出响应,即一对多模式

每个ECU 都有2个 CAN的诊断帧ID,分别对应物理寻址时 ECU发到CAN线上的报文CAN ID和处理指定CAN ID的数据报文

通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息

3. 功能寻址使用场景举例

  1. 刷写前使用0x85(ControlDTCSetting)服务关闭ECU故障检查功能
  2. 刷写前使用0x28(CommunicationControl)服务对某些ECU禁言
  3. 使用0x14(ClearDiagnosticInformation)服务清除多个ECU DTC等

UDS报文格式

在这里插入图片描述

UDS协议栈

UDS协议栈主要分为网络层和应用层两大部分
在这里插入图片描述

网络层

为了解决ISO 11898 协议中的经典can数据链路层与UDS 应用层 ISO 14229 协议中定义的应用层,彼此的数据长度不一样问题。经典can数据链路层最大支持8字节,但 ISO 14229 不仅仅支持can总线设计的,其最大容量是达到4095字节

例如,UDS应用需要发送20字节数据信息,而 经典CAN不能一帧报文处理完,需要3帧才能发送完毕。那么如何将多字节数据通过can进行有效,有序的传输呢?ISO 15765-2 由此而生。

网络层功能

  • 应用层诊断服务can数据帧的转发;
  • 多帧数据传输,进行数据的打包、解包,协调上下层工作;

网络层协议

N_PDU(网络层协议数据单元) 一般包含3个领域,N_PDU: { N_AI, N_PCI, N_Data }

参数名称缩写描述
寻址信息N_AI隐含源地址、目标地址和寻址方式信息
协议控制信息N_PCI用于标识N_PDU帧类型
数据N_Data包含应用层数据A_Data

网络层对于N_PDU分为单帧(SF)首帧(FF)流控帧(FC)连续帧(CF)这四种类型,每种类型是通过协议控制信息(N_PCI)进行区分的,每一个N_PDU都只有一个N_PCI。通常对于CAN诊断来说,就可以通过识别每条CAN帧数据域的 首个字节 来确定它属于四种类型中的哪类。

N_PDU类型N_PCI (Byte1 - Byte 8 / 64)
Byte 1Byte 2Byte 3
Bit 7-4 Bit 3-0
单帧(SF) N_PCI Type = 0 SF_DL <= 7 N_Data
首帧(FF) N_PCI Type = 1 7 < FF_DL <= 4095 N_Data
流控帧(FC) N_PCI Type = 3 FS BS STmin
连续帧(CF) N_PCI Type = 2 SN (0-F循环计数) N_Data

网络层分为单帧和多帧,单帧(SF)就是一帧can报文8字节内就可以把uds数据处理完毕。多帧就是一帧can报文8字节内处理不完,需分为首帧(FF),流控帧(FC),连续帧(CF)来处理。网络层还有时间参数,如N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs。后续网络层会详细讲解。

1. 单帧 SF(Single Frame)

单帧 顾名思义就是一帧can报文就可以处理完uds服务

2. 首帧 FC(First Frame)

发送方发送 N_Data 数据过长 时,则需要拆分成多帧报文 被拆分后的报文需要通过多个N_PDU来发送,而接收方接收到多个N_PDU信息后进行重组。
发送方发送多帧时,需要先发送首帧来告知接收方有多少字节数要发送到接收方。

3. 流控帧 FC(Flow Control Frame)

UDS多帧通讯时:

  1. 发送方 发送首帧FF 给接收方。
  2. 接收方接收到首帧, 解析首帧
  3. 接受方根据自身条件判断后(如:接收数据缓存大小,接收数据快慢能力,当前是否可以接收数据等), 回复一帧流控帧FC给发送方。
  4. 发送方根据接收到接收方的流控帧FC来决定后续的操作。

FS (Flow State) 流状态:

  • 0 : 继续发送
  • 1 : 等待
  • 2 : 溢出,即第一帧中的FF_DL信息的长度超过接受实体缓冲区的大小)

BS 表示 块大小(允许一次可连续发送连续帧 CF 的次数)
STmin 表示 发送方发送连续帧 CF 与连续帧 CF 间的最小间隔时间

4. 连续帧 CF(Continuous Frame)

发送方发送首帧FF,然后接收到接收方的流控帧FC后,若条件允许可继续发送信息,则需根据连续帧CF的控制信息格式来发送信息。

对于所有的拆分信息,SN开始于0。第一帧应当分配值为0。 虽然第一帧 N_PCI 没有明确表示出序列号,但是应该将首帧当作0号序列对待,第一个流控帧FC后的 连续帧SN设置为1,同一拆分信息上,每一个新增的连续帧顺序号SN增1,连续帧顺序号SN的值不受流控帧的影响,当连续帧顺序号SN值为0x0F时,下一个连续帧中将顺序号SN重置为0。

定时参数

网络层定义了N_ArN_AsN_BrN_BsN_CrN_Cs六个时间参数

定时参数描述
N_As发送方数据帧经数据链路层发送的时间
N_Ar接收方数据帧经数据链路层发送的时间
N_Bs发送方接收流控制帧的等待时间
N_Br接收方发送流控制帧的间隔时间
N_Cs发送方发送连续帧的间隔时间
N_Cr接收方接收连续帧的等待时间
  • N_As超时:发送方没有及时发送N_PDU
  • N_Ar超时:接收方没有及时发送N_PDU
  • N_Bs超时:发送方没有接收到流控帧。
  • N_Br超时:接收方没有发出流控帧。
  • N_Cs:即STmin,发送两个连续帧需要等待的最短时间,N_Cr最大1000ms
  • N_Cr超时:接收方没有收到连续帧。

UDS诊断服务

1. 诊断和通信管理功能单元

序号ID服务说明服务详解
10x10Diagnostic Session Control
(诊断会话控制)
客户端请求通过服务器控制会话点击此处跳转
20x11ECU Reset
(ECU重置)
客户端强制服务器执行重置点击此处跳转
30x27Security Access
(安全访问)
客户端请求解锁受保护的服务器点击此处跳转
40x28Communication Control
(通信控制)
客户端控制服务器内通信参数的设置(例如,通信波特率)点击此处跳转
50x3ETester Present
(测试仪 保活)
客户端向服务器发送其仍处于保活状态消息点击此处跳转
60x83Access Timing Parameter
(访问计时参数)
客户端使用该服务来读取/修改 有效通信的计数参数点击此处跳转
70x84Secured Data Transmission
(受保护的数据传输)
客户端使用该服务来执行具有扩展数据链路安全性的数据传输点击此处跳转
80x85Control DTC Setting
(控制DTC设置)
客户端控制服务器内DTC设置点击此处跳转
90x86Response On Event
(基于事件响应)
客户端请求设置/控制 服务器内的事件机制点击此处跳转
100x87Link Control
(链路控制)
客户端请求控制通信波特率点击此处跳转

2. 数据传输功能单元

序号ID服务说明服务详解
10x22Read Data By Identifier
(按标识符读取数据)
客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的当前值点击此处跳转
20x23Read Memory By Address
(按地址读取内存)
客户端请求读取给定范围的当前值点击此处跳转
30x24Read Scaling Data By Identifier
(按标识符读取换算数据)
客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的换算信息点击此处跳转
40x2ARead Data By Periodic Identifier
(按周期性标识符读取数据)
客户端请求调度服务器中的数据供周期性传输点击此处跳转
50x2CDynamically Define Data Identifier
(动态定义数据标识符)
客户端请求动态定义后续可能成为 22 服务所读取的数据标识符点击此处跳转
60x2EWrite Data by Identifier
(按标识符写数据)
客户端请求写入通过给定 Data Identifier(数据标识符)所指定的记录点击此处跳转
70x3DWrite Memory By Address
(受保护的数据传输)
客户端请求改写给定的内存范围的值点击此处跳转

3. 存储数据传输功能单元

序号ID服务说明服务详解
10x14Clear Diagnostic Information
(清除诊断信息)
允许客户端从服务器中清除诊断信息(包括DTC 和捕获的数据等)点击此处跳转
20x19Read DTC Information
(读取诊断信息)
允许客户端从服务器中请求诊断信息(包括DTC 和捕获的数据等)点击此处跳转

4. IO 控制功能单元

序号ID服务说明服务详解
10x2FInput Output Control By Identifier
(按标识符输入输出控制)
客户端请求服务器控制特定 输入/输出点击此处跳转

5. 例程功能单元

序号ID服务说明服务详解
10x31Routine Control
(例程控制)
客户端请求启动、停止服务器的例程,或请求例程结果点击此处跳转

6. 上传下载功能单元

序号ID服务说明服务详解
10x34Request Download
(请求下载)
客户端请求从客户端向通过服务器传输数据点击此处跳转
20x35Request Upload
(请求上传)
客户端请求从服务器向客户端传输数据点击此处跳转
30x36Transfer Data
(传输数据)
客户端向服务器传输数据(下载)或请求服务器传输数据(上传)点击此处跳转
40x37Request Transfer Exit
(请求传输终止)
客户端请求传输终止点击此处跳转
50x38Request File Transfer
(请求文件传输)
客户端请求在服务器和客户端之间传输文件点击此处跳转

引用与参考

  • https://zhuanlan.zhihu.com/p/502441990
  • https://blog.csdn.net/weixin_48498880/article/details/126443147
  • https://blog.csdn.net/weixin_48498880/article/details/128255219
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值