[AutoSar]BSW_Memory_Stack_008 FEE 的sector switch (翻页)


  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1
参考文档TechnicalReference_Fee.pdf AUTOSAR_SWS_FlashEEPROMEmulation.pdf

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
EEPROMElectrically Erasable Programmable read only memory
NVMNVRAM Manager
MEMIFMemory Abstraction Interface
EAEEPROM Abstraction
EEPinternal/external EEPROM DRIVER
FEEFlash EEPROM Emulation
FLSinternal/external Flash Driver
FCFSFirst come first served
LUTLook Up Table
CHchunk header
CIchunk instance
CLchunk 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。
在这里插入图片描述
8

2.1 触发翻页的条件

    1. 空间超出阈值。见第六节。
    1. 用户触发(Fee_ForceSectorSwitch)。
    1. 关键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 要求安全写入,而立即写入则表示需要快速写入,相矛盾,并且浪费系统资源。

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值