什么是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。


本文由编辑推荐,原出处:https://www.eet-china.com/mp/a123079.html