Fee产品参考手册
缩写词注解
缩写词* |
英文全称 |
中文解释 |
EA |
EEPROM Abstraction |
Eeprom抽象模块 |
FEE |
Flash EEPROM Emulation |
Flash模拟Eeprom抽象模块 |
MemIf |
Memory Abstraction Interface |
存储抽象接口模块 |
NvM |
NVRAM Manager |
非易失性存储管理模块 |
(Logical) block |
Smallest writable / erasable unit as seen by the modules user. Consists of one or more virtual pages. |
上层模块 可操作单元(虚拟页的整数倍) |
Virtual page |
May consist of one or several physical pages |
虚拟页(物理页的整数倍) |
Bank |
May consist of one or several physical sectors |
Fee实现模拟Eeprom的擦除块 |
简介
Fee模块通过模拟Eeprom(不用先擦除再写入)主要实现基于Block的非易失性数据读、写功能,同时支持Immediate Block的擦除,支持Block的无效操作,支持存储快慢模式的切换,支持任务的取消机制,支持模块状态及任务结果的获取。
Fee模块处于AUTOSAR架构中的存储硬件抽象层,其下层模块为Flash驱动模块,上层模块为MemIf、NvM。
Fee模块实现上层模块基于Block在Flash上的读写、无效、擦除(Immediate)操作。
参考资料
[1] AUTOSAR_SWS_FlashEEPROMEmulation.pdf,R19-11
[2] AUTOSAR_SWS_FlashDriver.pdf,R19-11
[3] AUTOSAR_SWS_MemoryAbstractionInterface.pdf,R19-11和4.2.2
[4] AUTOSAR_SWS_NVRAMManager.pdf,R19-11和4.2.2
功能描述
模块初始化
模块初始化功能介绍
Fee模块的初始化会加载Flash中存储的所有Block的状态及其存储地址等信息,以及计算存储新Block数据及管理信息的地址。
模块初始化功能实现
因为Fee初始化可能涉及大量的Flash读操作,以及可能发生的Flash擦除、写入操作,通常耗时较长。所以Fee的初始化通过异步实现,Fee_Init加载初始化任务,由Fee_MainFunction来实际执行。
Block操作功能
Block操作功能介绍
Fee提供基于Block的读、写、无效、擦除(Immediate)操作,实现Block数据在Flash上的非易失性存储功能。
Block操作功能实现
Fee模块对Block的操作是单任务的,同一时间只能处理一个任务,任务
处理过程中不能加载新的任务。
Fee模块对Block的操作都是通过异步机制实现,通过调用Fee_Read,
Fee_Write,Fee_InvalidateBlock,Fee_EraseImmediateBlock加载任务,在Fee_MainFunction中实际执行。
Block的区分通过参数BlockNumber决定,各个Block的BlockNumber
唯一,存储栈集成时BlockNumber的配置需要与NvMDatasetSelectionBits及关联NvM模块中Block的NvMBlockManagementType适配。
任务的结果支持两种机制反馈给上层模块:
Polling:实现接口Fee_GetJobResult供上层随时获取Job结果;
Notification:任务成功/失败通过调用上层回调函数通知,如NvM_JobEndNotification/NvM_JobErrorNotification;
配置为Immediate的Block才支持Fee_EraseImmediateBlock操作,且在
调用Fee_Write前需要先执行完Fee_EraseImmediateBlock任务。
Flash访问功能
Flash访问功能介绍
Fee功能的实现依赖于通过Flash驱动实现Flash的擦除、读、写功能,以及任务取消,任务结果获取,快慢模式设置等机制。
Flash访问功能实现
Flash驱动中Flash数据的擦除、读、写同样通过异步机制实现,Fee模块与Flash驱动之间任务结果的交互同样分两种机制:
Polling:Fee_MainFunction中调用Fls_GetJobResult获取Job结果;
Notification:任务成功/失败Flash驱动通过调用Fee回调函数通知(Fee_JobEndNotification/Fee_JobErrorNotification);
错误检测功能
错误检测功能介绍
Fee模块实现DET开发错误和DET运行时错误检测及报错。
错误检测功能实现
Type or error |
Relevance |
Related error code |
Val ue[hex] |
未初始化 |
De velopment |
FEE_E_UNINIT |
0x01 |
BlockNumber错误 |
De velopment |
FEE_E_INVALID_BLOCK_NO |
0x02 |
Block offset错误 |
De velopment |
FEE_E_INVALID_BLOCK_OFS |
0x03 |
数据指针错误 |
De velopment |
FEE_E_PARAM_POINTER |
0x04 |
Block length错误 |
De velopment |
FEE_E_INVALID_BLOCK_LEN |
0x05 |
Fee初始化失败 |
De velopment |
FEE_E_I NIT_FAILED(R20_11已删除) |
0x09 |
Bus y状态请求新任务 |
Runtime |
FEE_E_BUSY |
0x06 |
无任务正在执行 时请求任务取消 |
Runtime |
FEE_E_INVALID_CANCEL |
0x08 |
源文件描述
表3-1 Fee组件文件描述
文件 |
说明 |
Fee_Cfg.h |
定义Fee模块PC配置的宏定义。 |
Fee_Cfg.c |
定义Fee模块PC/PB配置的结构体参数。 |
Fee.h |
实现Fee模块全部外 部接口(除了回调函数)的声明,以及模块内部宏定义。 |
Fee.c |
作为Fee模块的核 心文件,实现Fee模块全部对外接口,以及实现Fee模块功 能所必须的local函数,local宏定义,local变量定义。 |
Fee_Cbk.h |
实现Fee模块全部回调函数的声明。 |
Fee_Types.h |
实现PB/PC配置参数结构体类型的定义。 |
Fee_MemMap.h |
实现Fee模块内存布局。 |
Fee_ InternalTypes.h |
实现Fee内部管理数据类型的定义。 |
图3-1 Fee组件文件交互关系图
API接口
类型定义
Fee_ConfigType类型定义
名称 |
Fee_ConfigType |
类型 |
struct |
范围 |
无 |
描述 |
Fee模块配置数据结构体类型 |
输入函数描述
输入模块 |
API |
Fls |
Fls_Cancel |
Fls_Erase |
|
Fls_GetJobResult |
|
Fls_Read |
|
Fls_SetMode |
|
Fls_Write |
|
SchM |
SchM_Enter_Fee |
SchM_Exit_Fee |
|
Det |
Det_ReportRuntimeError |
Det_ReportError |
|
NvM |
NvM_JobEndNotification |
NvM_JobErrorNotification |
静态接口函数定义
Fee_Init函数定义
函数名称: |
Fee_Init |
||
函数原型: |
void Fee_Init (const Fee_ConfigType* ConfigPtr) |
||
服务编号: |
0x00 |
||
同 步/异步: |
异步 |
||
是 否可重入: |
否 |
||
输入参数: |
ConfigPtr |
值 域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
F ee模块初始化任务加载 |
Fee_SetMode函数定义
函数名称: |
Fee_SetMode |
||
函数原型: |
void Fee_SetMode (MemIf_ModeType Mode) |
||
服务编号: |
0x01 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
Mode |
值 域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
请求设置存储 模式(SLOW/FAST) |
Fee_Read函数定义
函数名称: |
Fee_Read |
||
函数原型: |
Std_ReturnType Fee_Read ( uint16 BlockNumber, uint16 BlockOffset, uint8* DataBufferPtr, uint16 Length) |
||
服务编号: |
0x02 |
||
同步/异步: |
异步 |
||
是 否可重入: |
否 |
||
输入参数: |
BlockNumber BlockOffset Length |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
DataBufferPtr |
||
返回值: |
Std_ReturnType |
||
功能概述: |
请求Block的读任务 |
Fee_Write函数定义
函数名称: |
Fee_Write |
||
函数原型: |
Std_ReturnType Fee_Write ( uint16 BlockNumber, const uint8* DataBufferPtr) |
||
服务编号: |
0x03 |
||
同步/异步: |
异步 |
||
是 否可重入: |
否 |
||
输入参数: |
BlockNumber DataBufferPtr |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
Std_ReturnType |
||
功能概述: |
请求Block的写任务 |
Fee_Cancel函数定义
函数名称: |
Fee_Cancel |
||
函数原型: |
void Fee_Cancel (void) |
||
服务编号: |
0x04 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
请求正 在执行的任务取消 |
Fee_GetStatus函数定义
函数名称: |
Fee_GetStatus |
||
函数原型: |
MemIf_StatusType Fee_GetStatus (void) |
||
服务编号: |
0x05 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
MemIf_StatusType |
||
功能概述: |
获 取Fee模块当前状态 |
Fee_GetJobResult函数定义
函数名称: |
Fee_GetJobResult |
||
函数原型: |
Me mIf_JobResultType Fee_GetJobResult (void) |
||
服务编号: |
0x06 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
Me mIf_JobResultType |
||
功能概述: |
获取当前任务结果 |
Fee_InvalidateBlock函数定义
函数名称: |
Fe e_InvalidateBlock |
||
函数原型: |
Std_ReturnType Fe e_InvalidateBlock (uint16 BlockNumber) |
||
服务编号: |
0x07 |
||
同步/异步: |
异步 |
||
是 否可重入: |
否 |
||
输入参数: |
BlockNumber |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
Std_ReturnType |
||
功能概述: |
请求Block无效任务 |
Fee_GetVersionInfo函数定义
函数名称: |
F ee_GetVersionInfo |
||
函数原型: |
void F ee_GetVersionInfo (Std_ VersionInfoType* VersionInfoPtr) |
||
服务编号: |
0x08 |
||
同步/异步: |
同步 |
||
是 否可重入: |
是 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
VersionInfoPtr |
||
返回值: |
无 |
||
功能概述: |
获取Fe e模块软件版本信息 |
Fee_EraseImmediateBlock函数定义
函数名称: |
Fee_Er aseImmediateBlock |
||
函数原型: |
Std_ReturnType Fee_Er aseImmediateBlock (uint16 BlockNumber) |
||
服务编号: |
0x09 |
||
同步/异步: |
异步 |
||
是 否可重入: |
否 |
||
输入参数: |
BlockNumber |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
Std_ReturnType |
||
功能概述: |
请求立 即Block的擦除任务 |
Fee_JobEndNotification函数定义
函数名称: |
Fee_J obEndNotification |
||
函数原型: |
void Fee_J obEndNotification (void) |
||
服务编号: |
0x10 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
Flash访问(异 步操作)成功通知 |
Fee_JobErrorNotification函数定义
函数名称: |
Fee_Job ErrorNotification |
||
函数原型: |
void Fee_Job ErrorNotification (void) |
||
服务编号: |
0x11 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
Flash访问(异 步操作)失败通知 |
Fee_MainFunction函数定义
函数名称: |
Fee_MainFunction |
||
函数原型: |
void Fee_MainFunction (void) |
||
服务编号: |
0x12 |
||
同步/异步: |
同步 |
||
是 否可重入: |
否 |
||
输入参数: |
无 |
值域: |
无 |
输入 输出参数: |
无 |
||
输出参数: |
无 |
||
返回值: |
无 |
||
功能概述: |
Fee模块 的周期调度主函数 |
可配置函数定义
无。
配置
FeeGeneral
图5-1 FeeGeneral
表5-1 FeeGeneral
UI名称 |
描述 |
|||
Fee DevErrorDetect |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
是否使能 DET开发错误检测机制 |
|||
依赖关系 |
依赖于Det模块开 发错误报错接口的支持 |
|||
FeeMain FunctionPeriod |
取值范围 |
0 .. INF |
默 认取值 |
0.01 |
参数描述 |
Fee_Ma inFunction的调度周期 |
|||
依赖关系 |
无 |
|||
FeeNvmJobE ndNotification |
取值范围 |
配置项0-1 属性,配置类型string |
默 认取值 |
无 |
参数描述 |
任务执行成功通知 |
|||
依赖关系 |
依赖于上 层模块相应回调函数名 |
|||
FeeNvmJobErr orNotification |
取值范围 |
配置项0-1 属性,配置类型string |
默 认取值 |
无 |
参数描述 |
任务执行失败通知 |
|||
依赖关系 |
依赖于上 层模块相应回调函数名 |
|||
FeePollingMode |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
Fla sh访问是否使能轮询模 式,反之则为通知模式 |
|||
依赖关系 |
通知模式需要F lash驱动相应功能支持 |
|||
FeeSe tModeSupported |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
是否使能Fee_SetMode |
|||
依赖关系 |
依赖于Fla sh驱动相应功能的使能 |
|||
Fee VersionInfoApi |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
是否支 持Fee_GetVersionInfo |
|||
依赖关系 |
无 |
|||
FeeV irtualPageSize |
取值范围 |
0 .. 65535 |
默 认取值 |
8 |
参数描述 |
虚拟页大小 |
|||
依赖关系 |
关联Flash 驱动的物理页的整数倍 |
|||
FeeUse rCbkHeaderFile |
取值范围 |
配置属性 0-N,配置类型string |
默 认取值 |
无 |
参数描述 |
Fee调用上层模块 回调函数声明的头文件 |
|||
依赖关系 |
回 调函数声明的头文件名 |
|||
FeeCancelApi |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
是否使能Fee_Cancel |
|||
依赖关系 |
依赖于Fla sh驱动相应功能的使能 |
|||
FeeInitErr orNotification |
取值范围 |
配置项0-1 属性,配置类型string |
默 认取值 |
无 |
参数描述 |
Fee初始化失败通知 |
|||
依赖关系 |
依赖于上 层模块相应回调函数名 |
|||
FeePageDire ctWriteSupport |
取值范围 |
true/false |
默 认取值 |
false |
参数描述 |
是否使 能Flash数据多次写入 (未擦除),以节约B lock管理数据占用资源 |
|||
依赖关系 |
依赖于FeeVir tualPageSize的大小以 及Flash硬件特性支持 |
FeeBank
图5-2 FeeBank
表5-2 FeeBank
UI名称 |
描述 |
|||
FeeBankIndex |
取值范围 |
0..N |
默认取值 |
无 |
参数描述 |
Fee Bank的Index |
|||
依赖关系 |
从 0开始工具自动排序 |
|||
FeeB ankStartaddress |
取值范围 |
0..N |
默认取值 |
无 |
参数描述 |
Bank的起始地址 |
|||
依赖关系 |
当FeeBankRef配置 时,工具从Flash驱 动自动获取填充( 不能手动配置); 当FeeBa nkRef未配置时,需 手动配置(手动配 置时由配置人员来 保证配置正确性) |
|||
FeeBankSize |
取值范围 |
0..N |
默认取值 |
无 |
参数描述 |
Bank的大小 |
|||
依赖关系 |
当FeeBankRef配置 时,工具从Flash驱 动自动获取填充( 不能手动配置); 当FeeBa nkRef未配置时,需 手动配置(手动配 置时由配置人员来 保证配置正确性) |
|||
FeeBankRef |
取值范围 |
配置 属性0-1,关联配置 |
默认取值 |
无 |
参数描述 |
关 联Flash驱动Secto rList中某一Sector |
|||
依赖关系 |
依赖于Flas h驱动的Sector配置 |
FeeBlockConfiguration
图5-3 FeeBlockConfiguration
表5-3 FeeBlockConfiguration
UI名称 |
描述 |
|||
FeeBlockNumber |
取值范围 |
0..N |
默认取值 |
0x0 |
参数描述 |
Bl ock的Bloc kNumber号 |
|||
依赖关系 |
各 个Block的 BlockNum ber号唯一 |
|||
FeeBlockSize |
取值范围 |
1..N |
默认取值 |
无 |
参数描述 |
Bl ock的大小 |
|||
依赖关系 |
Block的 大小需为 FeeVirtu alPageSiz e的整数倍 |
|||
FeeImmediateData |
取值范围 |
t rue/false |
默认取值 |
false |
参数描述 |
表示该Bl ock是否为 立即Block |
|||
依赖关系 |
无 |
FeePublishedInformation
图5-4 FeePublishedInformation
表5-4 FeePublishedInformation
UI名称 |
描述 |
|||
FeeBlockOverhead |
取值范围 |
0..N |
默 认取值 |
无 |
参数描述 |
每个Block的管 理数据长度(byte) |
|||
依赖关系 |
工具自动计算生成(F eeVirtualPageSize和 FeePageD irectWriteSupport) |
|||
FeeBankOverhead |
取值范围 |
0..N |
默 认取值 |
无 |
参数描述 |
每个Bank的管 理数据长度(byte) |
|||
依赖关系 |
工具自动计算生成(F eeVirtualPageSize和 FeePageD irectWriteSupport) |
附录:
集成注意事项:
在Fee模块使用过程中,需要使用到下层Fls驱动模块,需要包含第三方驱动程序,会涉及到文件名和类型名字不匹配的问题,所以在Fee模块中,始终会包含头文件#include “Fls.h”。
所以在集成时,需要新建一个Fls.h文件,并在这个文件中做底层驱动的适配,如下图所示: