AUTOSAR 中的内存服务 (MemStack)
1 MemStack ECU 抽象层和 MCAL 层简介
在本文中,讨论的主题是与 AUTOSAR 中的内存服务 (MemStack) 相关的 ECU 抽象层和 MCAL 层。
用于内存服务的 ECU 抽象层由内存接口 (MemIf)、闪存 EEPROM 仿真(FEE)和 EA(EEPROM 抽象)、外部闪存驱动程序和外部 EEPROM 驱动程序等模块组成。
MCAL 层由内部闪存驱动程序和内部 EEPROM 驱动程序组成。
内存接口(MemIf)负责从下层 Flash 和 EEPROM 模块中进行抽象,并为上层提供统一的地址空间。
2 模拟EEPROM
-
Flash EEPROM Emulation 的概念
EEPROM 和闪存都是非易失性存储器,由一组存储单元组成,每个单元保存一位或多位信息。
可以在字节或字边界上对 EEPROM 进行编程和擦除,这可以在单个单元上完成,而不会干扰其他值。
闪存可以在字或双字边界上编程,也可以使用更大的尺寸,但擦除只能在扇区边界上进行,其中扇区大小主要以Kilobytes为单位。Flash 中的数据以页(必须一次写入的最小字节数)为单位写入,并以扇区(必须一次擦除的最小字节数)为单位进行擦除。
闪存可用于存储数据,这些数据通常使用Flash EEPROM Emulation存储在 EEPROM 中,其中在闪存中实现基于记录的文件系统。
该文件系统中的记录是一组变量,由块的状态(记录+数据)、块的标识符和数据长度组成。
![](https://i-blog.csdnimg.cn/blog_migrate/cf02a26b3ba06155b15039e3520087e9.png)
图1 通用闪存块
当一个块被写入闪存时,它由记录和数据组成。
闪存 EEPROM 仿真需要至少两个闪存扇区。只有一个扇区是活动扇区,另一个是非活动扇区。数据被连续写入活动扇区,直到达到扇区限制。如果具有相同标识符的块要用更新后的数据写入,则将其写入下一个空闲地址空间,并且先前写入的地址空间将变为无效。
图2 Flash Memory Sector
当活动扇区已满或活动扇区可用空间小于该扇区要写入的块时,会发生块重组。重组是指将活动扇区中的数据复制到另一个擦除扇区,擦除当前活动扇区,另一个扇区成为活动扇区。在重组期间,只有块的最新条目被复制到新扇区。当当前活动扇区变满时,重复此过程。
AUTOSAR 中的 Flash EEPROM Emulation 模块负责为上层提供一个统一分段的 32 位虚拟线性地址空间。
FEE模块根据虚拟页面大小(物理页面大小的倍数)的配置来管理块的对齐。块是虚拟页面大小的倍数,虚拟页面大小是物理页面大小的倍数。虚拟页面大小不能小于物理页面大小。闪存中要写入、读取或擦除的数据使用闪存 EEPROM 仿真的概念进行管理。
Flash 驱动程序负责向上层异步提供基本的读、写和擦除功能。