MemIf产品参考手册

缩写词注解

缩写词

英文全称

中文解释

NV

Non-Volatile

非易失性

NVM

Non-Volatile Manager

非易失性管理

MemIf

Memory Abstraction Interface

内存抽象接口

Fee

Flash EEPROM Emulation

Flash Eeprom仿真

Ea

EEPROM Abstraction

EEPROM抽象

Fls

Flash

Flash驱动程序

Eep

EEPROM Drive

Eeprom驱动程序

Tm

Task Manager

任务管理器

Det

Development Error Tracer

开发错误跟踪

Dem

Diagnostic Event Manager

诊断事件管理

BsW

Basic Software

基础软件

MCAL

Microcontroller Abstraction Layer

微控制器抽象层

简介

|C:\\Users\\f\\AppData\\Local\\Temp\\ksohtml932\\wps1.png|

图1-1 软件组件简介

内存抽象接口(MemIf)将从底层FEE或EA模块的数量中抽象出来,并在一个统一的线性地址空间上为上层提供一个虚拟分段,即允许NVRAM管理器访问几个内存抽象模块。

image1

图1-2 MemIf模块在AUTOSAR架构中的位置

AUTOSAR中的存储协议栈处于BSW基础软件层,包括存储器驱动层、存储器硬件抽象层、存储器服务层。存储协议栈软件是用来为整车电子模块(ECU)存储非易失性或者标定数据定义一套统一访问内存的服务软件。

参考资料

[1] AUTOSAR_SRS_EEPROMDriver.pdf,R19-11

[2] AUTOSAR_SRS_FlashDriver.pdf,R19-11

[3] AUTOSAR_SRS_MemoryHWAbstractionLayer.pdf,R19-11

[4] AUTOSAR_SRS_MemoryServices.pdf,R19-11

[5] AUTOSAR_SWS_EEPROMAbstraction.pdf,R19-11

[6] AUTOSAR_SWS_FlashEEPROMEmulation.pdf,R19-11

[7] AUTOSAR_SWS_MemoryAbstractionInterface.pdf,R19-11

[8] AUTOSAR_SWS_NVRAMManager.pdf,R19-11

功能描述

MemIf功能

MemIf功能介绍

image2

图2-1 存储协议栈软件架构图

存储协议栈软件架构图中的最底层灰色部分为存储栈的硬件控制器,这部分功能属于ECU的内部或外部FLASH(EEPROM)存储器设备,并实现存储栈FLASH或EEPROM数据存储单元的物理存储介质;存储栈软件架构图中的第二层粉红色部分为微控制器抽象层(MCAL),这部分功能属于ECU的内部或外部FLASH(EEPROM)存储器设备抽象层,并实现存储栈FLASH或EEPROM存储设备的硬件控制驱动程序,即直接操作硬件控制器寄存器,提供写入、读取、擦除、比较等API接口给上层FEE或EA模块使用;存储栈软件架构图中的第三层淡绿色部分为存储器抽象层(FEE和EA),这部分功能属于ECU的内部或外部FLASH(EEPROM)存储器设备抽象层,并实现存储栈的存储设备抽象和接口映射,即存储栈抽象层不涉及任何硬件的操作,只是申请对内存进行行为操作的请求与内存地址映射,由MemIf接口层提供统一FLASH或EEPROM内存写入、读取、擦除、比较等接口给存储栈服务层使用,存储栈中所有的状态控制类、操作结果等数据类型也是由MemIf接口层来实现;存储栈软件架构图中的最顶层淡蓝色部分为非易失性存储管理部分,这部分功能属于ECU存储栈非易失性数据管理与维护,并实现存储栈中单个Block或多个Block的数据写入、读取、擦除等API接口,便于存储栈用户使用和对非易失性数据的需求和管理。

MemIf功能实现

MemIf对FLASH或EEPROM存储器的抽象,属于硬件无关层。其作用为:

  • 允许NVM访问多个存储抽象模块(Fee/Ea)

  • 对上层提供统一线性地址空间的虚拟分段

  • 该模块的API都映射到下层存储抽象模块的API(Fee/Ea)

  • 抽象ROM的功能,无论使用Flash还是EEPROM,从MemIf模块开始指令没有任何区别,代码通用,彻底脱离硬件。

  • 抽象ROM的设备,MemIf模块眼中,ECU只有3种区别:只使用Flash,只使用EEPROM,两者同时使用。

  • 给Flash或者EEPROM或者同时给两者一个Device Index,根据Device Index将NvM模块的指令转发给对应的Fee模块或者Ea模块。

  • MemIf模块模块没有初始化,没有配置指针,没有状态指针

源文件描述

