全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 汽车电子 >

存储协议栈的Error流转过程分析

时间:2023-09-04 09:53

人气:

作者:admin

标签: NVM  存储  软件  协议栈 

导读:...

前言

前面的文章我们详细分析了NvM,Fee,Fls模块以及NvM User和NvM的交互,对AUTOSAR架构下的存储协议栈应该有了一个比较深入的了解了。回头来看,站在NvM使用者的角度来看最关心的是如何使用NvM存储服务,以及使用过程中出现Error后如何快速定位和分析问题。NvM服务的使用可以参考<>一文,本文就来自低向上的分析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统计进去,像NvMCancell这类的不常用服务没有统计进去。

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,传入的JobResult为NVM_REQ_NOT_OK

NvM_CurrentBlockInfo_t.LastResult_t = NVM_REQ_NOT_OK



Fee在处理Write任务时会调用Fls的Compare接口对比写入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,传入的JobResult为NVM_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,传入的JobResult为NVM_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,传入的JobResult为NVM_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模块。

acf1a5fc-4ab6-11ee-97a6-92fbcf53809c.png

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

ad21b2ce-4ab6-11ee-97a6-92fbcf53809c.png

3. 总结

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

审核编辑:彭菁

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信