AUTOSAR 诊断栈分析(二):DEM
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位、去抖、老化等至关重要。
往期回顾:
汽车标定技术--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.汽车功能安全合集