表3-1 MemIf组件文件描述

文件

说明

MemIf_Cfg.h

定义MemIf模块预编译时用到的配置参数。

MemIf_Cfg.c

定义MemIf模块中连接时用到的配置参数。

MemIf.h

MemIf模块头文 件,包含了API函数的扩展声明并定义了端口的数据结构。

MemIf .c

MemIf模块源文件,包含了API函数的实现。

MemIf_Types.h

包含MemIf模块的类型定义

EMEIF_开头的枚举常量

MemIf_MemMap.h

包含MemIf模块的内存抽

image3

图3-1 MemIf组件文件交互关系图

API接口

类型定义

MemIf_StatusType类型定义

名称

MemIf_StatusType

类型

Enumeration

范围

模块未初始化:MEMIF_UNINIT = 0

空闲或没有需要处理的Job :MEMIF_IDLE = 1

模块正在处理job,不接受新job :MEMIF_BUSY = 2

MEMIF_BUSY_INTERNAL = 3

描述

用于描述内存协议栈的状态的数据类型

描述Fee/Fls或Ea/Eep模块的模块状态

MemIf_JobResultType类型定义

名称

MemIf_JobResultType

类型

Enumeration

范围

Job处理成功:MEMIF_JOB_OK

Job处理以error结束:MEMIF_JOB_FAILED

Job正在处理MEMIF_JOB_PENDING

Job已经取消MEMIF_JOB_CANCELLED

描述

用于描述内存协议栈的工作队列的任务处理结果的数据类型

描述Fee/Fls或Ea/Eep模块的作业结果

MemIf_ModeType类型定义

名称

MemIf_ModeType

类型

Enumeration

范围

Slow模式:MEMIF_MODE_SLOW

Fast模式:MEMIF_MODE_FAST

描述

用于描述内存协议栈的内存操作模式的数据类型

描述Fee/Fls或Ea/Eep模块的处理模式

Std_ReturnType类型定义

名称

Std_ReturnType

类型

uint8

范围

E_OK:

对同步指令,表示指令执行成功

对异步指令,表示指令被队列接受

E_NOT_OK:

对同步指令,表示指令执行失败

对异步指令,表示指令被队列拒绝

描述

用于描述内存协议栈的内存操作模式的数据类型

描述Fee/Fls或Ea/Eep模块的处理模式

输入函数描述

输入模块

API

Fee

Fee_Cancel

Fee

Fee_EraseImmediateBlock

Fee

Fee_GetJobResult

Fee

Fee_GetStatus

Fee

Fee_InvalidateBlock

Fee

Fee_Read

Fee

Fee_Write

Fee

Fee_SetMode

Ea

Ea_Cancel

Ea

Ea_EraseImmediateBlock

Ea

Ea_GetJobResult

Ea

Ea_GetStatus

Ea

Ea_InvalidateBlock

Ea

Ea_Read

Ea

Ea_Write

Ea

Ea_SetMode

Det

Det_ReportError

静态接口函数定义

在这里插入图片描述

图4-1 MemIf模块的内存抽象API接口映射

MemIf_SetMode函数定义

函数名称:

MemIf_SetMode

函数原型:

FUNC(void, MEMIF_CODE) MemIf_SetMode

(

VAR(MemIf_ModeType, AUTOMATIC) Mode

);

服务编号:

0x01

同 步/异步:

同步

是 否可重入:

不可重入

输入参数:

Mo de:Eep设备驱动程序的工作模式

值 域 :

MEMIF_MODE_SLOW

MEMIF_MODE_FAST

输入 输出参数:

输出参数:

返回值:

功能概述:

调用所有底层内存抽 象模块的SetMode函数;

MemIf_SetMode同时调 用Fee_SetMode或者Ea_SetMode;

MemIf_SetMode、Fee_Se tMode、Ea_SetMode都是同步指令

MemIf_Read函数定义

函数名称:

MemIf_Read

函数原型:

FUNC(Std_ReturnType, MEMIF_CODE) MemIf_Read

(

VAR(uint8, AUTOMATIC) DeviceIndex,

VAR(uint16, AUTOMATIC) BlockNumber,

VAR(uint16, AUTOMATIC) BlockOffset,

P2VAR(uint8, AUTOMATIC, MEMIF_APPL_DATA) DataBufferPtr,

VAR(uint16, AUTOMATIC) Length,

);

服务编号:

0x02

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

BlockNumber:逻辑块序列编号

值 域:

0 -65535

BlockOffset:逻辑块偏移量

值 域:

0 -65535

Length:数据长度

值 域:

0 -65535

输入 输出参数:

输出参数:

Da taBufferPtr:指向缓冲区内存的数据指针

