概述
AUTOSAR包括诊断协议栈DCM(Diagnostic Communication Manager)和DEM(Diagnostic Event Manager)其中两个模块DEM负责DTC实现相关参数DCM主要实现模块UDS和OBD可参考诊断服务ISO14229相关标准。
。
DCM模块位于AUTOSAR BSW中。DCM为诊断服务提供公共服务API。DCM的作用贯穿于ECU研发、生产到售后全生命周期。
DEM负责处理和存储诊断事件(包括外部可见)DTCs和其他BSW模块报告内部事件)及相关环境数据。DEM给DCM从memory读取所有存储的DTC。DEM应用层等BSW提供接口的模块。
DCM模块介绍
DCM确保诊断数据流和管理诊断状态,特别是诊断会话和安全状态。DCM检查要求的服务是否支持,相应的服务请求是否可以在当前会话中执行。DCM提供了OSI如下表所示,5-7层
在OSI-Layer 7,DCM广泛提供ISO1429-1服务。此外,还提供了部分服务OBD服务。在OSI-Layer 5,DCM处理以下规范的网络独立部分:
- ISO15765-3[4]:实现统一诊断服务(UDSonCAN)
- ISO15765-4[5]:排放相关系统的需求,Chapter 5"Session Layer"
DCM在AUTOSAR该架构位于通信服务层,如下图所示
DCM模块是网络独立的,所有网络规范的功能,如CAN,LIN,FlexRay都在DCM之外处理。PduR模块为DCM该模块提供独立的网络接口。DCM模块从PduR模块接收诊断信息。作为诊断服务的一部分,DCM会与其他的BSW模块或通过RTE与SWC交互获取请求数据或执行请求命令。服务非常特定。通常,DCM收集到的信息并通过PduR模块发回消息。
DCM模块与其他模块模块
- DEM模块提供检索所有与故障存储器相关的信息的功能Dcm该模块可以通过从故障存储器读取数据来响应测试者的要求。
- PduR模块提供发送和接收诊断数据的功能。
- ComM模块提供了一些功能,比如Dcm模块可以指示“活动”和“非活动”状态,以便进行诊断通信。DCM模块提供处理通信请求Full-/Silent-/No-Communication"的功能。
- DCM能够分析接收到的诊断请求数据流,处理所有与诊断通信相关的功能,如协议处理和时间序列。
- 如果Dcm初始化是引导加载程序跳转的结果Dcm通知BswM更新了应用程序。Dcm也向BswM指示通信模式的变化。
- Csm加密服务模块提供各种加密算法。Csm用于认证计算。
- 密钥管理器模块支持证书处理api,认证诊断通过证书实现。
功能规范
通用设计组件
DCM模块组成
DCM由三个子模块组成
- Diagnostic Session Layer(DSL)子模块:确保诊断请求和响应的数据流,监督和确保诊断协议的定期性,并管理诊断状态
- Diagnostic Service Dispatcher(DSD)子模块:负责相应数据处理器的收发诊断请求
- Diagnostic Service Processing(DSP)子模块:处理真实的诊断服务
下图给出了DCM模块中三个子模块的接口关系
负响应码NRC
标准为UDS服务和OBD服务定义了NRCs。这些NRC在数据类型中定义。NRC需要遵循发送顺序ISO14229-1[1]。
参考如下
如有侵权,可联系删除。
存储非易失信息
因为诊断需要存储故障,所以DCM能够访问非易失性存储的能力。
诊断会话层(DSL)
概述
DSL应符合功能ISO14229-1[1]规范和ISO15765-3[4]网络无关部分。
用例
DSL模块应提供以下功能
-
会话处理(需求来自)ISO14229-1[1]和ISO15765-3[4])
-
应用层时序处理(需求来自)ISO14229-1[1]和ISO15765-3[4])
-
标准响应行为(需求来自)ISO1429-1[1]和15765-3[4]
-
各诊断连接的身份验证状态处理(需求来自ISO14229-1:2018)
— 提供每个连接的验证状态
— 转移管理验证状态
与其他模块交互
-
PduR模块
— PduR模块提供接收服务请求的数据
— DSL模块触发诊断响应的输出
-
DSD子模块
— DSL模块通知DSD模块输入请求和数据
— DSD模块触发诊断响应的输出
-
SW-Cs/DSP子模块
DSL该模块提供安全性和访问会话
-
ComM模块
DSL模块保障ComM所需的通信行为
功能描述
DSL提供以下功能
-
请求处理
— 从PduR转发请求到DSD模块
— 并发“TestPresent"
-
响应处理
— 从DSD转发响应到PduR模块
— 确保响应顺序
— 支持周期发送
— 支持ResponseOnEvent发送
— 支持分割响应
— 支持应用触发ResponsePending响应
-
安全等级处理
— 管理安全等级
-
会话状态处理
— 管理会话状态
— 追踪激活的非默认会话
— 允许修改时序
-
处理诊断协议
— 处理不同的诊断协议
— 管理资源
-
通信模式处理
— 处理通信请求(Full-/Silent-/No Communication)
— 诊断激活和非激活指示
— 发送所有类型的诊断
分发诊断服务(DSD)
概述
DSD模块负责检查输入诊断请求的有效性(诊断会话/安全访问等级/应用权限验证),并跟踪请求服务的执行过程。
用例
- 接收请求信息发送正响应信息
- 接收请求消息抑制响应消息
- 接收请求消息抑制负响应消息
- 接收请求消息发送负响应消息
- 发送正响应信息,但没有相应的请求
- 分割响应
DSD与其它模块交互
DSL当子模块收到诊断信息时,调用DSD并执行以下操作
- 处理委托请求DSP模块或者DCM的外部模块
- 处理跟踪请求
- 向应用程序发送响应DSL模块
诊断服务处理(DSP)
概述
当收到DSD需要调用模块的函数DSP在模块处理诊断服务请求时,DSP通常按照以下基本处理步骤进行处理
- 分析接收到的请求信息
- 检查格式以及是否支持寻址功能
- 在DEM、SW-C或其他BSW在模块上获取数据或调用执行所需的函数
- 组装响应数据
UDS服务
DCM支持以下模块UDS服务
[外链图片存储失败,源站可能有防盗链机制,建议直接保存图片(img-CQEMYy9Z-1654562839786)(AUTOSAR DCM模块介绍.assets/image-20220331154331929.png)]
交互用例
DCM支持管理从Application跳转到Bootloader的功能。
Jump to Bootloader
跳转到Bootloader有4种不同的用例,如果所有前置条件都满足且假设设置为
- 应用立即发送一个最终的正响应并且跳转到Bootloader
- 应用首先发送一个NRC 0x78的负响应,然后发送最终的正响应,之后跳转到Bootloader
- 应用立即跳转到Bootloader,在Bootloader里面发送一个最终的正响应
- 应用首先发送一个NRC 0x78的负响应,然后跳转到Bootloader,在Bootloader里面发送一个最终的正响应
注:如果设置为,用例1和3不会发送正响应
Jump due to ECUReset
当接收到ECUReset服务0x11的请求后,如果配置参数设置为,DCM会在Reset之后发送回应;如果配置参数设置为,DCM会在Reset之前发送回应;如果Dcm发起Reset并且设置为TRUE, Dcm将在Reset前触发NRC 0x78 (Response pending)传输。
Jump from Bootloader/ECUReset
在Dcm初始化时,Dcm调用Dcm_GetProgConditions来知道初始化是否是从Bootloader或者ECUReset跳转的结果。
DEM模块介绍
概述
Diagnostic Event Manager(DEM)负责处理和存储诊断事件(包括外部可见的DTCs和其他BSW模块报告的内部事件)和相关的环境数据。DEM给DCM(Diagnostic Communication Manager)模块提供错误信息,比如从memory读取所有存储的DTC。DEM为应用层和其他BSW模块提供接口。
DEM和其他模块的依赖
如下图,DEM和其他模块有以下交互:
- FiM(Function Inhibition Manager)模块对Dem的某些功能进行抑制
- Dcm模块负责UDS服务的执行和诊断通信的处理
- SW-C (Software- components)和BSW (Basic Software)模块可以对Dem进行交互,更新和/或检索当前监控状态和UDS状态信息。
- NVRAM提供存储数据的block,比如DTC或者软件版本号等信息。
- ECU State Manager负责DEM模块的初始化和去初始化
- RTE负责BSW的调度状态机
功能介绍
DEM处理和存储SW-Cs和BSW中diagnostic monitors检测的事件。存储的事件信息通过接口提供给BSW或者SW-Cs使用。这里所说的事件往往是一种错误或者是故障。
诊断事件定义
一个诊断事件表示可以由DEM模块处理的原子单元。诊断事件的状态表示了监控的结果,DEM从SW-C或者BSW模块接收监控的结果。
DEM模块使用事件ID管理诊断事件的状态,执行诊断事件结果需要的动作,比如存储快照信息等。
事件优先级
事件优先级根据事件的重要性进行排序。其用于确定在存储的事件数量超过最大内存条目数量(事件内存已满)的情况下,可以从事件内存中删除哪些故障条目。
优先级值1表示最高优先级。
事件发生计数
DEM每一个事件提供事件发生的计数功能。
事件类型
有两种事件类型,每一个事件的类型可以配置
- BSW相关的事件(通过C-API Dem_SetEventStatus上报事件信息)
- SW-C相关的事件(通过RTE的操作 SetEventStatus上报事件信息)
诊断监测器定义
诊断监测器是一个由组件确定功能的例程实例。监测功能为监测路径识别特定的故障类型(如短路接地、开路负载等)。监控路径表示被监控的物理系统或电路(如传感器输入)。。
由于监测器会执行消抖,所以只有在确认结果(通过或失败)后才会调用报告API。但是如果监测器使用DEM内部消抖状态机,则当检查功能执行被执行后都会调用上报API。
诊断故障码定义
诊断故障码即DTC定义了唯一的ID,与诊断事件一一对应。DEM模块为DCM模块提供DTC相关信息。
DTC类型
有两种类型的DTC
- UDS相关的DTC
- OBD相关的DTC
DTC格式
DTC的格式参考以下标准
- ISO-14229-1[2]
- SAE J2012 OBD DTC(aka 2-byte DTC)[13]
- SAE J1939-73[14]
- ISO 11992-4[15]
- SAE J2012 WWH-OBD DTC(aka 3-byte DTC)[13]
总结
DCM和DEM模块的实现主要是满足ISO15765以及ISO14229相关标准,在熟悉诊断协议栈之前大家先要熟悉相关标准,之后再熟悉此部分内容就比较容易理解。