DCM功能实现

发布时间 2023-04-11 14:10:29作者: 一条名叫西西的狗

DLC:Data Length Code

 

以下是基于统一诊断服务(UDS)的数据传输模式,实现DCM协议的基本步骤,按照数据服务层(DSL)、数据服务协议层(DSP)和数据传输层(DSD)进行分类:

DSL层:

  1. 建立会话:使用UDS协议中的0x10服务建立诊断会话(Session)。
  2. 诊断会话认证:使用UDS协议中的0x27服务,对诊断会话进行安全认证,确保诊断会话的安全性。

DSP层:

  1. 选择诊断服务:使用UDS协议中的0x22服务,选择需要使用的诊断服务,比如DCM协议。

DSD层:

  1. 执行诊断服务:根据DCM协议中定义的功能需求,使用UDS协议中的0x31服务执行相应的诊断服务。
  2. 结束会话:使用UDS协议中的0x20服务结束诊断会话。

需要注意的是,在DSP层中,可以选择使用多种诊断服务,而在DSD层中,可以执行多种功能。因此,实现DCM协议时应该根据实际需求选择合适的服务和功能,并考虑诊断会话的安全性和数据的完整性。

 

DSL层实现的步骤:

DSL层(数据服务层)是DCM协议中的第一层,它是与物理层交互的最高层。DSL层负责建立和管理诊断会话(Session),并提供安全认证和错误处理等功能。

以下是DSL层实现的基本步骤:

  1. 建立物理连接:DSL层首先要与ECU(电子控制单元)建立物理连接,一般通过OBD(On-Board Diagnostic)插头和诊断仪器进行连接。

  2. 建立诊断会话:使用UDS(Unified Diagnostic Services)协议中的0x10服务,建立诊断会话。在此步骤中,需要选择合适的诊断会话类型,例如默认会话(Default Session)、编程会话(Programming Session)或扩展会话(Extended Session)。

  3. 诊断会话认证:使用UDS协议中的0x27服务,对诊断会话进行安全认证。在此步骤中,需要根据ECU的安全策略进行身份验证和加密等操作,确保诊断会话的安全性。

  4. 处理诊断请求:DSL层接收到诊断请求后,需要对请求进行解析和处理,并调用相应的DSP层服务进行处理。

  5. 错误处理:如果出现错误或异常情况,DSL层需要根据UDS协议的规定进行错误码的返回和错误处理。

  6. 结束诊断会话:使用UDS协议中的0x20服务,结束诊断会话。

需要注意的是,DSL层的具体实现可能会根据应用场景和硬件平台的不同而有所差异。因此,在实现DSL层时,需要根据具体的需求进行相应的开发和调试。

 

DSP层是DCM协议中的数据服务协议层,主要负责定义和管理服务的通信协议。DSP层的实现步骤通常包括以下几个方面:

  1. 定义服务接口:根据协议规范,定义DSP层要提供的服务接口,包括服务编号、服务参数、返回值等内容。

  2. 实现服务接口:根据协议规范,实现DSP层定义的服务接口,包括数据封装、协议解析、数据传输等过程。

  3. 实现协议解析:实现协议解析器,用于解析接收到的请求数据,并调用相应的服务接口进行处理。

  4. 实现数据封装:实现数据封装器,用于将服务返回的数据打包成协议规定的格式,以便发送给请求方。

  5. 实现数据传输:实现数据传输模块,用于将打包好的数据发送给请求方,并接收请求方发送的数据。

以上步骤主要是针对DSP层的实现,具体的实现细节和方式可能因具体的应用场景和需求而有所不同。

 

DCM协议的DSD层实现的步骤如下:

  1. 实现底层通信接口,如CAN总线或者TCP/IP网络通信等;
  2. 实现数据传输的封装和拆包,对数据进行分段传输,并处理数据的丢失和重传;
  3. 实现数据流控制,通过协商传输速率,控制数据的发送和接收;
  4. 实现错误处理机制,如接收到错误帧时的处理策略,以及通信超时的处理;
  5. 实现接口的统一管理,例如定义一个接口类,封装发送和接收数据的方法,供上层协议栈调用。

需要注意的是,DSD层是针对底层通信协议进行实现的,因此实现的细节和具体的应用场景密切相关。例如,在CAN总线中,需要处理的问题和在TCP/IP网络中有很大的差别,因此在实现DSD层时,需要根据具体情况进行调整。