1 NVRAM Block
1.1 缩写
NVRAM Block是NVM manager层所定义对象。其相关的概念和基本对象包括:


1.2 BSO和NVRAM Block 之间的组织关系如图 1 所示

图1 NVRAM 个构成(BSO)
Application(以后简称App)层的SoftWare Component(以后简称SWC)需要存储非易失性数据(NV Data)时,就使用NVM Manager 生成不同的NVRAM Block。NVRAM Block包含不同的BSO成分,每一个NVRAM Block包含哪些BSO在配置时决定,配置时每个NVRAM Block都会有一个 NVRAM block descriptor ,一旦 block descriptor 固定,则NVRAM Block的构成也就固定(fixed)了。每一个NVRAM Block都会被分配一个 Block ID,NVM模块就使用 Block ID 来选择要访问的single block。每一个NVRAM Block都可以为其配置 block management type(Native,Redundant,Dataset)。
所有地址偏移都是相对于 NVRAM block descriptor 中RAM或ROM的起始地址(这里认为是block ID,待确认)给出的。一般认为起始地址为0。(如果需要,相应的设备驱动程序将添加设备特别定义的基址或偏移量)。
1.3 BSO的逻辑成分
下图展示了集中BSO的逻辑组成:
1.4 Block management types前面提到:每一个NVRAM Block都可以为其配置 block management type(Native,Redundant,Dataset)。
NVRAM Block的管理类型有3种:
native
redundant
dataset
每一种类型的NVRAM Block的BSO组成为:
Native NVRAM块是最简单的块管理类型。
1.4.2 Redundant NVRAM Block包含2个NV block。如果一个 NV block 块被认为是无效(invalid)的(例如read fail),则会使用另一个有效的NV block 中的数据来恢复无效的 NV block(即将有效NV block 中的数据写到无效的 NV block中)。如果恢复失败,则应将该错误报告给DET(错误码为:NVM_E_LOSS_OF_REDUNDANCY)

