NVRAM Manager(NVM)模块详细介绍

NVRAM Manager(NVM)模块详细介绍,第1张

 

前言

存储协议栈负责ECU中非易失性数据的存储管理。存储协议栈的分享包括NVMMemIEaFeaEepFls模块的详细介绍及代码分析,具体的项目实战请关注本号的后续文章,本篇为NVRAM Manager(NVM)模块详细介绍篇。

 

NVRAM Manager(NVM)模块详细介绍,97965934-2d7d-11ed-ba43-dac502259ad0.png,第2张

 

 

正文

1.功能简介

NvM模块应根据汽车环境中NV(非易失性)数据的不同需求提供服务,以确保数据的存储和维护。NvM模块应该能够管理EEPROM/FLASH EEPROM仿真设备的NV数据。

 

NvM模块为NV数据(init/read/write/control)的管理和维护提供所需的同步/异步服务。

不同块之间的关系可以在下图中可视化:

NVRAM Manager(NVM)模块详细介绍,97c74ad0-2d7d-11ed-ba43-dac502259ad0.png,第3张

 

 

 

 

2.关键概念

Basic Storage Object: “基本存储对象”是“NVRAM块”的最小实体。几个“基本存储对象”可以用来构建一个NVRAM块。一个“基本存储对象”可以驻留在不同的内存位置(RAM/ROM/NV内存)

 

NVRAM Block:  NVRAM Block是管理和存储 NV Block所需的整个结构。

 

NV data: 要存储在Non-VolaTIle memory的数据。表示NV用户数据和CRC值(可选)组成的存储区。

 

Block Management Type: 这个是NVRAM Block的类型,它取决于强制/可选Basic Storage ObjectNVRAM Block的(可配置的)单独组成以及该 NVRAM 块的后续处理。

 

RAM Block: 属于Basic Storage Object,它是NVRAM Block的一部分,常驻于RAM空间。为了应对应用层的快速 *** 作,创建的与NV Block同样大小的RAM空间,用于存储还没有被写入或读取的NV值。表示在RAM中用户数据和CRC值(可选)组成的区域。

NVRAM Manager(NVM)模块详细介绍,97df281c-2d7d-11ed-ba43-dac502259ad0.png,第4张

ROM Block: 属于Basic Storage Object,它是NVRAM Block的一部分(可选的),常驻于ROM空间。ROM块驻留在ROMData Flash)中,用于提供缺省数据以防NV块为空或被破坏。

 

NV Block: 属于Basic Storage Object,它是NVRAM Block的一部分(必选的),常驻于NV空间。NV Block表示NV用户数据和CRC值(可选)组成的存储区。

 

NV Block Header: 如果StaTIc Block IDenable的,这个作为附加信息包含在NV Block中。

 

AdministraTIve Block: 属于Basic Storage Object,它常驻于RAM,是NVRAM Block必选部分。AdministraTIve Block管理块在RAM中,包含Dataset NV块关联的块索引。也包含相应NVRAM块的属性、错误、状态信息。

NVRAM Manager(NVM)模块详细介绍,98012a8e-2d7d-11ed-ba43-dac502259ad0.png,第5张

3.功能详解 3.1 内存硬件抽象层Ea/Fee的寻址方案

内存抽象接口,底层的Flash EEPROM仿真和EEPROM抽象层为NvM模块提供了一个虚拟线性32位地址空间,该地址空间由一个16位块号和一个16位块地址偏移组成。

 

Note: NvM模块允许(理论上)最大65536个逻辑块,每个逻辑块(理论上)最大大小为64kbytes

 

NvM模块将进一步将16bit Fee/Ea区块号细分为以下部分:

- NV块基数(NVM_NV_BLOCK_BASE_NUMBER),位宽为(16 -NVM_DATASET_SELECTION_BITS)

- 位宽为(NVM_DATASET_SELECTION_BITS)的数据索引

 

对冗余NVRAM块的处理/寻址应以与数据集NVRAM块相同的方式对内存硬件抽象进行,即冗余NV块应通过使用配置参数NvMDatasetSelectionBits来管理。

 

FEE/EA_BLOCK_NUMBER = (NvMNvBlockBaseNumber << NvMDatasetSelectionBits)

+ DataIndex.

 

示例:

配置参数vmdatasetselectionbits配置为2。这将导致14位可作为配置参数nvnvblockbasenumber的范围

-- Range of NvMNvBlockBaseNumber: 0x1..0x3FFE

-- Range of data index: 0x0..0x3(=2^NvMDatasetSelectionBits-1)

-- Range of FEE_BLOCK_NUMBER/EA_BLOCK_NUMBER: 0x4..0xFFFB

 

