AUTOSAR DCM

AUTOSAR诊断协议栈包含DCM和DEM两个模块,其中DEM负责DTC相关的参数实现(诊断Dem模块介绍),而DCM模模块主要实现UDS和OBD的诊断服务,就是实现之前UDS文章提到的服务和OBD相关的服务。

 

DCM模块主要负责处理诊断数据流和管理诊断状态,包括诊断会话和安全状态,DCM模块能检查诊断服务的请求是否满足条件。DCM在AUTOSAR架构中的概略图如图1所示。

图1 DCM模块

 

DCM模块由三个子模块构成,分别是DSL(DiagnosticSession layer)、DSD(Diagnostic Service Dispatcher)、DSP(Diagnostic Service Processing),其示意图如图2所示。

 

其中DSL用于确定诊断数据请求和响应的数据流;监控和确保诊断请求和响应的时序,管理诊断状态(特别是诊断会话和安全状态)。DSD用于处理诊断数据流。将接收到的诊断请求转发给数据处理器;当数据处理器触发时,通过PDUR传输诊断响应;DSP用于处理实际的诊断请求。

图2 DCM模块内部子模块

 

下面主要针对三个模块进行介绍。

 

DSL(Diagnostic Session layer)

DSL用于处理诊断数据请求和响应的数据流;监控和确保诊断请求和响应的时序。

1.处理诊断请求

当收到诊断请求时,PDUR调用Dcm_StartOfReception()和Dcm_CopyRxData()函数将收到的诊断请求数据放置在DCM模块的Buffer中,然后PDUR调用Dcm_TpTxConfirmation()函数通知Dcm模块接收到了新的诊断请求。

 

2. 处理诊断响应

当需要响应诊断请求时,DSL模块通过调用PduR_DcmTransimit()和Dcm_CopyTxData()将数据传递至PDUR模块,其中PduR_DcmTransimit()函数只是传递长度信息、地址信息,数据是通过Dcm_CopyTxData()函数传递至PDUR模块,当数据传输成功后,PDUR模块通过Dcm_TpTxConfirmation()函数告知DCM数据接收成功。

 

3. 管理安全等级

DSL提供Dcm_GetSecurityLevel()、DslInternal_SetSecurityLevel()两个函数分别用于获取当前的安全等级和设置安全等级。

对于配置层面而言,DSL菜单主要是配置诊断帧,包括物理寻址和功能寻址,单次通信的最大Buffer,以及时间参数,包括回复0x78的时间和为了防止诊断服务异常,允许0x78的最大次数等。

 

DSD(Diagnostic Service Dispatcher)

 

DSD模块负责检查诊断请求的有效性(诊断会话、安全访问级别、应用程序权限的验证),并跟踪服务请求执行的进度。

 

1.检查诊断服务

当DSL接收到新的诊断请求,DSL通过内部接口通知DSD,如图3所示。DSD调用Dcm_GetSesCtrlType()、Dcm_GetSecurityLevel()获取当前的Session和安全等级,DSD模块会在当前Session的“Service Identifier Table”检查诊断请求SID是否在其中,如果不在table中,DSD会发送NRC 0x7F,如果诊断服务支持,但当前Session不支持该子服务,DSD会发送NRC 0x7E;然后检查当前安全等级是否满足条件,如果当前安全等级不支持该诊断请求,DSD会发送NRC 0x33。最后检查数据的长度。

图3 DSL与DSD的交互

2.汇总响应数据

当DSP模块完成诊断请求处理后,DSD负责将整理响应数据。并发送至DSL。

DSD模块将服务标识符(SID)(如果是负反馈,则为0x7F)和响应的数据流添加至“Dcm_MsgContextType”。然后DSD将其传送至缓冲区,并在缓冲区的第一个字节添加SID。

 

对于配置而言,DSD主要是配置所需要实现的服务,以及服务所支持的session以及服执行的安全等级。

 

DSP(Diagnostic Service Processing)

 

DSP用于实现不同服务的处理,当接收到DSD请求处理诊断服务,DSP的处理过程如下:

1、分析接收的请求信息,调用不同的诊断服务实现函数;

2、检查格式以及是否支持所寻址的子功能;

3、获取数据或者调用DEM、SWC或者其他BSW模块的接口。如图4所示。比如0x22和0x2E服务需要调用SWC的数据接口进行读写;0x28需要调用BswM的逻辑实现关闭不同的CAN报文;0x19服务需要调用DEM模块获取快照数据和扩展数据。

4、汇总响应数据。

图4 DSP对外的API

 

对于配置而言,DSP模块配置项比较杂,比如:

1.DID的实现,包括DcmDspData用于配置DID的数据类型,数据长度,以及接口类型;DcmDspDidInfo用于配置DID的读写功能;DcmDspDids用于汇总DcmDspDidInfo和DcmDspData,并且添加DID value。

2.安全等级的实现,包括种子和秘钥的位数、最大的错误访问次数,以及时间参数。

3.Session的配置,包括Session的等级,Session是否支持跳转至Boot,以及时间参数P2 ServeMax和P2* ServeMax。

总体来讲DCM模块主要是实现UDS和OBD诊断服务的实现,但是DCM跟其他模块的交互比较频繁,需要了解诊断服务的机制需要其他模块配合,比如BswM、DEM、EcuM以及SWC等。

本文转自汽车ECU开发公众号  https://mp.weixin.qq.com/s/PuMEuLxovtSwQJwPbGurQA

  • 17
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值