关于configurator的Nvm模块的记录

1.定义

        "NVM模块旨在从应用程序中抽象化非易失性存储器的使用,例如EEPROM或Flash。所有对非易失性存储器的访问都是基于块的。为避免冲突和数据不一致,NVM应该是唯一可以访问非易失性存储器的模块。"

        "NVM模块通过访问MEMIF(内存抽象接口模块)来抽象化FEE(Flash EEPROM模拟)和EA(EEPROM抽象)模块,因此NVM模块是与硬件无关的。FEE和EA模块用于抽象化对Flash或EEPROM驱动程序的访问。为了选择适当的设备(FEE或EA),NVM使用由MEMIF提供的句柄。"

理解:

1.NVM模块的目的是隐藏应用程序对非易失性储存其的操作细节,使其能够独立于底层硬件,成为一个驱动。(NVM是BSW,MEMIF是MCal?)

2.NVM模块通过访问MEMIF(Memory Abstraction Interface)来实现对储存器的访问抽象化,MEMIF模块抽象化了FEE(Flash EEPROM Emulation)和EA(EEprom Abstraction)模块。

2.NVM模块的结构

App通常不会直接访问BSW模块,正常通过RTE来访问BSW接口。

3.Functional Description

3.1Safety Features
3.1.1 Block ID Check

Nvm会检查当前处理Nvm块的数据,Nvm会计算Nvm Block ID、Data index和实际数据的CRC。

3.1.2 Automatic Block Length

这个没看懂。

3.2 Initialization

在NVM模块被使用前需要初始化,NVM所依赖的模块需要在NVM初始化之前初始化。

建议的初始化顺序:

1.NV device driver for internal devices(FLS/EEP)

2.Low level driver that an external NV device driver might depend on(e.g. DIO,SPI)

3.Drivers for external NV device(e.g. external EEP or FLS)

4.NV device abstraction modules(EA/FEE)

5.Non-Volatile Manager(NVM)

Nvm的初始化包括2步:1)Nvm_Init() 2.NvM_ReadAll()

3.2.1 Start-up

NVRAM管理器的基本初始化是由请求NvM_Init()完成的。例如,它应由ECU状态管理器专门调用。由于有关ECU启动时间的严格约束,NvM_Init()请求不包含已配置NVRAM块的基本初始化。NvM_Init()请求重置NVM的内部变量,如队列和状态机。(不知道在讲什么)

3.2.2 Initialization of the Data Blocks

单个块的初始化通常也由ECU状态管理器通过调用NvM_ReadAll()来启动。所有没有有效RAM数据的块,并有SelectBlockForReadAll设置将从NV内存或ROM(如果可用)重新加载。所有其他块不会被重新加载,它们必须由应用程序调用NvM_ReadBlock()手动加载,但它们将被初始化,例如它们的写保护和状态。

3.3 Main Function
3.3.1 Hardware Independence

NVRAM管理器独立于底层内存硬件。它访问MEMIF(内存抽象接口)的API。MEMIF为NVM抽象了模块FEE (Flash EEPROM Emulation)和EA (EEPROM Abstraction)。FEE和EA用于在Flash或EEPROM设备中存储数据块。NVM使用MEMIF提供的设备句柄(设备ID)来选择将块存储在哪个FEE或EA实例中。

3.3.2 Synchronous Requests

NVM API服务分为同步请求和异步请求。
同步服务在被调用时立即执行。它们在调用任务的上下文中执行。这意味着,该行为取决于调用任务的特征,而不是NVM。例如,如果调用任务是一个非抢占任务,则同步NVM请求将被执行,直到它完成。否则,如果调用任务为抢占任务,则同步NVM请求可能会被其他优先级更高的任务抢占。
这一章目前不太用了解

3.3.3 Asynchronous Requests

这一章目前不太用了解

3.3.4 API Configuration Classes and additional API Services

根据客户的需求,可以定制NVM的范围。指定了三个配置类来提供不同数量的NVM功能/函数:

API configuration class 1:使用了一组最少的API服务。没有实现排队和作业优先级。以下功能可用:

> NvM_Init()

> NvM_GetErrorStatus()

> NvM_SetRamBlockStatus()

> NvM_ReadAll()

> NvM_WriteAll()

> NvM_CancelWriteAll()

API configuration class 2:中间API服务集。实现了排队和作业优先级。根据API配置类1,还提供以下功能:

> NvM_SetDataIndex()

> NvM_GetDataIndex()

> NvM_ReadBlock()

> NvM_WriteBlock()

> NvM_RestoreBlockDefaults()

> NvM_CancelJobs()

API configuration class 3:所有API服务可用。以下功能可用于API配置类2:

> NvM_SetBlockProtection()

> NvM_EraseNvBlock()

> NvM_InvalidateNvBlock()

NvM_SetRamBlockStatus()和NvM_GetVersionInfo()函数可以通过配置工具另外启用/禁用。函数NvM_SetBlockLockStatus()总是独立于API配置类而可用。

3.3.5 Block Handling
3.3.5.1 NV Blocks and Block Handles

打算存储在NV内存中的每个应用程序数据包被视为一个块。对于每个块使用一个唯一的块句柄(Block ID)。对于应用程序,(RAM)块只是与该块关联的变量之一。要将该变量写入NV内存,它调用NvM_WriteBlock()服务,并使用映射到该变量的块句柄。块句柄名称在NVM的配置过程中给出。它们通过包含NvM.h发布到应用程序。

``````

3.3.12 Erase and Invalidate

有两个服务指定用于使NV块不可读:NvM_EraseNvBlock()和NvM_InvalidateNvBlock()。
使块失效比擦除块要快得多,因为只有状态信息会失效

``````

4.Integration(集成)

本章给出了MICROSAR NVM集成到ECU应用环境中的必要信息。

4.1 交付范围

NVM的交付包含5.1.1和5.1.2章中描述的文件:

4.1.1 Static File
File NameDescription
NvM.h该文件不能被修改。定义NVM的接口,只有这个文件可以被app include
NvM_Cbk.h该文件不能被用户修改。
包含EEPROM驱动程序调用的回调函数的声明
NvM_Types.h该文件不能被用户修改。
定义NVM使用的一般类型。
NvM.c / NvM.lib/NvM.a该文件不能被用户修改。
NVM的实现,作为对象库交付。
NvM_Act / NvM_Crc / NvM_JobProc / NvM_Qry / NvM_Queue.c *.h这些是NvM内部使用的文件。
如果NVM作为对象交付,那么这些部分是NVM .lib的内容。
4.1.2 Dynamic Files

动态文件由配置工具达芬奇配置器生成。请勿手动修改。

File NameDescription
NvM_Cfg.c它包含NVM的配置参数,可以在编译NVM .c后修改。
NvM_Cfg.hNVM的公共配置参数。它们(或可能)对NvM的用户也很重要,或者它们可能会影响NvM的API。它还包含NvM及其用户使用的公共类型和符号声明。
NvM_PrivateCfg.h包含参数以及类型和符号声明,它们是NvM私有的,也就是说,它们只影响内部行为。该文件旨在仅由NvM的源代码包含。

4.2 Critical Sections(临界区)

为了保护关键代码免受中断,NvM使用以下关键区:
> NvM_NVM_EXCLUSIVE_AREA_0

4.3 Include Structure(包含结构)

下图说明了包含的文件的层次结构。它还表明Std_Types.h和Nvm.h必须包含在应用程序中。

4.4 Compiler Abstraction and Memory Mapping

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值