1.UDS简介
1.1标准介绍
国际标准ISO 14229,基于OSI基本模型实现。如下所示:
应用层(第7层),ISO 14229-1,ISO 14229-3 UDSonCAN,ISO 14229-4 UDSonFR,ISO 14229-5 UDSonIP,ISO 14229-6 UDSonK-Line,ISO 14229-7中规定的统一诊断服务UDSonLIN,进一步补充了ISO 27145-3 WWH-OBD。
表示层(第6层),特定车辆制造商,ISO 27145-2 WWH-OBD。
会话层(第5层),在ISO 14229-2中做了描述。
传输层(第4层),在ISO 15765-2 DoCAN中做了描述,包括FlexRay上的ISO 10681-2通信,ISO 13400-2 DoIP,ISO 17987-2 LIN,ISO 27145-4 WWH-OBD。
网络层(第3层), 在ISO 15765-2 DoCAN中做了描述,在FlexRay上的ISO 10681-2通信,ISO 13400-2 DoIP,ISO 17987-2 LIN,ISO 27145-4 WWH-OBD。
数据链路层(第2层),在ISO 11898-1,ISO 11898-2,ISO 17458-2,ISO 13400-3,IEEE 802.3,ISO 14230-2,ISO 17987-3 LIN和其他标准ISO 27145- 4 WWH-OBD中做了描述。
物理层(第1层),在ISO 11898-1,ISO 11898-2,ISO 17458-4,ISO 13400-3,IEEE 802.3,ISO 14230-1,ISO 17987-4 LIN和其他标准ISO 27145-4中对 WWH-OBD做了描述。
ISO 14229由以下部分组成,总标题为道路车辆 - 统一诊断服务(UDS):
第1部分:规范和要求
第2部分:会话层服务
第3部分:CAN实施的统一诊断服务(UDSonCAN)
第4部分:FlexRay实现的统一诊断服务(UDSonFR)
第5部分:Internet协议实施的统一诊断服务(UDSonIP)
第6部分:K线实施的统一诊断服务(UDSonK-Line)
第7部分:本地互联网络实施(UDSonLIN)上的统一诊断服务
第n部分:统一诊断服务在…实施(UDSon …)
其中ISO-14229 包括ISO 14229-1和ISO 14229-2(会话层服务)两部分。
诊断测试仪(客户端)和电子控制单元(ECU,服务器)基于该协议进行通讯。
OSI诊断模型

1.2使用介绍
1.2.1 常见名词解释
诊断故障码DTC:识别故障状态的数字通用标识码;
永久性DTC:执行DTC清除请求所无法清除的故障信息,存储在非易失性存储器,知道满足特定指令或达到特定标准(如监管);
重新编程软件:部分启动软件允许重新编程ECU;
1.2.2诊断数据类型
常见诊断数据有车速、车门控制、系统状态、镜像位置等。数据类型分类如下所示:
- 当前值/实时值;
- 存储值,如故障状态下存储的信息;
- 静态值,如VIN;
2.诊断报文格式
2.1诊断请求报文

spr=1,ECU不给出正响应;
spr=0,ECU给出正响应;
目的:告诉ECU是否需要发送响应数据;
2.2诊断应答报文

