UDS与Doip 知识框架整理
UDS(Unified Diagnostic Service)
1、概念
由ISO14229协议规定,使用诊断测试仪(客户端)控制车载电子单元(ECU,服务端),实现电子喷油喷射、自动变速和防抱死制动系统工作等等。
简单的意思就是外部设备与ECU的通信协议,可以与ECU进行交互,但是不是传输数据的链路,传输数据的协议由ISO15765协议规定。
下文中服务器指下位机或者ECU。
- 诊断数据:
测试人员修改可以位于电子控制单元存储器中的数据,诊断数据包括模拟输入和输出,数字输入和输出,中间值和各种状态信息。诊断数据示例包括车速、油门角度、后视镜位置、系统状态等。
三种类型为诊断数据定义的值:
1、电流值:电子控制单元正常操作当前使用的值;
2、存储值:在特定时刻(例如,当故障发生或
定期);本副本在电子控制单元的控制下制作;
3、静态值:例如VIN。
服务器不保留诊断数据,测试人员可以只保留请求的当前值。
- 诊断程序:
它是一种嵌入在电子单元内部的一种程序,通过客户端的请求可以开启相应的服务。
- 诊断服务:
客户端请求服务器进行信息交换,目的是需要从服务器获取诊断数据,或者对服务器进行某种操作,
- 诊断会话:
服务器中的状态,其中启用了一组特定的诊断服务和功能。意思就是某种特定的诊断操作需要进入特定的会话才能正确执行,否则就会出现该会话模式不支持该操作的提示。
比如常见的刷APP程序,需要在编程会话模式中才可以执行,要不然随便一刷就刷掉原始代码了,不安全。刷APP代码需要在Boot Software中进行。
Boot Software:在ECU上电或复位后立即执行,其主要目的是以检查有效的应用程序是否可用以执行,而不是将控件转移到重编程软件,意思就是如果重编程软件(也成为APP程序)不可以执行,则直接不进行跳转,只在Boot软件中。
在一些NXP的芯片中,自带固件,会扫描一些区域是否有可执行文件,会跳到相应的区域去执行。比如可以执行不带Boot软件的APP程序。
- 诊断故障代码:DTC(diagnoise trouble Code)
由车载诊断系统识别的故障状态的数字通用标识符,就是车载故障的编码。
- ECU:电子控制单元,一个功能模块的控制器,比如车门ECU、车窗ECU、调速ECU。
2、UDS框架图
-
可以通过多种通讯手段进行诊断(数据交互),比如CAN、IP和Lin等,DoCAN即Diagnosis on CAN,不同的通讯协议对应着不同的定义说明,在不同14229协议中比如14229-5,定义了车载以太网,即diagnosis on internet
-
应用层服务通常被称为诊断服务。应用层服务是用于基于客户机-服务器的系统,在车辆车载服务器执行测试、检查、监视或诊断等功能。客户端(通常称为外部测试设备)使用应用层
请求在一个或多个服务器上执行诊断功能。服务器,通常是一个功能,它是ECU的一部分,使用应用层服务提供诊断服务的响应数据返回到客户端。 -
客户端通常是一个外部测试人员,在同一车辆系统中可能有多个客户端。诊断应用层的服务访问点提供许多服务,这些服务都具有相同的一般结构。
-
服务标识符:Service Identifier(SI)
0x10-0x3E、0x83-0x88、0xBA-0xBE 请求服务
0x50-0x7E、0xC3-0xC8、0xFA-0xFE 积极响应 -
7F 否定响应服务标识符
-
请求分为物理请求和功能请求,物理请求像单个设备请求诊断,功能请求类似广播请求。
-
功能请求不回复部分否定响应。
-
否定响应分为:SNS(不支持该服务)、SNSIS(该会话不支持该服务)、SFNS(不支持该子函数)、SFNSIAS(在该会话不支持该子函数功能)和ROOR(请求超出范围)
注意:否定响应中 78表示等待。比如 0x7F 0x27 0x78
-
通用服务器响应流程
首先进行多个否定响应的判断
0x21:服务器忙
0x11:不支持该服务
0x7F:在该会话模式不支持该服务
0x33:在服务器未解锁的状态访问,
0x31:不支持该服务的子功能
然后正确解析服务,并执行操作
3、接下来介绍具体的服务
3.1、诊断以及通信管理功能
3.1.1 诊断会话模式:0x10
诊断会话在服务器中启用一组特定的诊断服务或功能。服务器始终仅存在一个活动的诊断会话。服务器应始终启动默认值开机时进行诊断会话。如果没有启动其他诊断会话,则默认诊断只要服务器通电,会话就应该一直在运行。
在不同的会话模式,可以进行特定的诊断功能,比如在扩展会话模式,可以禁止通讯,其他模式下就不可以。
-
子功能服务标识符:01 默认会话
服务器中的默认诊断会话,并且不支持任何诊断应用程序超时处理规定(例如,不需要TesterPresent服务来保持该会话处于活动状态)。
服务器在发送DiagnosticSessionControl肯定响应消息后,应停止当前诊断会话,并在此后启动新请求的诊断会话。 -
子功能服务标识符:02 编程会话
此diagnosticSession主要的功能就是对下位机进行编程,俗称刷APP程序
如果服务器在引导软件中运行programmingSession,则只能通过ECUReset(0x11)服务保留programmingSession。
如果服务器在APP中运行编程会话,则服务器会复位,然后在引导程序中运行编程会话。
可以执行擦除代码,刷写代码等服务(0x31 0x34 0x36)
- 子功能服务标识符:03 扩展会话
该DiagnosticSession可用于启用支持功能调整所需的所有诊断服务。 它也可以用于启用诊断服务,这些服务不专门与功能调整相关。
- 子功能服务标识复:04 安全系统诊断会话
可以执行所有与诊断相关的服务功能函数。
诊断仪发送10 03,然后服务器返回50 03 ,代表成功进入扩展模式,可以进行一些操作,比如安全访问,禁止DTC,禁止通信等。
CAN通讯一次只能发送8个字节,第一个字节代表有效字节数,00 32 01 F4 需要看具体的参数意义。
其否定响应码主要有 12 13 22
12:不支持该子函数,比如在默认会话模式 就不支持直接跳转到编程会话,否则返回否定响应
13:消息长度错误
22:当前状态不支持该会话模式,比如在无BootLoader的APP程序中,执行10 02,就会返回22。
如果执行该指令需要的时间较长,则下位机(服务器)就会先返回78,让诊断仪等待,然后再返回正确的响应数据。