AUTOSAR架构下存储协议栈Error问题自底向上分析

发布于 2023-9-28 10:29
浏览
0收藏

前言

前面的文章我们详细分析了NvM,Fee,Fls模块以及NvM User和NvM的交互,对AUTOSAR架构下的存储协议栈应该有了一个比较深入的了解了。回头来看,站在NvM使用者的角度来看最关心的是如何使用NvM存储服务,以及使用过程中出现Error后如何快速定位和分析问题。NvM服务的使用可以参考<<​​AUTOSAR架构下NVM Block连续写及Default Value问题分析​​>>一文,本文就来自低向上的分析AUTOSAR架构下存储协议栈的Error处理机制,希望能帮助NvM使用者快速定位和分析问题!

缩略词:

简写

全称

DMU

Data Memory Unit

Fls

Flash

OPER

Flash Operation Error

SQER

Command Sequence Error

EVER

Erase Verify Error


注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!


参考文档:


1.AURIXTC3XX_um_part1_v2.0.pdf

2. Specification of Flash EEPROM Emulation

3. Specification of Flash Driver

4.Specification of NVRAM Manager AUTOSAR CP Release 4.3.1

5.​​AUTOSAR架构下NVM Block连续写及Default Value问题分析​

6.​​AUTOSAR架构下NvM模块详细分析​​​

7.​​AUTOSAR架构下Fee详细分析​

8.​​TC37x芯片FLASH基本概念介绍​

9.​​AUTOSAR架构下Fls详细分析​

10.​​TC3xx芯片DMU介绍​


正文

1.Error自定向上分析

由于从NvM User的存储服务请求正向自定向下分析Error发生的条件和流转十分困难,我们采用自底向上的方法从底层已知Error出发向上分析Error的流转,也就是:Fls已知Error àFeeàNvMàNvM User


如下表所示,我们把自底向上分析的结果以表格的形式统计出来,通过这种方式,NvM User就能从JobResult结果查找NvM,Fee,Fls报了什么错误,也就能采用对应的应对措施。


Note:

1.该表格仅把NvM最常用的服务(读,写,擦除)可能产生的Error统计进去,像NvM Cancell这类的不常用服务没有统计进去。


2.NvM除了底层上报的错误外,本身还有很多Error处理机制,比如,调用底层接口的返回值判断等,这里错误也没有统计进去,也就是我们仅仅把NvM DMU上报的错误统计出来


3.DMU上报的Error的原因,以及对应软件的处理办法可以查看数据手册获得。具体请参考: <<​TC3xx芯片DMU介绍​>>


NvM User

NvM

Fee

Fls

NvM User可以通过Block Callback获取NvM Job请求的结果,
然后根据结果执行对应的策略

NvM调用NvM Block配置的Callback函数JobEndCbkExtFunc_pt,传入的JobResultNVM_REQ_NOT_OK

NvM_CurrentBlockInfo_t.LastResult_t = NVM_REQ_NOT_OK

Fee在处理Write任务时会调用FlsCompare接口对比写入DFlash的数据和RAM缓存的数据,如果出现错误,Fee会调用NvM_JobErrorNotification

Fls
调用Fee_JobErrorNotification, Fee_JobErrorNotication调用FeeNvmIllegalStateNotification


FeeJobResult == MEMIF_BLOCK_FAILED

Note: FeeNvmIllegalStateNotification
是一个Callout函数,由User实现

Fls执行Compare任务时发生错误,调用Fee_JobErrorNotification

FlsJobResult == MEMIF_BLOCK_INCONSISTENT

Note:
写入Flash的数据和RAM缓存的数据不一致

Fls调用Fee_JobErrorNotification, Fee_JobErrorNotification调用NvM_JobErrorNotification

FeeJobResult == MEMIF_BLOCK_FAILED

Fls擦写过程中发生了超时,调用Fee_JobErrorNotification

FlsJobResult == MEMIF_BLOCK_FAILED

Note:
监控擦写任务执行的时间,超时就会报错

Fls擦除过程中发生错误,调用Fee_JobErrorNotification

FlsJobResult == MEMIF_BLOCK_FAILED

Note:
发生OPER, EVER, SQER

Fls写数据过程发生错误,调用Fee_JobErrorNotification

FlsJobResult == MEMIF_BLOCK_FAILED

Note:
发生OPER, PVER, SQER错误

Fls读数据过程发生错误,调用Fee_JobErrorNotification

FlsJobResult == MEMIF_BLOCK_FAILED

Note:
开启了ECC_ERROR检查,如果发生了ECC错误就会报错

NvM调用NvM Block配置的Callback函数JobEndCbkExtFunc_pt,传入的JobResultNVM_REQ_INTEGRITY_FAILED

NvM_CurrentBlockInfo_t.LastResult_t = NVM_REQ_INTEGRITY_FAILED

Fee在处理Read任务时发现数据不一致(比如,Block来没有被写过)就会调用NvM_JobErrorNotification

FeeJobResult == MEMIF_BLOCK_INCONSISTENT


NvM调用NvM Block配置的Callback函数JobEndCbkExtFunc_pt,传入的JobResultNVM_REQ_NV_INVALIDATED

NvM_CurrentBlockInfo_t.LastResult_t = NVM_REQ_NV_INVALIDATED

Fee在处理Read任务时发现数据是无效的就会调用NvM_JobErrorNotification

FeeJobResult == MEMIF_BLOCK_INVALID


NvM调用NvM Block配置的Callback函数JobEndCbkExtFunc_pt,传入的JobResultNVM_REQ_NOT_OK

NvM_CurrentBlockInfo_t.LastResult_t = NVM_REQ_NOT_OK

Fee在处理写任务时发现写的次数已经超过该Block配置的最大写次数了就会调用NvM_JobErrorNotification

FeeJobResult == MEMIF_BLOCK_FAILED


2.数据INTEGRITY_FAILED错误示例

我们把TC3xx芯片的DFlash都擦除掉,然后通过仿真器执行重启。

Fee在处理Read任务时发现数据不一致(Block没有被写过),Fee_MainFunction会调用

NvM_JobErrorNotification通知到上层的NvM模块。

AUTOSAR架构下存储协议栈Error问题自底向上分析 -汽车开发者社区

如果对应的NvM Block配置了Callback函数,NvM模块就会调用该Block的Callback函数通知到NvM_User,这样NvM User就能知道当前NvM Block的状态。

AUTOSAR架构下存储协议栈Error问题自底向上分析 -汽车开发者社区

3. 总结

本文自底向上分析了存储协议栈的Error流转过程,通过本文总结的Error流转表格,我们可以方便的查找DMU操作出问题的可能原因。但是,对于NvM模块本身的一些逻辑状态上报的Error,这个表格没有统计,感兴趣的朋友可以自己再去研究。


文章转载自公众号:汽车电子嵌入式

分类
收藏
回复
举报
回复
相关推荐