目录
关键词
嵌入式、C语言、autosar、OS、BSW
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector , EB |
芯片厂商 | TI 英飞凌 |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
autosar版本 | 4.3.1 |
参考文档 | TechnicalReference_Fee.pdf AUTOSAR_SWS_FlashEEPROMEmulation.pdf |
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
缩写 | 描述 |
---|---|
EEPROM | Electrically Erasable Programmable read only memory |
NVM | NVRAM Manager |
MEMIF | Memory Abstraction Interface |
EA | EEPROM Abstraction |
EEP | internal/external EEPROM DRIVER |
FEE | Flash EEPROM Emulation |
FLS | internal/external Flash Driver |
FCFS | First come first served |
LUT | Look Up Table |
CH | chunk header |
CI | chunk instance |
CL | chunk link |
一、背景
首先需要确定一个概念,这里的翻页的页不是指page,而是指的logical sector,在Infineon中也称为GC(Garbage Collection)。
如[AutoSar]BSW_Memory_Stack_007 FEE 模块介绍中所述,FEE 按照顺序写入的方式将数据写入logical sector。不论这个logical sector 定了多大,始终有写满的时候,这个时候就需要翻页了。
二、机制
一个physical sector 一般分为两个 logical sector,假定为sector_A和sector_B。在初始化的时候会判定哪个sector是有效的,便active 这个sector并使用,假定为sector_A。如果在后续工作中sector_A 被写满了或者强制翻页,则将sector_A中有效数据拷贝到sector_B,拷贝完成后擦除sector_A,并将sector_A设置为deactivated,将sector_B设置为actived,后续工作中写入sector_B,直到sector_B满足翻页条件。
如下图所示,写入UB1和UB2,直到其写满。写满后拷贝有效值到sectorB ,并擦除sector_A。
2.1 触发翻页的条件
-
- 空间超出阈值。见第六节。
-
- 用户触发(Fee_ForceSectorSwitch)。
-
- 关键block 处理。见第七节。
三、Background Sector Switch (BSS)
翻页操作在后台进行,在处理(复制或决定跳过复制)block后,user job可中断翻页处理。前提是FEE 没有被设置为 Fast Mode。
四、Foreground Sector Switch (FSS)
翻页操作在前台进行,不能被user job 打断。
五、overflows (Critical Data Blocks)
在上面第二节中有一种特殊的情况:加入UB1一直被写失败同时又在不停的尝试重写,则会导致sector_A被写满后又会占用sector_B,这个时候sector_B中有UB1的最新数据,而sector_A中又有UB2的最新数据。这种情况会导致翻页失败。这种情况会调用uint8 Appl_CriticalErrorCallback (uint8 partitionId, Fee_SectorError errCode),丢失最新的数据,擦除较新的那个logical sector,也就是Sector_B。
六、Sector switch reserves and thresholds
threshold,阈值,大小为距离较新的sector 的偏移量,单位为Kbyte,以第二节中的例子表示则是距离sector_B 的偏移量。数据顺序写入sector_A会导致threshold变小,一旦小于设定值则触发翻页操作。
6.1 Background Sector Switch Reserve/Threshold
触发后台翻页的阈值。设定的值必须保证每一个 block 都被copy一次的值,按照第二节所述,至少得保证UB1 +UB2 的一次copy 的值。BSS 的阈值必须大于FSS 的阈值。
6.2 Foreground Sector Switch/Threshold
触发前台翻页的阈值。如果触发了前台翻页证明BSS失败,这时候调用Fee_DisableFss 阻止一切FEE 写入。
七、Critical Data Blocks
通过FEE block 配置可以将其标记为Critical Data Blocks。
Critical Data Blocks 的意思就是将所有此类block 保证其在同一个logical sector 中,这样就能保证不会产生overflows ,第五节的情况。当无法在logical sector 中写入新的 Critical data时,便会触发FSS。
注意! 立即写入和Critical Data Blocks不建议同时选用,因为Critical Data Blocks 要求安全写入,而立即写入则表示需要快速写入,相矛盾,并且浪费系统资源。
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<