Dataset NVRAM Block 块中包含几个大小相同的(NV / ROM)block。应用程序可以一次访问block中的任意一个。(原文:The Dataset NVRAM block is an array of equally sized data blocks (NV/ROM). The application can at one time access exactly one of these elements.)[SWS_NvM_00144] dataset 的 位置 index 在Administrative block 通过一个单独的字段来标识。[SWS_NvM_00374] NNvM模块应能读取daset中所有的NV块。[SWS_NvM_00375] 当且仅当禁用 write protection 时,NvM模块才能write所有的NV块。[SWS_NvM_00146] 如果dataset NVRAM block配置了 ROM block,则index range要能涵盖ROM,即通过index 要能索引NV block 和 ROM block 。[SWS_NvM_00376] NvM模块应只能读取ROM block(default datasets)。[SWS_NvM_00377] NvM模块应将 write ROM block 视为 write to a protected NV block。[SWS_NvM_00444] Dataset NVRAM Block中的 (NV + ROM)block 总数必须在1..255的范围内。[SWS_NvM_00445]⌈在可选ROM块的情况下,索引从0到NvMNvBlockNum-1的数据区域表示NV块在NV存储器中的CRC。索引从NvMNvBlockNum到NvMNvBlockNum + NvMRomBlockNum-1的数据区域表示ROM块。[SWS_NvM_00445] Dataset NVRAM Block中的 (NV + ROM块) 的index 关系图如下图:
1.5 NVRAM Manager API configuration classesNVM 模块提供哪些API AUTOSAR 中也做了规定。但是为了适应不同的硬件资源,NVM模块可以配置哪些API在当前的环境中是可用的。为此,NVM模块中提供了一个 API configuration classes 的配置项,其有三个参数,对应不同的API范围:—— API configuration class 3: 所有定义的API都可以使用;—— API configuration class 2: 部分API可用,可用API的中间集合.—— API configuration class 1: 最少的API可用,在任何情况下都需要的API最小集合。适用于硬件资源非常有限系统。硬件抽象接口(即更低层的Fee和EA)为NVM提供了虚拟线性32位地址空间用于寻址,这32位地址由16bit的 block number和16bit的block address offset构成。According to [SWS_NvM_00051], the NvM module allows for a (theoretical) maximum of 65536(2^16) logical blocks, each logical block having a (theoretical) maximum size of 64(2^16) Kbytes.(NVM模块最多允许寻址 65536(2^16)个逻辑块,每个逻辑块的大小最大为 64(2^16) Kbytes)16bit 的block number 被进一步划分成两部分:NV block base number (NVM_NV_BLOCK_BASE_NUMBER) with a bit width of (16 -NVM_DATASET_SELECTION_BITS) Data index with a bit width of (NVM_DATASET_SELECTION_BITS) 即:NVM_DATASET_SELECTION_BITS + NVM_NV_BLOCK_BASE_NUMBER = 16NvMDatasetSelectionBits 在NVM module中是可配置项,用作Dataset类型的NVRAM Block中的NV block的寻址,即dataset中,NVblock的dataindex 可以为 0,1,2... (2^bit-1)。NvMDatasetSelectionBits被定义之后,则block base number的大小也随即确定(用作对base number寻址的bits个数 == 16-selectionbits), 即NVRAM Block ID可以为 0,1,2,... (2^basenumberbits-1)。
NVM模块的 NvMNvBlockBaseNumber, NvMDatasetSelectionBits 和FeeEA 模块的 EA_BLOCK_NUMBER / FEE_BLOCK_NUMBER 的关系换算关系是:
FEE/EA_BLOCK_NUMBER = (NvMNvBlockBaseNumber << NvMDatasetSelectionBits) + DataIndex.NvMDatasetSelectionBits ——> Data Index(一个NVRAM Block的NV block 的编号)NvMNvBlockBaseNumberbits ——> NVMBlockBaseNumber(即为NVRAM Block ID,NVRAM Block的编号)即两个类型的 bit 合计共有16个。
例 1:
NvMDatasetSelectionBits == 2 (即被配置为2bit),则可以用作NvMNvBlockBaseNumber 的是14bit。由此:
1、 Range of NvMNvBlockBaseNumber: 0x1..0x3FFE(2^14个,即:1 ~(2^14-1-1))
2、 Range of data index: 0x0..0x3(=2^NvMDatasetSelectionBits-1) (2^2个,即:0 ~ (2^2-1))
3、Range of FEE_BLOCK_NUMBER/EA_BLOCK_NUMBER: 0x4..0xFFFB (0x1<<2bit + 0)
对于一个 native NVRAM block,如果其 NvMNvBlockBaseNumber = 2:
则其对应的NV block 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 8
对于一个 redundant NVRAM block(有2个NV block)如果其 NvMNvBlockBaseNumber = 3:
其1st NV block (data index = 0)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 12 (=3<<2+0,)
其2nd NV block(data index = 1) 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 13(=3<<2+1)
对于一个 dataset NVRAM block 如果其 NvMNvBlockBaseNumber = 4, NvMNvBlockNum = 3 (即有3个NV block):
其 1st NV block(data index = 0) 在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 16 (4<<2 +0)
其 2nd NV block (data index = 1)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 17(4<<2 +1)
其 3rd NV block (data index = 2)在 Fee/EA 层的 FEE/EA_BLOCK_NUMBER = 18(4<<2 +2)
————————————————
阅读原文,关注作者博客
版权声明:本文为CSDN博主「慕容静羽」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明,已获取作者转载权限。
浅析特斯拉Model 3的热管理策略
基于UDS的Bootloder详解
关于整车上下电流程的理解
关于车载以太网 Switch Vlan的理解
AURIX TC3XX系列的SOTA机制详解
一文详解奥迪e-tron内部系统 |附下载
ID.3 和大众的电气化平台 |附下载
一文详解CAN总线错误帧|附下载
DoIP协议介绍,资料分享!
详解车载网络 OTA系统的开发|文末附下载
一文了解汽车嵌入式AUTOSAR架构|附下载
特斯拉Autopilot系统安全研究|附dbc下载