1.学习NVM之前先了解其架构图
2.了解Block概念与含义
名称 | 描述 |
---|---|
NVRAM Block | NVRAM Block是管理和存储 NV Block所需的整个结构 |
Basic Storage Object | Basic Storage Object是一个最小的NVRAM block,多个Basic Storage Objects可以组成一个NVRAM Block。 |
NV data | 要存储在Non-Volatile memory的数据 |
Block Management Type | 这个是NVRAM Block的类型,它取决于强制/可选Basic Storage Object中 NVRAM Block的(可配置的)单独组成以及该 NVRAM 块的后续处理。 |
RAM Block | 属于Basic Storage Object,它是NVRAM Block的一部分,常驻于RAM空间。 |
ROM Block | 属于Basic Storage Object,它是NVRAM Block的一部分(可选的),常驻于ROM空间。 |
NV Block | 属于Basic Storage Object,它是NVRAM Block的一部分(必选的),常驻于NV空间。 |
NV Block Header | 如果Static Block ID是enable的,这个作为附加信息包含在NV Block中。 |
Administrative Block | 属于Basic Storage Object,它常驻于RAM,是NVRAM Block必选部分。 |
如上图所示,AUTOSAR规定,App只能通过NvM(NVRAM Manager)来访问NV Memory(比如DFLASH)。
NV Block:
NVRAM Block必须存在的模块,数据内容持久存在与flash中,可以在程序执行过程中修改,它的组成:
RAM Block
NV数据的读写是相对较慢的操作,而swc task执行时间较快,如果直接读写太过频繁不可取,所以一般会使用一个同样大小的Ram空间来操作、使用、存放这些还没有被写入或者读取的NV值。
RAM Block 是NV Block在RAM中的一个映射,因为应用层不能直接操作NV(速度太慢),所以基本上是一个1:1的结构
ROM Block
用于存储默认值,以便当NV block数据出现损坏时予以替换
Administrative Block
1)专门用于对NVRAM Block 与 RAM blcok 的数据安全性进行管理而设计的,它对应用层并不可见。
2)存在与RAM中,不是持久的,用于保存相应NVRAM块的属性/错误/状态信息,以及‘Dataset’类型的NVRAM块的块索引
2)结构组成
nv block,RAM block 和 Administrative Block必须存在,ROM block为可选项。包含哪些block是在配置阶段完成,相应的NVRAM block descriptor配置完成后,包含block也随之固定。
3.NvM数据操作类型介绍
NvM数据的管理主要包括三种管理类型,分别是Native NVRAM block、redundant NVRAM block、Dataset NVRAM block。具体对各个Block的使用情况如下所示。
1.Native
consists of a single NV block, RAM block and Administrative block
2.redundant
1)consists of two NV blocks, a RAM block and an Administrative block.
2)包含2个NV block,如果一个 NV block 块无效(如read fail),则会使用另一个有效的NV block 中的数据来恢复此无效block
3)如果恢复失败发送错误码 NVM_E_LOSS_OF_REDUNDANCY 到DET中
3.dataset
1)consists of multiple NV user data, (optionally) CRC areas, (optional) NV block headers, a RAM block and an Administrative block
2)Dataset NVRAM Block中的 (NV + ROM)block 总数必须在1…255的范围内
说人话:
Native NVRAM block是最简单的Block形式,该类型包括1个NV Block,1个RAM Block,1个Administrative Blocks;
Redundant NVRAM block该类型包括2个NV Block,1个RAM Block,1个Administrative Blocks,通过该类型可以实现数据的冗余备份存储。
Dataset NVRAM是由多个大小相等的数据组成,APP在一次操作中获得其中的一个元素,每一个DataSet的位置可以通过Administrative Blocks获得,NvM可以读取选择的ROM Block。Dataset NVRAM类型的设计可以根据需要对一个数据在NvRAM中以一定的循环偏移进行存储,每一次存储位置可以不同,实现对NvRAM的寿命延长。
3 支持的同步机制(Synchronization Mechanism)
根据App对NvM Block‘’s RAM的访问方式,数据同步机制可以分为两种:
隐式同步(Implicit synchronization)
显示同步(Explicit synchronization)
3.1 Implicit synchronization
AUTOSAR规范:在隐式同步机制下,一个NvM Block的 RAM 被映射到一个固定的 SWC,不建议共享RAM。 每当SW-C使用RAM block(temporary/permanent)访问NVRAM时,都必须确保RAM块的数据一致性,直到NvM完成正在进行的操作为止。
说人话:
在隐式同步机制下,RAM block 和 SWC 之间是一一对应的关系,其他SWC不能访问该RAM。SWC要保持数据的一致性是说,从SWC调用NvM接口到NvM内部操作完成前,SWC不能再改变该RAM中的值。但是该RAM可以被read。
3.2 Explicit synchronization
AUTOSAR 规范:在显式同步中,NvM会定义一个RAM mirror,用于与App的RAM block交换数据。 App将数据写入RAM block,然后调用NvM Write API(NvM_WriteBlock / NvM_WritePRAMBlock)。 NvM 调用API(NvMWriteRamBlockToNvM)将数据从 RAM Block 拷贝到RAM Mirror,进而写入 NV Block。
显示同步的优点:
App可以更好地管理自己的RAM block。在App调用NvM_WriteBlock / NvM_WritePRAMBlock 到NvM 调用NvMWriteRamBlockToNvM()这段期间,App仍然可以修改RAM block中的数据。
几个SWC可以共享一个NvM Block;
显示同步的缺点:
浪费内存:除了RAM block,又多了一个RAM Mirror(additional RAM),且RMA Mirror需要和使用显示同步机制的最大的NvM Block 具有相同的大小;
多了一步RAM间的拷贝操作:即多了RAM block 和 RAM mirror之间的拷贝操作;
比较好的NVM入门博客:https://blog.csdn.net/IT_luosong/article/details/124019056