文章目录
- 常见缩写
- 简介
- UDS寻址模式
- 1. 物理寻址(点对点、一对一)
- 2. 功能寻址(广播、一对多)
- 3. 功能寻址使用场景举例
- UDS报文格式
- UDS协议栈
- 网络层
- 网络层功能
- 网络层协议
- 1. 单帧 SF(Single Frame)
- 2. 首帧 FC(First Frame)
- 3. 流控帧 FC(Flow Control Frame)
- 4. 连续帧 CF(Continuous Frame)
- 定时参数
- UDS诊断服务
- 1. 诊断和通信管理功能单元
- 2. 数据传输功能单元
- 3. 存储数据传输功能单元
- 4. IO 控制功能单元
- 5. 例程功能单元
- 6. 上传下载功能单元
- 引用与参考
常见缩写
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
(否定响应码),代表否定的依据
- 如上图,
Tester
向ECU
发送的数据 为02 10 01 AA AA AA AA AA
N_PCI
=02
, 表示 此帧为单帧,有效数据长度为2
N_Data
=10 01
, 表示 Tester 发送的有效信息,请求ECU进入默认会话AA AA AA AA AA
为自定义自动填充数据
ECU
给Tester
响应的数据 为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
节点,Tester
为SA
源地址,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. 功能寻址使用场景举例
- 刷写前使用
0x85(ControlDTCSetting)
服务关闭ECU故障检查功能 - 刷写前使用
0x28(CommunicationControl)
服务对某些ECU禁言 - 使用
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 | |||
---|---|---|---|---|
Byte 1 | Byte 2 | Byte 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多帧通讯时:
- 发送方 发送首帧FF 给接收方。
- 接收方接收到首帧, 解析首帧
- 接受方根据自身条件判断后(如:接收数据缓存大小,接收数据快慢能力,当前是否可以接收数据等), 回复一帧流控帧FC给发送方。
- 发送方根据接收到接收方的流控帧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_Ar
、N_As
、N_Br
、N_Bs
、N_Cr
、N_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
最大1000msN_Cr
超时:接收方没有收到连续帧。
UDS诊断服务
1. 诊断和通信管理功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x10 | Diagnostic Session Control (诊断会话控制) | 客户端请求通过服务器控制会话 | 点击此处跳转 |
2 | 0x11 | ECU Reset (ECU重置) | 客户端强制服务器执行重置 | 点击此处跳转 |
3 | 0x27 | Security Access (安全访问) | 客户端请求解锁受保护的服务器 | 点击此处跳转 |
4 | 0x28 | Communication Control (通信控制) | 客户端控制服务器内通信参数的设置(例如,通信波特率) | 点击此处跳转 |
5 | 0x3E | Tester Present (测试仪 保活) | 客户端向服务器发送其仍处于保活状态消息 | 点击此处跳转 |
6 | 0x83 | Access Timing Parameter (访问计时参数) | 客户端使用该服务来读取/修改 有效通信的计数参数 | 点击此处跳转 |
7 | 0x84 | Secured Data Transmission (受保护的数据传输) | 客户端使用该服务来执行具有扩展数据链路安全性的数据传输 | 点击此处跳转 |
8 | 0x85 | Control DTC Setting (控制DTC设置) | 客户端控制服务器内DTC设置 | 点击此处跳转 |
9 | 0x86 | Response On Event (基于事件响应) | 客户端请求设置/控制 服务器内的事件机制 | 点击此处跳转 |
10 | 0x87 | Link Control (链路控制) | 客户端请求控制通信波特率 | 点击此处跳转 |
2. 数据传输功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x22 | Read Data By Identifier (按标识符读取数据) | 客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的当前值 | 点击此处跳转 |
2 | 0x23 | Read Memory By Address (按地址读取内存) | 客户端请求读取给定范围的当前值 | 点击此处跳转 |
3 | 0x24 | Read Scaling Data By Identifier (按标识符读取换算数据) | 客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的换算信息 | 点击此处跳转 |
4 | 0x2A | Read Data By Periodic Identifier (按周期性标识符读取数据) | 客户端请求调度服务器中的数据供周期性传输 | 点击此处跳转 |
5 | 0x2C | Dynamically Define Data Identifier (动态定义数据标识符) | 客户端请求动态定义后续可能成为 22 服务 所读取的数据标识符 | 点击此处跳转 |
6 | 0x2E | Write Data by Identifier (按标识符写数据) | 客户端请求写入通过给定 Data Identifier(数据标识符)所指定的记录 | 点击此处跳转 |
7 | 0x3D | Write Memory By Address (受保护的数据传输) | 客户端请求改写给定的内存范围的值 | 点击此处跳转 |
3. 存储数据传输功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x14 | Clear Diagnostic Information (清除诊断信息) | 允许客户端从服务器中清除诊断信息(包括DTC 和捕获的数据等) | 点击此处跳转 |
2 | 0x19 | Read DTC Information (读取诊断信息) | 允许客户端从服务器中请求诊断信息(包括DTC 和捕获的数据等) | 点击此处跳转 |
4. IO 控制功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x2F | Input Output Control By Identifier (按标识符输入输出控制) | 客户端请求服务器控制特定 输入/输出 | 点击此处跳转 |
5. 例程功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x31 | Routine Control (例程控制) | 客户端请求启动、停止服务器的例程,或请求例程结果 | 点击此处跳转 |
6. 上传下载功能单元
序号 | ID | 服务 | 说明 | 服务详解 |
---|---|---|---|---|
1 | 0x34 | Request Download (请求下载) | 客户端请求从客户端向通过服务器传输数据 | 点击此处跳转 |
2 | 0x35 | Request Upload (请求上传) | 客户端请求从服务器向客户端传输数据 | 点击此处跳转 |
3 | 0x36 | Transfer Data (传输数据) | 客户端向服务器传输数据(下载)或请求服务器传输数据(上传) | 点击此处跳转 |
4 | 0x37 | Request Transfer Exit (请求传输终止) | 客户端请求传输终止 | 点击此处跳转 |
5 | 0x38 | Request 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