事件存储概述
事件存储指当事件发生故障时将相关的数据存储到Nvm中,事件存储分为primary event memory 、user defined event memory、mirror event memory和permanent event memory。其中primary event memory和user defined event memory有同样的功能,主要是事件保留、事件优化、老化、内存替换等功能,mirror event memory具备不同的功能,permanent event memory主要处理OBD事件相关的存储。
事件存储管理
事件内存管理流程
Dem模块的内存管理主要包括事件的添加、更新、去除等操作,下图是诊断事件存储的主要流程
事件存储流程
Dem模块事件预留包括记录和处理DTC、UDS status、event related data等功能,具体流程如下图所示。
Dem模块的存储由主触发器和辅助触发器,主触发器包括DemEventMemoryEntryStorageTrigger容器,辅助触发器包括DemFreezeFrameRecordTrigger和DemExtendedDataRecordTrigger等 。
DemEventMemoryEntryStorageTrigger主要功能是事件被存储的时机,具体配置参数如下:
- CONFIRMED:当事件对应的DTC确认(状态位bit3由0到1)时,事件会被存储
- FDC_THRESHOLD:当故障检测计数器超过DemDebounceCounterPreconfirmedThreshold时,事件会被存储
- PENDING:当事件对应的DTC挂起(状态位bit2由0到1)时,事件会被存储
- TEST_FAILED:当事件对应的DTC失败(状态位bit0由0到1)时,事件会被存储
DemFreezeFrameRecordTrigger主要功能是快照被记录的时机,具体配置参数如下:
- FDC:当故障计数器达到阈值时获取快照数据
- CONFIRMED:当confirmed状态标志位由0置1时获取快照数据
- PENDING:当pending状态标志位由0置1时获取快照数据
- TESTFAILED:当testfailed状态标志位由0置1时获取快照数据
- TESTFAILED_FIRST_IN_CYCLE:当testfailed状态标志位由0置1时获取快照数据,一个运行周期只会记录一次快照数据
- FDC_FIRST_IN_CYCLE:当故障计数器达到阈值时获取快照数据,一个运行周期只会记录一次快照数据
DemExtendedDataRecordTrigger主要功能是快照被记录的时机,具体配置参数如下:
- FDC_FIRST_IN_CYCLE:当故障计数器达到阈值时记录扩展数据,同时一个运行周期只会记录一次数据。
- TESTFAILED:当testfailed标志位由0置1时记录扩展数据
- CONFIRMED:当confirmed标志位由0置1时记录扩展数据(不支持)
- PASSED:当testfailed标志位由1置0时记录扩展数据
事件溢出指示
当Event memory存满了或者当前的event正在存储别的event时,Dem模块会给每个event memory溢出指示,此时Dem模块会触发内部displacement策略。Dem模块提供Dem_GetEventMemoryOverflow API接口,这个API主要为特定的诊断服务或者特定的供应商处理,同时还为SW-Cs提供接口。Dem模块提供Dem_GetNumberOfEventMemoryEntries API接口,这个API主要返回当前存储在Event memory中的event数量。
event memory溢出指示会在清除DTC(14服务)操作后重置相关参数。
事件替代
Dem模块事件替换指新的事件存储条目替换旧的事件存储条目。当发生事件存储溢出指示后,Dem模块会根据配置丢弃事件存储条目。
Dem模块提供了DemEventDisplacementStrategy参数,配置Dem是否支持事件存储替换。具体配置如下:
- NONE:不替换。如果事件内存被填满,不会替换已存在的事件存储条目。请注意,对于这种情况,惟一支持的回退策略是DISCARD_NEW_EVENT。
- PRIO_OCC:可替换。如果事件内存已被填充,则选择优先级最低的DTC。如果多个dtc共享这个最低优先级,则选择最老的dtc。
- FULL: 可替换。如果事件内存已被填充,则选择优先级最低的DTC。如果多个DTC共享这个最低优先级,则选择最老的被动DTC。如果最低优先级列表中没有被动DTC,则选择最老的活动但未测试的DTC。
- LEGACY_403:根据Autosar 4.0.3中定义的置换行为做向量扩展。如果事件内存已被填充,则选择优先级最低的DTC。如果多个DTC共享这个最低优先级,则选择最老的被动DTC。
Dem模块事件存储替换流程如下图所示:
上报的事件优先级和已存在的事件优先级相同,同时已存在的事件在本次运行周期未完成测试,Dem模块把上报的事件将替换已存在的事件。
上报的事件优先级和已存在的事件优先级相同,同时已存在的事件在本次运行周期完成测试,Dem模块将丢弃上报的事件。
当某个事件被替换之后,同时DemResetConfirmedBitOnOverflow 参数配置为true,Dem模块将该事件的UDS status bit2和bit3设置为0。
当某个事件被替换之后,同时DemStatusBitHandlingTestFailedSinceLastClear参数配置为DEM_STATUS_BIT_AGING_AND_DISPLACEMENT,DemResetConfirmedBitOnOverflow设置为true,Dem模块将该事件的UDS status bit5设置为0。
总结
本章节主要描述了事件存储通用流程、事件存储的细节、事件溢出指示以及事件替代策略,以及相关Autosar配置。这些功能仅仅是Dem模块的一小部分,同时我们还需要了解Dem模块其他功能和Autosar工具的配置选项,这样才能灵活使用Autosar工具配置和调试相关的BUG。
本章节主要参考Autosar标准的Dem模块相关文档和ISO14229标准等。