ZHCACJ7 april 2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1305 , MSPM0L1306 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346
该软件提供基本的 EEPROM 功能。至少要使用 2 个扇区来仿真 EEPROM。如上所述,这些扇区划分为多条记录,每条记录均包含标头,用于确定数据的有效性。为了减少闪存操作的次数,RAM 中与虚拟 EEPROM 大小相同的缓冲区用于复制活动记录的数据。此外,4 个全局变量用于跟踪活动记录,3 个全局变量用于表示标志。
用户总共仅直接调用三个函数。
图 3-1 中显示了简要软件流程。器件应首先执行初始化代码。通过调用 EEPROM_TypeA_init,它会搜索活动记录并检查闪存的格式。如果存在活动记录,则活动的数据将复制到 RAM 中的缓冲区。如果格式不正确,将修复格式。初始化后,将有一个用于 EEPROM 仿真且正确格式化的闪存区域,几个跟踪活动记录的全局变量以及一个复制活动记录数据的 RAM 缓冲区。
在应用程序中,用户可以直接读取或编辑 RAM 中的缓冲区。仅当调用 EEPROM_TypeA_writeData 时,缓冲区才会作为新的活动记录存储到闪存中。EEPROM_TypeA_writeData 还将在扇区已满时设置擦除标志。在流程中,设置擦除标志后会立即调用 EEPROM_TypeA_eraseLastSector。根据应用程序,用户可以选择适当的时间点来擦除。
实现此功能需要六个函数。除上述三个函数外,其余三个函数主要由 EEPROM_TypeA_init 调用。
此外,7 个全局变量用于记录 EEPROM 仿真的状态。有 4 个全局变量用于跟踪活动记录。
gActiveRecordAddress 和 gNextRecordAddress 用于存储活动记录相关地址。
gActiveRecordNum 和 gActiveSectorNum 用于跟踪活动记录的位置。
有 3 个全局变量用于表示标志。
当存在活动记录时设置 gEEPROMTypeASearchFlag。
当扇区已满且需要擦除时设置 gEEPROMTypeAEraseFlag。
当发现格式错误时设置 gEEPROMTypeAFormatErrorFlag。
EEPROM_TypeA_init
该函数用于初始化 EEPROM 仿真。通过此函数,可恢复用户数据并跟踪闪存中的活动记录。此函数包含以下功能:
图 3-2 中显示了软件流程。首先,它通过调用 EEPROM_TypeA_searchCheck 搜索活动记录并检查格式。根据 EEPROM_TypeA_searchCheck 设置的标志,可以确定活动记录是否存在或格式是否正确。如果存在活动记录,则通过调用 EEPROM_TypeA_ReadData 将活动记录的数据复制到 RAM 中的缓冲区,并将指针设置为活动记录。如果不存在活动记录,则擦除所有扇区并将指针设置为第一个扇区的开头。
如果格式不正确,将通过调用 EEPROM_TypeA_repairFormat 来修复格式。格式修复后,将擦除所有扇区并恢复活动记录。图 3-3 和图 3-4 分别显示了 EEPROM_TypeA_init 前后的闪存区域比较。
该函数的输入是 RAM 中缓冲区的地址。该函数的输出为操作状态。此外,函数中更新了全部 7 个全局变量。
EEPROM_TypeA_writeData
EEPROM_TypeA_writeData 用于将数据从 RAM 中的缓冲区存储到闪存。通过该函数,可以将新的活动记录添加到闪存中。
用户可以直接读取或编辑 RAM 中的缓冲区。但是,只有在调用此函数后,缓冲区的数据才会复制到新的活动记录中。换句话说,闪存区域用于记录/备份缓冲区。断电时,RAM 中的所有数据都会丢失,并且活动记录用于恢复数据。
图 3-5 中显示了软件流程。首先,它会检查下一条记录是否擦除。然后开始将数据存储到下一条记录中。该过程如图 2-3 所示:
最后,检查该扇区是否已满。如果是,将设置 gEEPROMTypeAEraseFlag。此外,有关活动记录的全局变量也会更新。EEPROM_TypeA_writeData 前后的闪存区域比较如图 3-6 所示。
该函数的输入是 RAM 中缓冲区的地址。该函数的输出为操作状态。
EEPROM_TypeA_eraseLastSector
EEPROM_TypeA_eraseLastSector 用于在闪存扇区已满时擦除该扇区。调用 EEPROM_TypeA_writeData 时,如果扇区已满,将设置 gEEPROMTypeAEraseFlag。建议在设置 gEEPROMTypeAEraseFlag 后立即调用 EEPROM_TypeA_eraseLastSector,如图 3-1 所示。但是,用户可以通过修改简要软件流程来更改要擦除扇区的时间点。
该函数的输出为操作状态。
EEPROM_TypeA_readData
EEPROM_TypeA_readData 用于将数据从闪存中的活动记录复制到 RAM 中的缓冲区。该函数在 EEPROM_TypeA_init 中调用。虽然用户可以直接读取或编辑 RAM 中的缓冲区,但用户通常不会直接使用 EEPROM_TypeA_readData。
该函数的输入是 RAM 中缓冲区的地址。
EEPROM_TypeA_searchCheck
EEPROM_TypeA_searchCheck 用于搜索活动记录并检查格式。该函数遍历所有记录的标头。如果找到活动记录,将设置搜索标志并更新活动记录相关的全局变量。如果存在“Recording”标头或无效标头,或存在其他格式错误情况,将设置错误标志。该函数在 EEPROM_TypeA_repairFormat 中调用。图 3-7 中显示了软件流程。
该函数通过设置全局变量来输出结果,因此函数的输入和输出都是 void。
EEPROM_TypeA_repairFormat
EEPROM_TypeA_repairFormat 用于修复格式。在调用函数之前,活动记录应已读取到 RAM 中的缓冲区。通过此函数,可擦除所有扇区并将数据从 RAM 中的缓冲区复制到闪存中的新记录中。该函数在 EEPROM_TypeA_repairFormat 中调用。图 3-8 中显示了软件流程。
该函数的输入是 RAM 中缓冲区的地址。该函数的输出为操作状态。
需要此功能的应用程序必须包含为 MSPM0 MCU 提供的 eeprom_emulation_type_a.c 和 eeprom_emulation_type_a.h 文件。另外,还需包含面向特定器件的闪存 API。例如,对于 MSPM0G3507/MSPM0L1306,需要包含以下文件:
支持 MSPM0 米6体育平台手机版_好二三四的 SDK 中已包含 EEPROM 仿真库。
该 SDK 中还包含所有闪存 API 文件。
表 3-2 详细说明了 EEPROM 仿真驱动程序在闪存大小和 RAM 大小方面的占用空间。下表和下图是在使用 Code Composer Studio(版本:11.2.0.00007)且优化级别为 2 的条件下确定的。
机制 | 所需的最小代码大小(字节) | |
---|---|---|
闪存 | SRAM | |
具有 64 字节记录大小的 EEPROM 仿真 A 型 | 2616 | 71 |
具有 128 字节记录大小的 EEPROM 仿真 A 型 | 2616 | 135 |
具有 256 字节记录大小的 EEPROM 仿真 A 型 | 2616 | 273 |
本部分介绍了与基于两个 1KB 闪存扇区的 EEPROM 仿真驱动程序相关的时序参数。
所有时序测量均在以下条件下执行:
这些函数通过以下参数进行测试:
操作 | 典型值 (µs) |
---|---|
格式正确的 EEPROM_TypeA_init | 80 |
格式修复后的 EEPROM_TypeA_init | 4467 |
EEPROM_TypeA_writeData | 848 |
EEPROM_TypeA_eraseLastSector | 3612 |