关于tresos Studio(EB)的MCAL配置之FEE
FEE模块其实是抽象层的,在FLS模块的上面,所以这个MCAL的模块可以用可以不用。如果BSW层有,就不用再MCAL里面配置。
NVM模块提供非易失性数据的存储和维护服务,提供管理和维护NV数据所需的同步/异步服务(init/read/write/control)为SWCs提供AUTOSAR接口。
MemIf模块允许NVRAM管理器以相同的方式访问多个内存抽象模块(FEE或EA模块)
1.需要在Fee_Init之前调用Fls_Init
2.Fee_MainFunction和Fls_MainFunction必须重复调用FEE模块初始化及其操作。当一个操作(初始化或标准操作)完成时,Fee_GetStatus返回MEMIF_IDLE
3.使用FeeNvmJobEndNotification和Fee_GetStatus来确保最后一个擦除/写作业已经完成
4.在调用Fee_Write函数获取即时数据之前,必须调用Fee_EraseImmediateBlock函数来预擦除闪存区域
分为三层,FeeClusterGroup、FeeCluster和FeeSector。FeeClusterGroup至少需要2个FeeCluster,FeeCluster里面包含一个或多个FeeSector,FeeSector跟FLS模块的FlsSector一一对应。
FEE全称Flash Eeprom,通过flash模拟EEPROM
一般BSW也有一个一样的模块,MCAL和BSW里面只需要使用其中一个,大家的接口名字都是一样的。
FEE模块为上层提供一个32位的虚拟线性地址空间和统一的分段方案
这个虚拟32位地址应该包括:
•一个16位的块号-允许(理论)65536个逻辑块的数量,16位块号表示一种可配置的(虚拟的)分页机制
•一个16位的块偏移量-允许(理论)块大小为64KByte每个块
Fee模块本身是脱离硬件的,但是Fee模块可能会引用的Fls模块定制API
集群组:至少两个集群组成
集群:包含FEE块一个或多个flash物理扇区
块:Flash中包含应用程序数据的区域
每一个集群或者块都包含:一个头和数据
可能存在多个集群,但只有一个是活动并包含有效数据,而其他集群未被使用。
数据整体管理
下面有详细的介绍
集群头
ClrID:集群ID
StartAddress:集群起始地址(逻辑地址)
ClusterSize:集群的长度
checkSum:ClrID、StartAddress和ClusterSize字段之和
val Flag:有效位,0x81表示有效的集群
StartCopyFlag:开始复制标志位,0x11启动交换。
块头
TargetAddress:起始地址(逻辑地址)
Data:具体的数据
checkSum:BlockNumber、Length和TargetAddress字段之和
valFlag:有效位。0x80fcfcfcfffffffff表示有效,0x80F8FCFCFCFFFCFC表示无效。
例子
一个集群组有两个集群,起始地址为0x10000和0x18000,块长度为5和64.
这里能看到集群的ID为1,起始地址为0,长度0x10000,集群状态有效。
块1数据都是0x55,状态有效。
块2也是类似
配置
General
Fee Development Error Detect开发者错误检测
Fee Main Function Periode函数Fee_MainFunction的轮询周期,不过没啥用
Fee Index模块索引,也没用
Fee Nvm Job End Notification操作NVM模块完成时候的回调函数
Fee Nvm Job Error Notification操作NVM模块出现错误的时候的回调函数
Fee Polling Mode使能FEE模块的轮询模式
Fee Set Mode Supported使能Fee_SetMode接口
Fee Version Info Api使能Fee_GetVersionInfo接口
Fee Virtual Page Size逻辑块对齐大小(字节)
Fee Flag Space optimization使能标志空间优化
Fee Swap Buffer Size交换缓冲区大小(字节)
Fee Data Buffer Size数据缓冲区大小(字节)
Fee Block Always Available一般情况下当写操作被中断(取消、重置)时,应用程序不能再访问FEE块数据,勾选了这个选项就允许访问。
FeeClusterGroup
FeeClusterGroup集群组里面有很多个FeeCluster集群,FeeCluster集群里面又有很多FeeSector,然后在里面设置对FLS sector的引用。
FeeBlockConfiguration
Fee Cluster Group Ref将Fee块分配给特定的Fee集群组
Fee Block Number块的ID,从1开始排。
Fee Block Size每个逻辑块的大小(字节)这里需要注意每块的大小和使用的总大小
Fee Immediate Data块里面包含了即时数据
Fee Number Of Write Cycles这一块所需要的写周期数,不可配置
Fee Device Index索引,引用回/Fls/Fls/FlsGeneral就行
静态代码
Fee_Cancel异步取消flash模拟EEPROM
Fee_EraseImmediateBlock异步擦除直接逻辑块
Fee_GetJobResult同步获取最后一个作业的结果,有成功,失败,等待,取消,损坏,无效等。
Fee_GetStatus获取FEE模块状态,有未初始化,空闲,繁忙,忙于内部管理操作等。
Fee_GetVersionInfo获取版本
Fee_Init模块初始化函数
Fee_InvalidateBlock让对应的逻辑块失效
Fee_JobEndNotification将异步操作的成功结束报告给FEE模块,意思就是所有异步成功操作都要调用这个函数。
Fee_JobErrorNotification将异步操作的失败结束报告给FEE模块,意思就是所有异步失败操作都要调用这个函数。
Fee_MainFunction需要周期调用,将异步处理请求的读/写/擦除作业,分别进行内部管理操作,里面的操作被称为job作业。
Fee_Read根据块的序号、偏移量和长度,异步读取块的起始地址,也就是指针。
Fee_SetMode设置FEE的模式,快模式或者慢模式
Fee_Write根据块的序号,异步写入数据,写入数据长度为一个块,注意要先擦后写。
Fee_GetRunTimeInfo获取集群组的运行信息
如果你想即时更新数据,则先调用Fee_EraseImmediateBlock接口,再调用Fee_Write接口