AUTOSAR BSW标准解读 – NvM

发布: Edward  •  分类: AUTOSAR  •  June 17, 2017, 9:19 p.m.  •  编辑

NvM的全称是NVRAM Manager。NVRAM是用来保存NV(Non Volatile,非易失)数据的,所谓的非易失数据指的是那些在掉电以后不会丢失的数据,而NvM模块是用来提供Nv数据管理的,用来维护NV数据。

满足AUTOSAR标准的NVRAM内存结构如下图,从这张图,我们能够比较清晰的看到AUTOSAR的NvM设计逻辑:

NvM_Mem_Structure

NvM的数据存储结构

NvM中的的数据承载是以块(Block)出现的,总共有四种类型的数据块,又可以称为基础存储对象(Basic Storage Objects),他们分别是:

  1. NV Block:这种类型的块必须要有的,它存储了非易失的数据,对于NvM是可见的,对于应用程序不可见;
  2. RAM Block:这种类型的块用于应用程序访问数据,它又分为permanent和temporary两种,两者的区别是,permanent类型的RAM在调用NvM读取接口的时候(readall,readblock)会自动的将NV Block里边的数据读取到permanent RAM block,而temporary类型的RAM必须作为readblock接口的参数,在readblock调用的时候会被填充,对于应用程序和NvM均为可见;
  3. ROM Block:这种类型的块提供了数据的默认值,是可选的,对于NvM可见,对于应用程序不可见;
  4. Administrative Block:这种类型的块用于提供NvM数据管理用到的信息,对于NvM可见,对应用程序是不可见的。

每一种块的结构可以参考下面三张图,对于Admin Block,与具体的NvM实现相关,AUTOSAR并没有规定它的具体结构:

NvM_Nv_Block

NvM_RAM_Block

NvM_ROM_Block

值得注意的是,以上提到的Block的概念是NvM中的概念,是抽象出来的和具体实现无关,大家不要和普通的RAM/ROM以及FLASH/RAM/DLFASH/EEPROM等概念混淆。下边这个实现样例表格可以帮助大家加深一些理解:

NvM Block 在EEPROM上的物理实现(无论外部内部) 在DFLASH/PFLASH上的物理实现
1个NV Block 在EEPROM上的一段地址区间 RAM上的一段地址区间+FLASH上的一段地址区间
1个RAM Block RAM上的一段地址区间 RAM上的另外一端地址区间
1个ROM Block EEPROM上的另一端地址区间(不会被NvM写,只会读) FLASH上的另外一块地址区间

NvM的寻址方式

NvM模块为程序运行提供了数据管理,因此很多模块会和NvM有交互,跟NvM交互的模块有RTE,DEM,EcuM,DET,MemIf,SchM,CRC Library。

为了实现存储管理NvM需要对FLASH或者EEPROM进行操作,这种操作并不是直接进行的,而是通过MemIf模块,MemIf模块把位于它下面的FLASH或者EEPROM抽象成线性的32位地址空间(包含了16位的逻辑块编号和16位的逻辑块内地址偏移),这个规定决定了NvM允许的最大逻辑块数为65536块,而每一块的大小为64K。 而逻辑块编号又可以分成两部分(块标识和dataset标识),这两部分的长度是可以通过NvMDatasetSelectionBits来配置的,它代表了dataset标识符的长度,出去dataset标识符部分就是块标识符了,dataset标识符最长为8个bit(最多256个datasets)。下边可以通过简单的一个示例图直观的看出这个概念:

NvM_Addressing

NvM的逻辑数据块管理类型

NvM的逻辑块有三种类型:

  1. NVM_BLOCK_NATIVE:包含1个NV Block,1个RAM Block,0到1个ROM Block,1个Admin Block。最简单的NvM类型,效率最高
  2. NVM_BLOCK_REDUNDANT:包含2个NV Block,1个RAM Block,0到1个ROM Block,1个Admin Block。比NATIVE类型具有更高的稳定性和容错能力,使用两个NV Block能够在一个NV Block失效的情况下从另外一个NV Block读取数据。
  3. NVM_BLOCK_DATASET:包含1到255个NV Block,1个RAM Block,0到n个ROM Block,1个Admin Block。

NvM模块提供了相应的接口函数管理逻辑块,为了能够使NvM更广泛的应用到汽车领域,根据不同的硬件资源,这些API可以被裁减使用,这种裁减分类三类:

  1. Class3 – 所有API都是支持的
  2. Class2 – 中等程度支持
  3. Class1 – 简单程度支持,这种裁减下,NVM_BLOCK_DATASET是不支持的

具体对应的的API列表在规范中可以查到,这里就不列出来了。

标签: Architecture Automotive AUTOSAR Software 软件构架 汽车 软件

评论(1)

Says:
Aug. 13, 2017, 4:39 a.m.

作者文章写的可以,有时间把模板详细分析下吧,我觉得这块很多工程师难以理解。架构其实还是基本能明白的。

欢迎留言

This template was modified by Edward