AUTOSAR之NVM模块介绍

2022-05-25 15:22:14 浏览数 (1)

在AUTOSAR架构中,BSW层有一个存储器相关的模块Memory Stack,如下图所示:

图1 Memory Stack 示意

NVM:NVRAM Manager

MEMIF:Memory Abstraction Interface

FEE:Flash EEPROM Emulation

EA:EEPROM Abstraction

FLS:Flash Driver

EEP:EEPROM Driver

NVM模块可以和以下模块进行交互:

图2 可以和NVM交互的模块

NVM模块上层是RTE,下层是对接Flash Driver或者EEPROM Driver的接口,笔者对这里的理解,NVM就是属于一个连接上层APP和底层的一个接口,应用层在执行一些和存储相关的服务如写EOL数据或者更新DTC的时候,会调用NVM里面的函数,而NVM又根据不同的需求,整合了分别调用Flash和EEPROM的接口。

NVM里面的数据读写有两种同步机制,分别是Implicit synchronization(隐式同步)和Explicit synchronization(显式同步)。

1.Implicit synchronization(隐式同步)

在隐式同步中,应用层和NVM可以同时访问公用的RAM,就是应用层在读写时调用NVM里面的接口。

图3 隐式同步示意

这种情况下,一块RAM最好只映射到一个SW-C,并且在读写操作进行中,这块RAM里的数据不能改变。

写操作步骤:

(1)应用层将数据写入RAM

(2)应用层调用NvM_WriteBlock()函数,开始进入NVM执行操作

(3)应用层通过轮询方式检查NVM写操作结果,NVM执行写操作之后,应用层才可以更新RAM中的内容

2.Explicit synchronization(显式同步)

在这种情况下,NVM定义一个RAM Mirror,与应用层中的RAM进行数据交换,APP将数据写进RAM并且调用NVM的接口,NVM将数据从应用层RAM拷贝到RAM Mirror。

图4 显式同步示意

这种机制的好处就是应用层可以更有效地利用RAM。

写操作步骤:

(1)APP将数据填充进RAM

(2)应用层调用NvM_WriteBlock()函数,开始进入NVM执行操作

(3)应用层RAM中的数据拷贝进NVM RAM Mirror中以后就可以随意修改RAM的数据了

其他的一些特性:

(1)基于CRC的对比

用CRC校验来对比数据有无变化,如果无变化可以选择跳过写操作的配置选项

(2)错误恢复

在读取错误的时候可以读回默认值,在写错误时会有重试机制。

(3)写操作确认

当数据写入NV Memory后,会与RAM里的数据进行对比,如果对比不一致会重新写入。

0 人点赞