值 域:

返回值:

如果对内存 抽象接口使能开发错误检测,并且根据需 求规范检测到开发错误,则函数返回E_NOT _OK,否则返回底层模块调用函数的返回值

功能概述:

调用由参数DeviceIndex选择的 底层内存抽象模块的Read函数;

根据DeviceIndex的不同, MemIf_Read将调用Fee_Read或者Ea_Read;

MemIf_Read是同步指令,Fe e_Read或者Ea_Read是异步指令,注意区分

MemIf_Write函数定义

函数名称:

MemIf_Write

函数原型:

FUNC(Std_ReturnType, MEMIF_CODE) MemIf_Write

(

VAR(uint8, AUTOMATIC) DeviceIndex,

VAR(uint16, AUTOMATIC) BlockNumber,

P2VAR(uint8, AUTOMATIC, MEMIF_APPL_DATA) DataBufferPtr

);

服务编号:

0x03

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

BlockNumber:逻辑块序列编号

值 域:

0 -65535

Da taBufferPtr:指向缓冲区内存的数据指针

值 域:

输入 输出参数:

输出参数:

返回值:

如果对内存 抽象接口使能开发错误检测,并且根据需 求规范检测到开发错误,则函数返回E_NOT _OK,否则返回底层模块调用函数的返回值

功能概述:

调用由参数DeviceIndex选择的 底层内存抽象模块的Write函数;

根据DeviceIndex的不同,Mem If_Write将调用Fee_Write或者Ea_Write;

MemIf_Write是同步指令,Fee_ Write或者Ea_Write是异步指令,注意区分

MemIf_Cancel函数定义

函数名称:

MemIf_Cancel

函数原型:

FUNC(void, MEMIF_CODE) MemIf_Cancel

(

VAR(uint8, AUTOMATIC) DeviceIndex

);

服务编号:

0x04

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

输入 输出参数:

输出参数:

返回值:

功能概述:

调用由参数DeviceIndex选择的底 层内存抽象模块的Cancel函数;

根据DeviceIndex的不同,MemIf_ Cancel将调用Fee_Cancel或者Ea_Cancel;

MemIf_W rite、Fee_Write、Ea_Write都是同步指令

MemIf_GetStatus函数定义

函数名称:

MemIf_GetStatus

函数原型:

FUNC(MemIf_StatusType, MEMIF_CODE) MemIf_GetStatus

(

VAR(uint8, AUTOMATIC) DeviceIndex

);

服务编号:

0x05

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

输入 输出参数:

输出参数:

返回值:

MemIf_StatusType

返回存储栈作业的执行状态

功能概述:

调用由参数DeviceIndex选择的底层 内存抽象模块的GetStatus函数;

根 据DeviceIndex的不同,MemIf_GetStatus 将调用Fee_GetStatus或者Ea_GetStatus;

MemIf_GetStatus、Fe e_GetStatus、Ea_GetStatus都是同步指令

MemIf_GetJobResult函数定义

函数名称:

MemIf_GetJobResult

函数原型:

FUNC(MemIf_JobResultType, MEMIF_CODE) MemIf_GetJobResult

(

VAR(uint8, AUTOMATIC) DeviceIndex

);

服务编号:

0x06

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

输入 输出参数:

输出参数:

返回值:

如果对内存抽象接口使能开发错误检 测,并且根据需求规范检测到开发错误, 那么函数应该返回MEMIF_JOB_FAILED,否 则它应该返回底层模块调用函数的返回值

功能概述:

调用由参数DeviceIndex选择的底层内存 抽象模块的GetJobResult函数;

根据Device Index的不同,MemIf_GetJobResult将调用 Fee_GetJobResult或者Ea_GetJobResult;

MemIf_GetJobResult、Fee_GetJ obResult、Ea_GetJobResult都是同步指令

MemIf_InvalidateBlock函数定义

函数名称:

MemIf_InvalidateBlock

函数原型:

FUNC(Std_ReturnType, MEMIF_CODE) MemIf_InvalidateBlock

(

VAR(uint8, AUTOMATIC) DeviceIndex,

VAR(uint16, AUTOMATIC) BlockNumber

);

服务编号:

0x07

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

BlockNumber:逻辑块序列编号

值 域:

0 -65535

输入 输出参数:

输出参数:

返回值:

如果对内存抽 象接口使能开发错误检测,并且根据需求 规范检测到开发错误,则函数返回E_NOT_O K,否则返回底层模块调用函数的返回值。

功能概述:

调用由参 数DeviceIndex选择的底层内存抽象模块的

InvalidateB lock函数;根据DeviceIndex的不同,

