1DcM功能简介
诊断通信管理(Diagnostic Communication Manager, DCM)模块作为AutoSar诊断模块的重要组成部分,主要负责诊断数据流和管理诊断状态,包括诊断会话、安全状态及诊断服务分配等。
主要功能贯穿汽车的开发生产及售后等过程,如开发过程中EMC、DV等实验均可使用诊断服务实现,生产过程中的软件下载更新、ECU产线EOL、汽车产线EOL等、售后过程中读取DTC、控制输出调试功能等。
DCM模块相关的标准主要包括三部分:ISO 14229(UDS,DCM遵循的主要标准)、ISO 15031(ISO 15031 (1-7))及SAEJ1939(OBD,与OBD相关的$01 -$0A服务)。
从网络分层角度看,DCM模块属于上层模块,主要位应用层提供服务。主要包括5-7层,包括会话层服务及应用层等,会话层包括服务定时及服务分配等,应用层为具体的服务功能实现.
在AUTOSAR架构中,Dcm(Diagnostic Communication Manager)模块位于通信服务层。Dcm模块是独立于具体的网络的(不依赖于具体的CAN,Lin,Eth,Flexray等网络来实现)。PduR模块为Dcm模块提供独立于具体网络的接口。Dcm模块从PduR模块接收诊断信息,Dcm模块在内部处理和检查诊断消息。作为处理所请求的诊断服务的一部分,Dcm将与其他BSW模块或SW-Components(通过RTE)交互,以获取所请求的数据或执行所请求的命令。诊断服务处理与特定的服务请求强绑定(不同的诊断请求依赖于不同的一个或几个模块来实现)。通常,Dcm将汇集收集到的信息,并通过PduR模块发送回消息。
2DcM与其他模块的依赖关系
Dcm和Dem的交互:DEM模块提供了检索与故障内存相关的所有信息的功能,以便Dcm模块能够通过从故障内存中读取数据重新响应测试人员的请求,通俗的讲就是Dcm能够读取Dem记录的DTC信息。
Dcm和PduR的交互:PduR模块接收和发送诊断数据。PduR为Dcm模块提供一个与具体通信协议无关的接口。
Dcm和ComM模块的交互:Dcm模块可以指示状态“活动”和“非活动”用于诊断通信。Dcm模块提供了处理通信需求“完全/静默/无通信”的功能。此外,Dcm模块提供了在ComM模块要求时启用和禁用诊断通信的功能。
SWC通过和RTE接口和Dcm交互:Dcm模块在完成诊断功能的时候需要通过RTE接口来读写/函数调用其他SWC的数据/服务。
BswM和Dcm模块的交互:如果Dcm的初始化是从引导加载程序跳转的结果,则Dcm通知BswM应用程序已更新。Dcm也向BswM指示通信模式的改变。
3DcM功能描述
3.1DcM分层
诊断通信管理(DCM)主要包括三个子模块:诊断服务层(Diagnostic Service Layer,DSL)、诊断服务调度(Diagnostic Service Dispatcher, DSD)、诊断服务处理(Diagnostic Service Processing, DSP)
Diagnostic Service Layer:确定诊断数据请求和响应的数据流;监控和确保诊断请求和响应的时序,管理诊断状态(特别是诊断会话和安全状态)。
Diagnostic Service Dispatcher:接收到的诊断请求转发给数据处理器;当数据处理器触发时,通过PDUR传输诊断响应。
Diagnostic Service Processing:处理实际的诊断请求。
3.2DcM之诊断会话层(DSL)
DSL模块主要用于诊断请求的处理及诊断时序的控制等,具体存在几个功能如下:处理诊断请求, 处理诊断响应, 管理安全等级, 会话状态处理, 诊断协议处理, 通信模式处理。
3.2.1将请求从PduR模块转发到DSD子模块
带有诊断属性的PDU到达PduR模块后,PduR调用Dcm_StartOfReception,通知Dcm模块接收的数据大小,并提供第一帧或单帧的数据,如果数据规模溢出缓冲区大小,或者请求的服务不可用允许Dcm拒绝接收诊断数据。PduR模块之后调用Dcm_CopyRxData函数请求Dcm模块拷贝数据到Dcm buffer。
如果DCM模块接收诊断请求(Dcm_StartOfReception,函数返回成功),PduR模块就会调用Dcm_TpRxIndication通知到Dcm模块诊断请求接收完成。
3.2.2维持诊断功能在线(保活逻辑)
DSL子模块需要实现诊断会话在线功能,测试者通过物理寻址方式发送0x3E 80诊断请求,DSL接收到0x3E 80的请求后需要维持当前的诊断会话不退出(通过重置超时计数器S3Server)。
3.2.3将DSD子模块的响应转发到PduR模块
DSD模块准完成诊断响应后会向DSL模块请求发送诊断响应报文。PduR模块接收到请求后调用调用PduR_DcmTransmit()函数发送数据,数据发送后,PduR模块调用Dcm_TxConfirmation()函数通知Dcm模块数据发送结果。
3.2.4通用连接处理
以CAN网络上的通用诊断连接处理为例。CAN网络上的每个ECU节点内部都会记忆两个诊断请求ID,物理寻址请求ID和功能寻址请求ID。
示例:Tester为连接到CAN网络上发送诊断请求的上位机,可发送任意诊断报文。ECU_A本地配置的物理寻址ID为0x728,功能寻址ID为0x7DF。ECU_B本地配置的物理寻址ID为0x72E,功能寻址ID为0x7DF。
物理寻址:1:1的单播诊断请求。Tester发送物理寻址ID为0x728的诊断请求时只有ECU_A会响应。
Tester发送物理寻址ID为0x72E的诊断请求时只有ECU_B会响应。
功能寻址:1:n的广播诊断请求。Tester发送功能寻址ID为0x7DF的诊断请求时ECU_A和ECU_B都会响应。
更多详细信息,请查看下面的文章。