有了这个配置,FEE/EA_BLOCK_NUMBER会使用前面提到的公式计算,如下面的例子所示:

 

对于NvMNvBlockBaseNumber = 2Native NVRAM block:

-- NV block is accessed with FEE/EA_BLOCK_NUMBER = 8

8 == 2 << 2 + 0

 

对于NvMNvBlockBaseNumber = 3redundant NVRAM block:

-- 1st NV block with data index 0 is accessed with FEE/EA_BLOCK_NUMBER = 12.

12 == 3 << 2 +0

 

 

-- 2nd NV block with data index 1 is accessed with FEE/EA_BLOCK_NUMBER = 13.

13 == 3 << 2 + 1

 

对于NvMNvBlockBaseNumber = 4, NvMNvBlockNum = 3dataset NVRAM block:

-- NV block #0 with data index 0 is accessed with FEE/EA_BLOCK_NUMBER = 16

16 == 4 << 2 + 0

 

-- NV block #1 with data index 1 is accessed with FEE/EA_BLOCK_NUMBER = 17

16 == 4 << 2 + 1

 

-- NV block #2 with data index 2 is accessed with FEE/EA_BLOCK_NUMBER = 18

16 == 4 << 2 + 2

 

3.2 基本存储对象Basic storage objects 3.2.1 NV Block

NV块是一个基本的存储对象,表示一个由NV用户数据、CRC(可选)NV块报头(可选)组成的内存区域。NV Block必须存在的模块,数据内容持久存在与flash中,可以在程序执行过程中修改,它的组成:

 

 

 

NVRAM Manager(NVM)模块详细介绍,981efb86-2d7d-11ed-ba43-dac502259ad0.png,第6张

3.2.2 RAM Block

RAM块是一个基本的存储对象,表示RAM中由用户数据和(可选的)CRC值和(可选的)NV块头组成的区域。

 

RAM块上CRC使用的限制。只有当相应的NV块也有CRC时,CRC才可用。CRC必须与相应的NV块的类型相同

 

RAM块的用户数据区域可以驻留在与RAM块状态不同的RAM地址位置(全局数据段)

 

RAM块的数据区域应该可以从NVRAM管理器和应用程序端访问(数据从/传递到相应的NV)

 

RAM块数据应包含永久或临时分配的用户数据。对于永久分配的用户数据,RAM块数据的地址在配置期间是已知的。在临时分配用户数据的情况下,RAM块数据的地址在配置期间是未知的,将在运行时传递给NvM模块。

 

在没有地址约束的情况下,可以在全局RAM区域内分配每个RAM块。配置的RAM块的总数不需要位于连续的地址空间中。

 

NV数据的读写是相对较慢的 *** 作,而swc task执行时间较快,如果直接读写太过频繁不可取,所以一般会使用一个同样大小的Ram空间来 *** 作、使用、存放这些还没有被写入或者读取的NV值。

RAM Block NV BlockRAM中的一个映射,因为应用层不能直接 *** 作NV(速度太慢),所以基本上是一个1:1的结构

NVRAM Manager(NVM)模块详细介绍,983a9670-2d7d-11ed-ba43-dac502259ad0.png,第7张

注意:这个图没有显示RAM块的物理内存布局。这里只显示逻辑集群。

由于NvM模块不支持对齐,这可以通过配置来管理,也就是说,块的长度可以通过添加填充来扩大,以满足对齐要求

 

3.2.3 ROM Block

ROM块是一个基本的存储对象,位于ROM (FLASH)中,用于在NV块为空或损坏时提供默认数据。

NVRAM Manager(NVM)模块详细介绍,984979f6-2d7d-11ed-ba43-dac502259ad0.png,第8张

3.2.4 Administrative block

1)专门用于对NVRAM Block RAM blcok 的数据安全性进行管理而设计的,它对应用层并不可见。

2)存在与RAM中,不是持久的,用于保存相应NVRAM块的属性/错误/状态信息,以及‘Dataset’类型的NVRAM块的块索引

2)结构组成

nv blockRAM block Administrative Block必须存在,ROM block为可选项。包含哪些block是在配置阶段完成,相应的NVRAM block descriptor配置完成后,包含block也随之固定。

 

3.2.5 NV Block Header

如果启用了机制静态块ID,则NV块标头应首先包含在NV块中

NVRAM Manager(NVM)模块详细介绍,98614d92-2d7d-11ed-ba43-dac502259ad0.png,第9张

 

3.3块管理类型 Block management types

NvM数据的管理主要包括三种管理类型,分别是Native NVRAM blockredundant NVRAM blockDataset NVRAM block。具体对各个Block的使用情况如下图所示。

