前言:重点学习ISO 15765-2和ISO 14229-1的协议内容,之后可以将Git上的开源UDS协议栈移植到你熟悉的嵌入式平台上,进行数据收发;或使用CAN盒与支持UDS诊断的设备进行数据收发,对UDS有一个大致的认识。
# 一、UDS介绍 UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议。可在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现。UDS协议的应用层定义是==ISO 14229-1== 1.1 UDS数据交互简介
- UDS诊断有6大类(26种),每种都有独立的诊断SID。
- 肯定响应:回复[SID+0x40],如请求10,响应50;请求22,响应62(SID在首字节)
- 否定响应:回复7F+SID+NRC(前3字节)
- Diagnostic Session Control(诊断会话),
- Clear Diagnostic Information(清除诊断信息),
- Read DTC Information,
- Read Data By Identifier(通过ID读数据),
- Security Access(安全访问),
- E Write Data By Identifier(通过ID写数据),
- $3E Tester Present(待机握手)。
(小于0x10的服务是OBD协议中)
因为权限问题将$10诊断分了三个模式
-
1)Default默认会话
默认会话权限最小,可 *** 作的服务少 -
2) Extended扩展会话
扩展模式通常用于解锁高权限诊断服务,例如写入数据/参数、读写诊断码 -
3) Programming编程会话
编程模式用于解锁bootloader相关的诊断服务,即程序烧录。(不具备扩展模式的某些权限)
ECU上电时,进入的是默认会话(Default)
如果您进入了一个非默认会话的状态,一个定时器会运转,如果一段时间内没有请求,那么到时间后,诊断退回到默认会话01(最低权限)。当然,我们有一个$3E的服务,可以使诊断保持在非默认的状态
请求命令有4种构成方式:(和下面的不同,没看明白)
- SID,
- SID+SF(Sub-function),
- SID+DID(Data Identifier)(读写用),
- SID+SF+DID
NRC:Negative Response Code(否定响应码)。如果ECU拒绝了一个请求,它会回应一个NRC。不同的NRC有不同的含义。
实例:以CAN总线网络举例
- 八个数据字节,第一字节被网络层占用。
请求(Request):
02 10 02 xx xx xx xx xx
02中的0代表网络层单帧SF,2代表 数据域有2个字节;10是SID,02是子功能。
肯定响应:
02 50 02 xx xx xx xx xx
02同上,10+40表示对SID的肯定回复,02是子功能。
否定响应:
03 7F 10 22 xx xx xx xx;
03同上,7F表示否定响应,10是SID,22是NRC。
2.2 $3E待机握手实例:
2.3 $27安全访问02 3E 80 00 00 00 00 00,
发送一个3E服务的报文,保持非默认会话状态。80表示无需回复。
未完待续
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)