MemIf_Invalid ateBlock将调用Fee_InvalidateBlock或者

Ea_InvalidateBlo ck;MemIf_InvalidateBlock是同步指令,

Fee_InvalidateBlock、Ea_ InvalidateBlock都是异步指令,注意区分

MemIf_GetVersionInfo函数定义

函数名称:

MemIf_GetVersionInfo

函数原型:

FUNC(void, MEMIF_CODE) MemIf_GetVersionInfo

(

P2VAR(Std_VersionInfoType, AUTOMATIC,

MEMIF_APPL_DATA) VersionInfoPtr

);

服务编号:

0x08

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

输入 输出参数:

输出参数:

Ver sionInfoPtr:指向版本信息结构体的指针

值 域:

返回值:

功能概述:

返回MemIf模块的软件版本信息

MemIf_EraseImmediateBlock函数定义

函数名称:

MemIf_EraseImmediateBlock

函数原型:

FUNC(Std_ReturnType, MEMIF_CODE) MemIf_EraseImmediateBlock

(

VAR(uint8, AUTOMATIC) DeviceIndex,

VAR(uint16, AUTOMATIC) BlockNumber

);

服务编号:

0x09

同步/异步:

同步

是 否可重入:

不可重入

输入参数:

DeviceIndex:设备索引编号

值 域:

0-255

BlockNumber:逻辑块序列编号

值 域:

0 -65535

输入 输出参数:

输出参数:

返回值:

如果对内存抽 象接口使能开发错误检测,并且根据需求 规范检测到开发错误,则函数返回E_NOT_O K,否则返回底层模块调用函数的返回值。

功能概述:

调用 由参数DeviceIndex选择的底层内存抽象模 块的EraseImmediateBlock函数;

根据Dev iceIndex的不同,MemIf_EraseImmediateB lock将调用Fee_EraseImmediateBlock或者

Ea_EraseImmediateBlock;

MemIf_EraseImmediateBlock是同步指令,

Fee_EraseImmediateBlock、Ea_Eras eImmediateBlock都是异步指令,注意区分

可配置函数定义

无。

配置

表5‑1属性描述

UI名称

该配置项在配置工具界面显示的名称

取值范围

该配置项允许的取值区间

默认取值

该配置项默认的配置值

参数描述

该配置项在标准的AUTOSAR_EcucParamDef.arxml文件中的描述

依赖关系

该配置项与其他模块或配置项的关系

MemIfGeneral配置

image4

图5-1 MemIf General容器配置图

表5-2 MemIf General属性描述

UI 名称

描述

Me mIfGen eralDe vError Detect

取值范围

STD_ON,STD_OFF

默 | 认 | 取 | 值 |




S T D _ O F F

参数描述

是否开启对 开发过程中错误的检查

打开或关 闭开发错误检测和通知

依赖关系

依赖于DET模块的存在性

Mem IfGene ralNum berOfD evices

取值范围

0…2

默认取值

0

参数描述

对应 Fee和Ea的数量总和,即 底层硬件的数量总和;

底层内 存抽象模块的具体数量

0:存储协议 栈中没有Fls和Eep模块

1:存储协议栈中存在F ls或Eep模块的其中一种

2:存储协议栈中 同时存在Fls和Eep模块

依赖关系

依赖 于底层存储设备Fls或Ee p驱动程序的具体实现;

依赖于MemIfGeneral FeeMapSupport的配置;

依赖于MemIfGenera lEaMapSupport的配置;

Me mIfGen eralVe rsionI nfoApi

取值范围

STD_ON,STD_OFF

默认取值

STD_OFF

参数描述

是否 使能版本检查API函数;

预处理器开关,使 能/禁止API接口,以读 出模块的软件版本信息

依赖关系

Me mIfGen eralUs eFunci ontApi

取值范围

STD_ON,STD_OFF

默认取值

STD_OFF

参数描述

预处理编译 宏开关,用于使能/禁止 API函数接口的使用方法

STD_ON :使用常规函数API接口

STD_O FF:使用宏函数API接口

依赖关系

M emIfGe neralF eeMapS upport

取值范围

STD_ON,STD_OFF

默认取值

STD_OFF

参数描述

预处 理编译宏开关,以使能/ 禁止API接口,用来支持 Fee模块的内存抽象映射

依赖关系

依赖于底层Fls驱 动程序模块的实现情况

MemIfG eneral EaMapS upport

取值范围

STD_ON,STD_OFF

默认取值

STD_OFF

参数描述

预处 理编译宏开关,以使能/ 禁止API接口,用来支持 Ea模块的内存抽象映射

依赖关系

依赖于底层Eep驱 动程序模块的实现情况