查看原文
其他

AUTOSAR 诊断栈分析(二):DEM

快乐的肌肉 汽车MCU软件设计 2024-03-08


目录

01.DEM概述

02.诊断事件

    2.1 Event上报方式

    2.2 Event状态定义

03.操作循环

04.诊断事件Memory 

05.小结


前一节,我们讲了诊断常见的错误分级分类、上报方式等,简单提了下DEM、FIM,那么接下来我们详细来描述下这几个模块,今天首先聊DEM。


01.DEM概述

DEM,全称Diagnostic Event Manager,是我们做诊断开发时很关键的一个模块,这个模块在AUTOSAR中所处位置如下图:

很明显,它既要服务SWC,还要与BSW保持关联,在错误处理这个环节起到一个承上启下的作用。因此,DEM这个模块功能可以总结如下:

  • 处理来自SWC或者BSW上报的诊断事件

  • 将诊断事件发生时的错误数据保存到NvM

  • 当有诊断事件发生时,根据用户定义通知FIM进行功能降级

  • 和DCM(UDS/OBD)交互,提供错误数据的访问

  • 此外,上图中EcuM用于管理DEM初始化或者pre-shutdown动作等

  • 目前,还新增了IdsM模块用于入侵检测,也要与Dem交互


2.诊断事件

这里我就不按照SWS上面的翻译了,还是给大家举个简单例子吧。

当SWC发现某个执行机构的温度超过了预设值、或者BSW发现某个报文接收超时,我们就可以把其定义为一个诊断事件(Diagnostic event),SWC\BSW通过DEM提供的标准接口把该事件的状态提交给DEM,DEM对其进行处理,因此诊断事件(下文称event)是DEM能够处理的原子单元。

每个event都有自己的event ID用于索引,因此SWC\BSW上报事件状态也是通过这个ID。

2.1 Event上报方式

DEM分别提供了两种方式给BSW和SWC用于通知event,如下:

  • BSW相关event,调用API:Dem_SetEventStatus

  • SW-C相关event,通过调用RTE生成API:Rte_Call_DiagnosticMonitor_xxx_SetEventStatus

第一个API,我们底软工程师其实是最熟悉的,比如报文超时,Dem_SetEventStatus;比如SecOC校验错误,Dem_SetEventStatus;

第二个SWC相关的API,其实也是需要我们去做RTE配置时生成的,有些国产工具没有RTE的,Dem_SetEventStatus也可以直接用。

2.2 Event状态定义

我们知道,并不是所有的event一产生就要确认故障或者清除故障,比如出现了电平的跳变,我们还要对其进行滤波才能确认,当连续10次还是电压超出了阈值,我们这时候通知DEM,该事件发生并且没有通过测试(超过了阈值),如果10次检测发现了电压处于正常范围,那么通知DEM该事件发生了但通过了测试。

因此针对event的状态,DEM提出了如下五种:

STATUS_PASSED 0x00 monitor认为事件确认通过
STATUS_FAILED 0x01 monitor认为事件确认不通过
STATUS_PREPASSED 0x02 monitor认为事件的通过还需要进行滤波,DEM内部来滤波
STATUS_PREFAILED 0x03 monitor认为事件不通过还需要进行滤波,DEM内部来滤波
STATUS_FDC_THRESHOLD_REACHED 0x04

注意这里不要与UDS status bytes(8个bits位)搞混淆,虽然前者状态会影响后者bit状态,但后者是在14229-1中定义的,后续会讲。


03.操作循环

那么什么时候SWC或者BSW开始对诊断事件进行检查了,这里就引出了我们经常听到的操作循环(Operation cycle)。

常见的操作循环定义如下:

  • 点火循环(KL15)

  • 上下电循环

  • OBD驾驶循环

  • ....

我们可以把每个event挂在不同的操作循环上,当某个操作循环开启后,对应的event就可以开始进行事件的状态处理,包括上报事件、当前操作循环的测试成功、当前操作循环的测试失败等等。

示例如下:

在操作循环开启后,即上图的start -> end阶段,此时上报event的测试结果是能被DEM接收的,但一旦操作循坏关闭后,DEM会忽略掉上报结果。

那么如何来开启操作循环了,通常是调用 Dem_SetOperationCycleState(),如果是SWC来开启的,一般也是通过RTE生成接口,如下:

Rte_Call_OperationCycle_IgOn_SetOperationCycleState()

04.诊断事件Memory 

在上面,我们知道当开启操作循环后,对应的event开始检测,一旦发生了检测失败,我们就需要把当时对应的事件以及状态存储到NvM中指定的地方。

所以,首先搞清楚event memory的layout是非常有必要的。

根据AUTSAR规范,event作为当时诊断事件的目击者,存放到memory的内容至少需要包括事件ID、事件关联的数据以及UDS状态,如果有用户自定义的内容,也需要增加。因此,举例如下:

Fault Data主要包括扩展数据信息、冻结帧数据。

扩展数据通一般常用是 保存老化CNT和错误CNT。

冻结帧一般是记录发生故障事件的工况,通常有DID组成,包括车速、温度、电压等。


05.小结

上面,我们简单聊了DEM中比较关键的event、操作循环和存储到memory的事件信息,搞清楚这个对后续我们要继续讲的UDS status位、去抖、老化等至关重要。

往期回顾:

1.汽车标定合集汽车标定文章合集
汽车标定技术--A2L格式分析
汽车标定技术--XCP协议如何支持测量功能
硬核:汽车标定--多周期测量显示异常汽车标定技术--MPC57xx是如何支持标定的页切换2.AUTOSAR合集AUTOSAR OS概述(一)
AUTOSAR OS概述(二)
AUTOSAR 通信栈分析(一)
AUTOSAR 通信栈分析(二)
AUTOSAR中的Crypto Stack(1)--概述
AUTOSAR中的Crypto Stack(二)--CSM数据类型
AUTOSAR 诊断栈分析(一)
AUTOSAR文章合集
Flash模拟EEPROM原理浅析
3.汽车网络安全合集汽车网络安全方案产品交付形态的思考
汽车网络安全方案需求分析
车载信息安全场景概述
汽车网络安全渗透测试概述
汽车网络安全文章合集
汽车信息安全--常见车规MCU安全启动方案
4.汽车功能安全合集
5.汽车虚拟化合集
    汽车ECU虚拟化技术初探(一)
6.杂七杂八
    我为什么开始写技术博客


继续滑动看下一个

AUTOSAR 诊断栈分析(二):DEM

快乐的肌肉 汽车MCU软件设计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存