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管理器访问几个内存抽象模块。
图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功能介绍
图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模块的内存抽 |
图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配置
图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驱 动程序模块的实现情况 |