什么是UDS?
UDS全称为Unified Diagnostic Services,由ISO-14229系列标准定义。
诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能请求和响应之间定义了统一的内容和格式。
常用的诊断服务
下面来简单梳理一些服务的格式。
10服务:DiagnosticSessionControl
10服务的主要功能为ECU诊断状态控制。
常用的sub-function有:
0x01:defaultSession(ECU上电之后,默认状态)
0x02:ProgrammingSession(这个session中可以进行软件刷写的一系列诊断服务)
0x03:extendedDiagnosticSession(在这个session中可执行较多的诊断服务)
27服务:SecurityAccess安全访问
对于安全级别稍微高一些的诊断服务,需要执行27这个安全访问诊断命令,进行一个简单的身份验证。
完成27服务有以下步骤:
1,诊断仪向ECU请求“请求种子”(通常是一个与时间相关的伪随机数);
2,ECU向诊断仪发送“反馈关键字”;
3,诊断仪向ECU发送“Key” (根据反馈关键字和一个本地的密码进行计算得来)
4,ECU判断诊断仪发来的“Key”是否有效
下面举个解锁的例子:
诊断仪发送:27 05
ECU响应 : 67 05 01 01 01(关键字是 01 01 01)
诊断仪发送 : 27 06 02 03 04(key值是02 03 04,seed是 01 01 01,假设本地密码为01 02 03,而算法就是将密码与seed相加)
ECU验证成功 : 67 06
此时ECU就处于unlocked的状态了,那些被保护起来的诊断服务和诊断数据可以被操作了。
28服务:CommunicationControl
该服务用于打开/关闭某些类别的报文的发送/接收。
sub-function:
0x00enableRxAndTx (激活接收和发送)
0x01enableRxAndDisableTx(激活接收和关闭发送)
0x02disableRxAndEnableTx(激活发送和关闭接收)
0x03disableRxAndTx(关闭接收和发送)
communicationType:
0x1:代表普通应用报文;
0x2:代表网络管理报文;
0x3:代表普通应用报文和网络管理报文。
14服务:ClearDiagnosticInformation
14服务主要功能为删除存储在ECU中的DTC
sub-function用于标识将要被删除的DTC种类,UDS规定用FFFFFF表示所有种类的DTC
例 :诊断仪发送:14 FF FF FF(清除所有种类的DTC)
ECU响应: 54(给出positiveresponse)
85服务:ControlDTCSetting
该服务用于控制ECU的DTC存储。
sub-function: 0x01 : on 0x02 : off
19服务:ReadDTCInformation
19服务主要功能为读取存储在ECU中的DTC
sub-function
0x01用于读取符合特定条件的DTC数量。
0x02用于读取符合特定条件的DTC列表。
0x06用于读取某个DTC及其相关的环境数据。
Parameter
Parameter是指DTC的status。
bit0 表示这个DTC是active的还是passive的;
bit4表示这个DTC是否已经被confirm了,如果DTC的状态是confirm,则说明该DTC已经被ECU存储下来了。
比如:
19 02 08这个命令的用途,就是读取所有状态为confirm的DTC的数量。
31服务:RoutineControl
31服务是调用ECU内置的一些操作序列的接口。
sub-function
启动(0x01)
停止(0x02)
查询结果(0x03)
routineControlOptionRecord,用于标识routine执行时所需要的参数,由各家自定义它的内容
例如,假设用0x0801这个ID来代表检查ECU是否满足软件刷写条件(比如车速、转速为0,KL15接通等)的routine。
诊断仪向ECU发送31 01 08 01即可启动0x0801这个routine。
联系客服