嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > 来自AUTOSAR规范的一个新模块——MemAcc

来自AUTOSAR规范的一个新模块——MemAcc

自R21-11版本,AUTOSAR Classic引入了一个新模块——Memory Access,以提供基于地址作为参数的接口方式,向上层提供能够访问不同存储设备(例如FLASH,EEPROM,RAM等)的能力。

Memory Access模块和Memory驱动在AUTOSAR架构中和过去的Fls/Eep属于同一层,但是区分为了硬件无关部分(也即MemAcc)和硬件相关部分(Mem)。

这样的设计可以满足不同的使用需求,例如:

  • 使用NvM/Fee(Ea)访问基于块的非易失型存储数据

  • OTA软件升级

  • 一般的基于地址的存储访问

基于此设计,过往的Fls/Eep的功能已经被包括,在未来的设计中将不再包括(笔者注:此为规范文档中说明,实际协议栈如何实现,或者如何保持兼容性,以具体协议栈代码为准)。

对于设备存储,我们一般如上图这样进行物理分段,几个关键词也即page, sector, bank。

一个存储设备能一次操作的最小单位,称之为page,单位为byte,几乎所有的存储设备都无法以单个byte为单位进行操作,所以page定义了一次访问操作的最小byte长度(8bytes/16bytes等等);基于对应存储设备能力的不同,还会细分为Read Page/Write Page。

为了提高性能,某些存储设备提供同样的单位时间内一次性读写多个page的能力,这样多个page的组合我们称之为page burst。

很多存储设备要求在进行写操作之前必须有擦除操作,为此定义了一个擦除单位的最小长度,称之为sector;sector的大小一般比page大,或者也可以通俗的理解,sector由众多连续的page组成;同样的,也有sector burst的定义,可以在一次擦除请求就可以对多个sector进行擦除。

对于多个连续且大小相同的sector,它们的组合我们成为sector batch;而一组sector batch又组成了bank。在bank范围内,无法在写操作进行的同时并行处理读请求。

MemAcc向上层抽象了底层存储细节,支持将不同存储设备,不连续的地址区域物理地址,映射为地址连续的虚拟存储(逻辑地址空间)。