当前位置:网站首页>【AutoSAR 十三 NVM】
【AutoSAR 十三 NVM】
2022-07-02 23:49:00 【柯宇谦】
AutoSAR 十三 NVM
1. NvM(Nonvolatile Memory Manager)

NvM可以管理Flash、EEPROM这些存储器,都做到了对不同硬件统一的管理:
- 排队管理机制
- 上下电存储处理
- 支持数据校验
- 数据的写保护
- 对数据的冗余储存
1.1 排队管理机制
当有数据想要存入Memory的时候,由于Flash和EEPROM都需要先擦除再写入,速度会比RAM慢很多,所以会产生数据的排队。
• 而排队机制可以手动配置是FIFO或者是带有优先级的队列这两种方式
• 可以配置队列的深度
• 支持立即数据(immediate data,即要求立即写入的数据,比如crash data)的快速写入,即可以不用排队
1.2 上下电存储处理
• 在上电的时候,要读取NV里的必要的数据
• 在下电的时候,要将必要的数据写入NV里面
1.3 支持数据校验
主要利用CRC校验检查是否数据出错
• 当校验出错时,触发使用默认数据(直接使用或者也可以CallBack)
1.4 数据的写保护
如同我们写Flash要先解锁一样;还有一种方式是设置成单次写入,仅允许写入一次
1.5 对数据的冗余储存
主要就是增加一些关键数据的可靠性
2. Fee
Fee(Flash EEPROM Emulation)是对Falsh仿EEP的一个抽象的具体实现。
Flash被抽象成了一个一个的Flash Sector,Flash Sector又分为了一个一个的Flash Page。
Flash Sector: 就是Flash能擦除的最小单元,也可以配置为更大
Flash Page: Fee只能通过Flash Page去访问Flash,也就是Fee的最小单元,Flash Sector包含Flash Page。
Fee会调用Flash驱动(FLS)去实现对硬件的真正的擦除和写入等功能;但是Flash由于寿命的原因,不能老是擦除同一个地址的Flash,所以Fee还会自动管理写入的地址,尽量平均的去写入数据
Fee对Flash写入的时候,是会先备份一遍的,再进行擦除。 也就是说我们至少需要两个Flash Sector。过程是:首先将要擦除的Sector的数据都备份到另一个Sector中,然后擦除该Sector,之后一个page一个page的写入数据,直到将这个Sector写满
3. Ea
Ea(EEPROM Abstraction)是对EEPROM 的抽象,它也是调用EEPROM的驱动(EEP)来实现最终的操作。
它也会 考虑EEPROM的寿命问题来将存储的数据做一个均摊。 但Ea与Flash不同是,EEPROM不用一块一块的擦除,它比较灵活,可以 定点写入数据 。所以它可以以交替的形式把一个Block写入几个Memroy Locations里面。
4. NVM的存储处理与Block

4.1 NVRAM Block
NVRAM Block里一般都只包含1个RAM Block、1个Administrative Block和0/1个ROM Block。但是NV Block可以包含多个,根据包含了几个NV Block,我们将NVRAM Block分为三种类型:Native(正常)、Redundant(冗余)和Dataset(数据集).
- Native: 即一个RAM Block保存到对应的一个NV Block中
- Redundant: 将一个RAM Block保存到两个NV Block中,当一个数据失效后可以使用另一个
- Dataset: 最多支持255个NV Block,类似于一个数组,可以用DataIndex来索引其中的数据

4.2 Fee Block
Fee Block是在Fee中使用的Block,以一种叫做 “Chunks” 的方式来做管理。
一个Chunk可以包含几个Blocks,而Chunk之间是用一种链表的形式连接起来的,Chunk就是其中的节点

假如NVRAM Block的Block Length假如是16,那么Fee Block的Block Size应该要加上CRC长度(CRC16加2,CRC32加4)。
所以假如是CRC32,那么Fee Block的Block Size就应该为20。
下面的Ea Block也是一样
4.3 Ea Block

边栏推荐
- 2022上半年值得被看见的10条文案,每一句都能带给你力量!
- Confluence的PDF导出中文文档异常显示问题解决
- 多进程编程(四):共享内存
- [golang syntax] map common errors golang panic: assignment to entry in nil map
- Explain in detail the significance of the contour topology matrix obtained by using the contour detection function findcontours() of OpenCV, and how to draw the contour topology map with the contour t
- ftrace工具的介绍及使用
- Vulkan-实践第一弹
- 多进程编程(三):消息队列
- 【日常训练】871. 最低加油次数
- Monitor container runtime tool Falco
猜你喜欢

Logback configuration file

Detailed explanation of pod life cycle

Nacos+openfeign error reporting solution

Basic use of shell script

Markdown使用教程

Multiprocess programming (I): basic concepts

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

Linux Software: how to install redis service

Cmake basic use

kubernetes资源对象介绍及常用命令(五)-(NFS&PV&PVC)
随机推荐
2022上半年值得被看见的10条文案,每一句都能带给你力量!
Luogu_ P2010 [noip2016 popularization group] reply date_ Half enumeration
antv x6节点拖拽到画布上后的回调事件(踩大坑记录)
FAQ | FAQ for building applications for large screen devices
Slf4j + logback logging framework
[IELTS reading] Wang Xiwei reading P2 (reading fill in the blank)
Pytorch 20 realizes corrosion expansion based on pytorch
Andorid 获取系统标题栏高度
图解网络:什么是虚拟路由器冗余协议 VRRP?
node_ Modules cannot be deleted
NC24840 [USACO 2009 Mar S]Look Up
[Luogu p4320] road meets (round square tree)
多进程编程(三):消息队列
Install docker and use docker to install MySQL
Gan model architecture in mm
[shutter] image component (the placeholder | transparent_image transparent image plug-in is loaded into the memory)
DotNet圈里一个优秀的ORM——FreeSql
关于QByteArray存储十六进制 与十六进制互转
Bypass AV with golang
[IELTS reading] Wang Xiwei reading P1 (reading judgment question)