正响应报文:
byte1:response service id = service id + 0x40;
负响应报文:
byte1:response service id = 0x7F;
byte2:spr + sub-function = service id;
byte3:NRC,诊断指令执行失败错误码;
eg:7F 22 13 ;7F代表负响应,22代表服务类型,其中13代表请求消息错误。
否定响应码(NRC):
0x01- 0x0F:暂保留;
0x10:未知错误,服务被拒绝;
0x11:不支持该服务请求;
0x12:不支持子功能;
0x13:消息长度或格式错误;
0x14:请求信息长度超出;
0x15 - 0x20:暂保留;
0x21:服务端正忙;
0x22:条件不满足;
0x23:暂保留;
0x24:请求顺序错误;
0x25:指令已经被接收,但是未被执行;
0x26:失败的操作导致当前操作无法执行;
0x27- 0x30:暂保留;
0x31:参数错误;
0x32:暂保留;
0x33:安全校验未通过;
0x34:暂保留;
0x35:秘钥不匹配;
0x36:已达到解锁最大错误次数;
0x37:超时时间未到;
0x38 - 0x4F:由扩展数据链路安全性保留;
0x50 - 0x6F:暂保留;
0x70:不允许上传下载;
0x71:数据传输中断;
0x72:擦除或烧写内存错误;
0x73:块序列计数错误;
0x74 - 0x77:暂保留;
0x78:收到请求,延迟响应;
0x79 - 0x7D:暂保留;
0x7E:当前会话下子功能不支持;
0x7F:当前会话下服务不支持;
0x80:暂保留;
0x81:RPM太高;
0x82:RPM太低;
0x83:当前引擎正运行;
0x84:当前引擎为运行;
0x85:截止当前时间引擎运行时间太短;
0x86:温度过高;
0x87:温度过低;
0x88:车速过高;
0x89:车速过低;
0x8A:油门/踏板过高(超过了当前要求的最大阈值);
0x8B:油门/踏板过低;
0x8C:变速器档位不在空档;
0x8D:变速器档位不在排档;
0x8E:暂保留;
0x8F:制动开关没有关闭;
0x90:换档杆不在驻车档;
0x91:变矩器离合器锁定;
0x92:电压过高;
0x93:电压过低;
0x94 - 0xEF:暂保留(特定条件下);
0xF0 - 0XFE:为汽车制造商保留;
0xFF:暂保留;
会话状态
3.诊断服务类型
3.1服务类型简述
1.诊断与通信管理;
2.数据传输;
3.存储数据传输,用于操作DTC;
4.IO控制;
5.调用ECU内部预置函数;
6.上传与下载;
3.2服务类型详解
3.2.1 诊断与通信管理
3.2.1.1. 0x10 - DiagnosticSessionControl(诊断通信控制)
解释:请求控制与ECU的诊断会话。
格式:
0x10|SessionType
SessionType-请求消息子功能定义:
0x00 ISOSAEReserved(保留)
0x01 defaultSession(ECU上电后的默认状态)
0x02 ProgrammingSession(进行软件刷写相关的服务)
用于解锁BootLoader相关的诊断服务,即程序烧写;
0x03 extendedDiagnosticSession(诊断启动后接收到10 03转为该状态)
用于解锁高权限诊断服务,如写入数据、参数、读写诊断码;
0x04 safetySystemDiagnosticSession
0x05 – 0x3F ISOSAEReserved(保留)
0x40 – 0x5F vehicleManufacturerSpecific(由整车厂自定义使用)
0x60 – 0x7E systemSupplierSpecific(由ECU供应商自定义使用)
0x7F - ISOSAEReserved(保留)
肯定响应:
0x50|SessionType|SessionParameterRecord.......
否定响应:
0x12:不支持子功能参数;
0x13:消息长度错误;
0x22:不满足请求标准/条件;
3.2.1.2. 0x11 - ECUReset
强制对ECU进行重置。
格式:
0x11|resetType
resetType - 请求消息子功能定义
0x00:保留;
0x01:再次初始化,恢复为上电状态;
0x02:模拟断电重置;
0x03:软件重置,重新启动应用程序;
0x04:进入休眠状态;
0x05:禁止启用“快速关闭电源”功能;
0x06-0x5F:整车厂商自定义
0x7F:保留
肯定响应:
0x51|resetType(0x00-0x7F)|powerDownTime(0x00-0xFF)
powerDownTime:0x00 - 0xFE 254s; 0xFF 表示失败或者时间不可用
否定响应:
0x12:不支持子功能参数;
0x13:消息长度错误;
0x22:不满足请求标准;
0x33:ECU未被解锁,请求重置受到了保护;
3.2.1.3. 0x27 - SecurityAccess
请求解锁安全服务,常用见交互流程:
1.客户端请求种子;
2.服务端发送种子;
3.客户端发送秘钥;
4.服务端验证秘钥有效性,进行解锁与应答;
5.服务端清除上电/复位延迟计数器的内部提示信息;
备注:
1.服务端需要支持延迟计数器,当服务器加电/复位时被锁定时需要延迟,整车厂商选择是否支持延时定时器。
2.requestseed参数值应时钟为奇数,相同安全等级的sendkey参数值=requestseed参数值+1。
3.任何时候,只有一个安全级别处于活动状态。
如requestseed 0x03处于活动状态,Tester端当前与requestseed 0X01安全级别解锁成功,那么Tester只可以与requestseed 0x01关联的安全功能才可以被解锁,requestseed 0x03关联的安全功能将会被关闭(其中安全级别的变编号是任意的)。
4.尝试安全性访问时,不应该阻碍汽车的正常通信与其他诊断通讯。
5.服务器锁定时请求安全服务,安全服务器应支持拒绝。
格式:
0x27| requestseed( 0x01/0x03/0x05/0x07-0x7D)| Data.....
0x27| sendkey (0x02/0x04/0x06/0x08-0x7E)| Data.....
子功能定义:
requestseed与sendkey具有一定的固定关系:
requestseed = 0x01 - sendkey = 0x02
requestseed = 0x03 - sendkey = 0x04
数据参数:
securityKey:由算法依据seed生成的;
securityAccessDataRecord:传输到服务端的seed信息;
肯定响应:
0x67| securityAccessType(0x00-0x7F)| Data.....
否定响应:
0x12:不支持功能参数;
0x13:消息长度错误;
0x22:不满足请求标准;
0x24:应该先发送seed数据,而不是先发送key数据;
0x31:Data为无效数据;
0x35:key比对不成功,校验不通过;
0x36:超过最大试错次数;
0x37:当前服务器处于延时状态;
展示案例:
1. 服务端(ECU)处于“锁定”状态
(1)请求种子
requestseed : 0x27|0x01
service seed : 0x67|0x01|0x36 0x57
(2)发送秘钥
sendkey : 0x27|0x02|0xC9 0xA9
response : 0x67|0x02
2.服务端处于“解锁”状态
(1)请求种子
requestseed:0x27|0x01
service seed:0x67|0x01|0x00 0x00
3.2.1.4. 0x28 - CommunicationControl
打开/关闭某些消息的接收与发送;
格式:
0x28| controlType(0x00 - 0xFF)| communicationType(0x00 - 0xFF)| nodeIdentificationNumber......
controlType:
子功能:
0x00:指定的通信类型未启用数据的接收与传输;
0x01:应启用消息接收,禁用指定通信类型的数据传输;
0x02:应禁用消息接收,启用指定通信类型的数据传输;
0x03:应禁用指定通信类型的数据接收与传输;
0x04:应将寻址总线主机相关的子总线切换到诊断模式;
0x05:应将寻址总线主机相关的子总线切换到程序调度模式;
0x06-0x3F:保留;
0x40-0x5F:整车厂商自定义;
0x60-0x7E:系统供应商自定义;
0x7F:保留;
communicationType:
应用的控制通信类型,允许同时控制多种通信类型。
nodeIdentificationNumber:
用于识别车辆子网络节点。
肯定响应:
0x68| controlType(0x00 - 0x7F)
否定响应:
0x12:不支持子功能参数;
0x13:消息长度错误;
0x22:禁用/启用请求失败(服务器正常模式下使用);
0x31:参数错误;
展示案例:
1.禁用传输网络管理消息请求(当)
0x28| 0x01(第7位为0)| 0x02(网络管理)
0x68| 0x01
2.将远程网络地址为0x000A节点连接到仅诊断调度模式
0x28| 0x04| 0x01| 0x00 0x0A
0x68| 0x04
3.切换到具有增强地址信息的应用程序调度模式,连接到子网络节点0x000A
0x28| 0x05| 0x01 0x00 0x0A
0x68| 0x05
3.2.1.5. 0x3E - TesterPresent
使ECU保持连接状态,并将已机会的诊断服务或者通信保持现有状态。可防止服务端恢复为默认状态。
格式:
0x3E| subFunction(0x00-0x80)
subFunction:
0x00:不支持suppressPosRspMsgIndicationBit子函数值;
0x01 - 0x7F:值保留;
肯定响应:
0X7E| 0X00
否定响应:
0x12:不支持子功能参数;
0x13:消息长度错误;
展示案例:
1.请求消息流程案例
0x3E| 0x00
0x7E| 0x00
2.可定响应消息流程
0x3E| 0x80
无响应由服务器发送


7778

被折叠的 条评论
为什么被折叠?



