首页 > 汽车技术 > 正文

Autosar NVM 介绍

2019-07-21 14:40:14·  来源:汽车ECU设计  
 
汽车ECU内存中存在着各式各样的变量,绝大多数变量随着ECU的掉电数据就丢失了。也有一部分十分重要的变量会伴随着整个ECU生命周期而一直存在。比如:车辆的VIN码
汽车ECU内存中存在着各式各样的变量,绝大多数变量随着ECU的掉电数据就丢失了。也有一部分十分重要的变量会伴随着整个ECU生命周期而一直存在。比如:车辆的VIN码,防盗钥匙,车辆下线配置字等等。而今天所说的Autosar NVM模块为ECU内所有NV(Non Volatile) data 进行管理与维护,并提供服务确保这些数据被正确的存储或备份。在Autsar NVM支持两种NV变量存储方式:

- EEPROM(EA : EEPROM Abstraction)

优点:读写速度快,寿命长

缺点:价格较高

- FLASH EEPROM模拟(FEE : Flash EEPROM Emulation)

优点:价格便宜

缺点:访问速度慢,擦写限制,寿命较短

Autosar NVM


Autosar NVM位于基础软件的服务层,并为为所有NV data的(初始化、读、写、控制)维护以及管理作提供了各种同步/异步服务。无论是EEPROM还是Flash模拟,都在这层被抽象为同一类型,直到MemIf层才会做出区分。


NVRAM Block

在Autosar中规定了四种 NVRAM Block,分别为 NV Block、RAM Block、ROM Block、Administrative Block。


- NV block

NV block是存储NV变量的基本结构,其中Header以及CRC校验非必须项。

[SWS_NvM_00125] ⌈The NV block is a basic storage object and represents a memory area consisting of NV user data and (optionally) a CRC value and (optionally) a NV block header.


- Ram block

由于NV变量的写入与读取都是一件相对较慢的操作,而应用层逻辑操作周期速度又太快。直接操作NV block显然不合适,所以在进行读写之前,我们会建议一个同样大小的Ram空间来操作、使用、存放这些还没有被写入或者读取的NV值。

在NVM中规定了permanent,temporary 两种类型。其中永久型在项目配置时就必须输入指定的RAM地址;而临时型不需要在项目配置期间就设定,而是

[SWS_NvM_00373] ⌈The RAM block data shall contain the permanently or temporarily assigned user data. ⌋ ( )

[SWS_NvM_00370] ⌈In case of permanently assigned user data, the address of the RAM block data is known during configuration time. ⌋ ( )


- Rom block 

ROM block 用于存储默认值,以便当NV block数据出现损坏时予以替换。

[SWS_NvM_00020] ⌈The ROM block is a basic storage object, resides in the ROM (FLASH) and is used to provide default data in case of an empty or damaged NV block.


- Administrative block

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

[SWS_NvM_00135] ⌈The Administrative block shall be invisible for the application and is used exclusively by the NvM module for security and administrative purposes of the RAM block and the NVRAM block itself. ⌋ ( )

[SWS_NvM_00054] ⌈The NvM module shall use an attribute field to manage the NV block write protection in order to protect/unprotect a NV block data field. ⌋ ( )

异步调用
 

 
由于NV data区域的访问速度较慢,所以NVM所支持的API多以异步调用为主。其核心函数为周期执行的NvM_MainFunction()。下图主要阐述了在异步调用中使用 Polling 和 Callback 两种方式来执行NvM_WriteBlock()操作。
 
- Polling
 

在NVM User 请求写入NvM_WriteBlock时,会将这个任务写入存储在队列里,并由后台NvM_MainFunction() 执行。Nvm user需要用polling 方式主动查询写入结果。如果返回NVM_REQ_PENDING,表示还没有执行完成,回复NVM_REQ_OK 表示执行成功。
 
- Callback 


在call back模式下,如果执行成功,NvM_MainFunction() 会主动调用call back 函数来提醒 NVM user 来查询结果。
​ 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号