Block management types

NV block

RAM block

ROM block

Administrative block

NVM_BLOCK_NATIVE

1

1

0/1

1

NVM_BLOCK_REDUNDANT

2

1

0/1

1

NVM_BLOCK_DATASET

<256

1

0...n

1

 

3.3.1NVRAM block structure

NVRAM块由强制性的基本存储对象NV块、RAM块和管理块组成。基本的存储对象ROM Block是可选的。任何NVRAM块的组成在配置期间由相应的NVRAM块描述符固定。所有的地址偏移量都相对于NVRAM块描述符中的RAMROM的起始地址给出。假设起始地址为零。

 

Note:如果需要,相应的设备驱动程序将添加一个设备特定的基本地址或偏移量。

3.3.2 NVRAM block descriptor table

要处理的单个NVRAM块将通过NvM模块API通过提供随后分配的块ID来选择。所有与NVRAM块描述符表及其在ROM (FLASH)中的地址相关的结构都必须在NvM模块配置期间生成。

 

3.3.3Native NVRAM block

Native NVRAM block是最简单的Block形式,该类型包括1NV Block1RAM Block1Administrative Blocks

 

3.3.4 Redundant NVRAM block

Redundant NVRAM block该类型包括2NV Block1RAM Block1Administrative Blocks,通过该类型可以实现数据的冗余备份存储。

NVRAM Manager(NVM)模块详细介绍,986aeeec-2d7d-11ed-ba43-dac502259ad0.png,第10张

 

3.3.5 Dataset NVRAM block

Dataset NVRAM是由多个大小相等的数据组成,APP在一次 *** 作中获得其中的一个元素,每一个DataSet的位置可以通过Administrative Blocks获得,NvM可以读取选择的ROM BlockDataset NVRAM类型的设计可以根据需要对一个数据在NvRAM中以一定的循环偏移进行存储,每一次存储位置可以不同,实现对NvRAM的寿命延长。

NVRAM Manager(NVM)模块详细介绍,987fec7a-2d7d-11ed-ba43-dac502259ad0.png,第11张

 

3.3.6NVRAM Manager API configuration classes

为了使NvM模块适应有限的硬件资源,需要定义三个不同的API配置类:

- API配置类3:所有指定的API调用都可用。支持最大限度的功能。

- API配置类2:一个中间的API调用集是可用的。

- API配置类1:特别是对于匹配具有非常有限的硬件资源的系统,这个API配置类只提供了在任何情况下都需要的最小的API调用集。

 

API配置类1中,不支持块管理类型NVM_BLOCK_DATASETNvM模块应该只包含处理配置的块类型所需的代码。

 

3.4扫描顺序/优先级方案 Scan order / priority scheme

NvM模块应支持基于优先级的作业处理。

 

通过配置参数nvmjobpriority,基于优先级的作业处理将被启用/禁用

 

在基于优先级的作业处理顺序的情况下,NvM模块应该使用两个队列,一个用于立即写作业(崩溃数据),另一个用于所有其他作业(包括立即读/擦除作业)

 

如果通过配置禁用了基于优先级的作业处理,NvM模块将不支持立即写作业。在本例中,NvM模块按FCFSFirst Come, First Service顺序处理所有作业。

 

对于来自NvM_ReadAllNvM_WriteAll的多个块请求,作业队列长度应该是一个(只有一个作业在排队)

 

NvM模块不能中断由NvM_ReadAll请求引起的其他请求的任务

 

注意:唯一的例外是具有直接优先级的写作业,它将抢占正在运行的读/写作业。被抢占的任务随后将由NvM模块恢复/重启。

 

NvM模块不能中断来自其他请求的NvM_WriteAll请求

 

NvM模块应该对正在进行的NvM_ReadAll请求中请求的读任务进行排队,然后执行它们。

 

NvM模块应该对正在进行的NvM_WriteAll请求中请求的写作业进行排队,然后执行它们。

 

NvM模块应该对正在进行的NvM_ReadAll请求中请求的写作业进行排队,然后执行它们。

 

NvM模块应该对正在进行的NvM_WriteAll请求中请求的读作业进行排队,然后执行它们。

 

注意:NvM_WriteAll请求可以通过调用NvM_CancelWriteAll来终止。在这种情况下,当前块被完全处理,但不再写入其他块

提示:它将被允许退出队列的请求,如果他们成为过时的完成有关NVRAM块。

 

被抢占的任务随后将由NvM模块恢复/重启。这种行为既适用于单块请求,也适用于多块请求。

  审核编辑:汤梓红

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2998616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-26
下一篇 2022-09-26

发表评论

登录后才能评论

评论列表(0条)

保存