转载UDS 诊断测试,超全
UDS
UDS基本概念
OSI模型
UDS(Unified Diagnostic Services,统一诊断服务)是汽车电子设备中电子控制单元(ECU)环境中的诊断通信协议,在ISO-14229中规定。
ISO-14229在OSI七层模型中的位置如下图:
诊断交互方式
诊断是以服务为基础的两方交互数据和命令的过程,一方是Request,另一方是Response,下面是Request和Response的基本格式:
Request基本格式有两种:
SID + Parameter
SID + SubFunction + Parameter
Response基本格式有两种类型:
Positive Response(Request被正确的执行):
(SID+0x40) + Parameter
(SID+0x40) + SubFunction + Parameter
Negative Response(Request执行错误或者不能在规定时间内完成):
0x7F + SID + NRC
Physical Addressing:物理寻址,诊断仪与单独ECU进行诊断交互。
Functional Addressing:功能寻址,诊断仪与总线上所有ECU进行诊断交互,即广播模式。
SID:Service Identity
NRC:Negative Response Code
Note1:功能寻址下在Request中SubFunction的最高位bit7若置0x01,正响应会被抑制,即不回复正响应,负响应正常回复。
Note2:功能寻址下NRC=SNS (serviceNotSupported), NRC=SNSIAS (serviceNotSupportedIn-
ActiveSession), NRC=SFNS (sub-functionNotSupported), NRC=SFNSIAS (sub-functionNotSupportedIn-
ActiveSession) or NRC=ROOR (requestOutOfRange),负响应会被抑制,即不回复这些负响应,正响应正常回复。
诊断NRC
诊断常用NRC如下:
Byte value | NRC definition | Mnemonic |
---|---|---|
0x10 | generalReject | GR |
0x11 | serviceNotSupported | SNS |
0x12 | subFunctionNotSupported | SFNS |
0x13 | incorrectMessageLengthOrInvalidFormat | IMLOIF |
0x22 | conditionsNotCorrect | CNC |
0x24 | requestSequenceError | RSE |
0x31 | requestOutOfRange | ROOR |
0x33 | securityAccessDenied | SAD |
0x35 | invalidKey | IK |
0x36 | exceedNumberOfAttempts | ENOA |
0x37 | requiredTimeDelayNotExpired | RTDNE |
0x72 | generalProgrammingFailure | GPF |
0x78 | requestCorrectlyReceived-ResponsePending | RCRRP |
0x7E | subFunctionNotSupportedInActiveSession | SFNSIAS |
0x7F | serviceNotSupportedInActiveSession | SNSIAS |
常用诊断服务
诊断会话控制
DiagnosticSessionControl(0x10)
诊断会话控制服务用于在电控单元所支持的诊断会话中转换当前的会话。一个诊断会话使能电控单元的一个特定诊断服务集以及相关诊断功能。某些诊断服务在特定的会话下会限制使用。
诊断功能上电后处于默认会话,当跳转到其他会话时,会启动S3计时器,计时器超时会自动跳转回默认会话,S3计时期间任何服务请求会更新S3计时器重新计时。
ECU重启
ECUReset(0x11)
电控单元复位服务用于要求电控单元根据复位类型参数值来有效执行复位操作。电控单元复位服务的肯定应答报文一般在复位操作执行之前发送。
安全访问
SecurityAccess(0x27)
由于保密、排放或安全的原因,安全访问服务提供一种方法以便访问受限制的数据或诊断服务。该安全方法采用种子和密钥的算法。种子和密钥都为32位(4字节)。
安全访问服务一般会定义最大尝试访问失败次数和达到最大尝试访问失败次数后的延时时间用于防止被破解。
诊断仪与ECU安全访问交互过程:
通讯控制
CommunicationControl (0x28)
通讯控制服务用于开启/关闭电控单元对某些报文的发送或接收。
通讯类型一般为应用报文和网络管理报文。
诊断仪保持连接
TesterPresent (0x3E)
测试工具保持连接服务用于告知电控单元测试工具仍在线。该服务一般周期性发送,用于重置S3server 计时器并维持当前激活的非默认诊断会话。
诊断处理模块同一时间只能处理一个诊断请求,正在处理当前请求时忽略其它所有诊断请求,只有一个例外情况是功能寻址下的诊断已保持连接服务且开启正响应抑制位,即 0x3E 80。
控制DTC设置
ControlDTCSetting (0x85)
控制诊断故障代码设置服务用于停止或重启电控单元设置诊断故障代码。
当接收到子功能参数为“开”的控制诊断故障代码服务请求,会话层时序参数超时(电控单元进入默认会话)或电控单元执行复位操作后,诊断故障代码状态信息应重新开始更新。
通过标志读数据
ReadDataByIdentifier (0x22)
根据标识符读取数据服务用于从电控单元存储器中读取由数据标识符所确定的数据记录值。根据电控单元的支持情况,这些数据记录可能包括模拟输入输出信号、数字输入输出信号、内部数据和系统状态信息。
该服务的请求报文支持一次读取多个数据标识符的数据。
通过地址读内存
ReadMemoryByAddress (0x23)
根据地址读取存储器服务用于从一个连续的地址区域读取数据。该服务一般用于电控单元开发阶段时读取无法通过其它诊断服务获取的数据。
通过标志写数据
WriteDataByIdentifier (0x2E)
根据标识符写入数据服务允许测试工具将数据写入由数据标识符指定的内部存储单元。电控单元应在数据已写入非易失性存储器后发送该服务的肯定应答。
通过地址写内存
WriteMemoryByAddress (0x3D)
根据地址写入存储器服务用于向电控单元的一个或多个连续存储单元写入数据。该服务主要用于电控单元开发阶段时写入无法通过其它诊断服务修改的数据。
清除诊断信息
ClearDiagnosticInformation (0x14)
清除诊断信息服务用于清除一个或多个电控单元存储器中的诊断信息。与具体诊断故障代码相关的故障信息包括:诊断故障代码、诊断故障代码状态、全局快照、局部快照和扩展数据等。
当接收到测试工具发送的控制诊断故障代码设置服务($85)服务关闭设置诊断故障代码后,接收到测试工具发送的清除诊断信息($14)服务后,电控单元应重新开始设置诊断故障代码。
读取诊断信息
ReadDTCInformation (0x19)
读取诊断故障代码信息服务用于从电控单元中读取其存储的诊断故障代码信息。
诊断故障代码长度为两个字节,诊断故障代码状态长度为一个字节。
快照信息是指诊断故障代码设置时记录的一些电控单元此时刻的信息,对故障的修复具有辅助作用。例如全局快照信息可以包括供电电压、里程读数、点火状态和冷却液温度等。
扩展数据信息是一组提供诊断故障代码相关扩展状态信息的数据组,包括故障出现计数器、故障待定计数器、已老去计数器和老化计数器。
读取诊断信息常用子功能如下:
SubFunction | SubFunction definition |
---|---|
0x01 | 根据状态掩码报告诊断故障代码数量 |
0x02 | 根据状态掩码报告诊断故障代码 |
0x04 | 根据诊断故障代码报告诊断故障代码快照记录 |
0x06 | 根据诊断故障代码报告诊断故障代码扩展数据记录 |
0x0A | 报告支持的诊断故障代码 |
通过标志输入输出控制
InputOutputControlByIdentifier (0x2F)
根据标识符控制输入输出服务用于替换输入信号的值、电控单元内部参数或控制电子系统的输出值。
例程控制
RoutineControl (0x31)
程序控制服务用于启动程序、停止程序和请求程序执行结果。一个程序由2个字节的程序标识符表示。
请求下载
RequestDownload (0x34)
请求下载服务用于启动从测试工具到电控单元的数据传输(下载)。当接收到该服务有效的请求报文后,电控单元应擦除请求报文中指定地址范围的存储数据,并在返回肯定应答报文前采取必要的措施,做好接受数据的准备。
传输数据
TransferData (0x36)
传输数据服务用于测试工具向电控单元传输数据(下载)。
该服务请求报文包含参数块序号。该序号用于提高在连续多个传输数据请求过程中发生错误的处理能力。
请求退出下载
RequestTransferExit (0x37)
该服务用于终止测试工具和电控单元之间的数据传输(下载)。电控单元当收到请求退出传输请求报文后一般进行该模块的完整性检查。