ZHCACJ1 april   2023 MSPM0G3507

 

  1.   摘要
  2.   商标
  3. 1引言
    1. 1.1 EEPROM 与片上闪存的区别
  4. 2实现
    1. 2.1 原理
    2. 2.2 标头
  5. 3软件说明
    1. 3.1 软件功能和流程
    2. 3.2 EEPROM 函数
      1. 3.2.1 全局变量
      2. 3.2.2 EEPROM_TypeB_readDataItem
      3. 3.2.3 EEPROM_TypeB_findDataItem
      4. 3.2.4 EEPROM_TypeB_write
      5. 3.2.5 EEPROM_TypeB_transferDataItem
      6. 3.2.6 EEPROM_TypeB_eraseGroup
      7. 3.2.7 EEPROM_TypeB_init
    3. 3.3 应用集成
    4. 3.4 EEPROM 仿真存储器占用空间
    5. 3.5 EEPROM 仿真时序
  6. 4应用方面
    1. 4.1 可配置参数的选择
      1. 4.1.1 数据项数
      2. 4.1.2 耐写次数
    2. 4.2 断电恢复
  7. 5参考文献

原理

在本文的解决方案中,闪存被划分为多个称为数据项 的区域。每个数据项为 8 字节,包含数据、写入结束标志和标识符。标识符用于标识和区分数据,类似于变量名或虚拟地址。闪存中的两个数据项可以具有相同的标识符,但只有最新的数据项有效。由于数据项是按顺序写入的,因此可以根据位置区分旧数据项和新数据项。

执行读取操作时,会根据标识符找到相应的数据项。如果有多个具有相同标识符的数据项,则只有最新的数据项有效。执行写入操作时,输入的数据和标识符将汇编为新的数据项。因此,当用户想要更新与标识符相对应的数据项时,写入操作不会修改之前的数据项,而是继续在未使用的区域中创建新的数据项。通常,如果扇区已满,则会将对应于每个标识符的最新数据项转移到下一个扇区,然后擦除该扇区。举个极端的例子,当用户只更新与某个标识符相对应的数据时,扇区已满后,所有数据项的标识符都相同,转移操作只会转移最后一个数据项。

应当注意的是,由于扇区大小是固定的,因此单个扇区可以容纳的数据项数量是有限和固定的。为了存储更多数据项,扇区被分组到 中。同一组中的扇区将一起擦除。当一个组已满时,最新的数据项将转移到下一个组,然后将该组擦除。图 2-1 显示了 EEPROM 仿真的结构。

为了标记组的状态,组的前 8 个字节用作标头。组的其余部分(总组大小减去标头的 8 字节大小)用于存储数据项。一个扇区中的数据项数为(扇区大小 x 一个组中的扇区数/数据项大小 - 1)。例如,如果一个组有 1 个扇区,则可以存储 127 个数据项。如果一个组有 2 个扇区,则可以存储 255 个数据项。如果一个组有 3 个扇区,则可以存储 383 个数据项。

应该强调的是,尽管用户可以使用尽可能多的不同标识符(最多等于数据项的数量),但这可能会导致频繁的转移操作和擦除操作,因此可能会增加系统开销。建议的标识符数量是最大数据项数的三分之一到一半。

共有三个用户可配置的参数,可根据应用要求在 eeprom_emulation_type_b.h 中进行配置。这些参数会影响最大数据项数和耐写次数,稍后将对此进行分析。

  • 组数:至少 2 个
  • 一个组中的扇区数:至少 1 个
  • 扇区地址

此外,在数据项的结构中,写入结束标志用于确保数据项的写入完整性。在写入数据和标识符后,此标志设置为 0x0000。

GUID-C8B22A04-0FF3-4212-BDCA-184F25C4D3FA-low.png图 2-1 EEPROM 仿真的结构

EEPROM 仿真的基本行为如图 2-2 所示。在 A 中,虽然有两个 Var3,意味着它们具有相同的标识符,但只有后一个标识符有效,因为它较新。如果读取 Var3,则读取的将是 x6 而非 x3。从 A 到 B,执行了写入操作,组 1 已满,因此将执行转移操作。在 C 中,组 2 被标记为 Receiving,因此最新的数据项转移到组 2。在 D 中,转移后,组 2 更新为 Active。组 1 被标记为“Erasing”并等待擦除。擦除操作仅在用户调用相应函数时执行。

用户可以根据需要选择合适的擦除时间。应该注意的是,不及时擦除将导致试图向有残留数据的扇区写入数据。这可能会导致数据损坏。

GUID-2578592D-2A78-4046-A827-FDFAEF64230D-low.png图 2-2 EEPROM 仿真的基本行为