ZHCAEX1 January 2025 MSPM0G1518 , MSPM0G1519 , MSPM0G3518 , MSPM0G3519 , MSPM0L1227 , MSPM0L1228 , MSPM0L2227 , MSPM0L2228
非易失性存储器系统提供了片上可编程闪存存储器,用于存储可执行代码和数据、器件引导配置以及 TI 在工厂预编程的参数。NVM 分为一个或多个存储体,每个存储体中的存储器进一步映射到一个或多个逻辑存储区域和系统地址空间,以供应用使用。“表 1-3”定义了重要的闪存存储体术语,用作本《应用手册》其余部分的参考。
| 术语 | 定义 | 尺寸 |
|---|---|---|
| 闪存字 | 闪存编程和读取操作的基本数据大小(也是针对系统的读取总线宽度) | 64 个数据位(含 ECC 为 72 位) |
| 字线 | 扇区内的一组闪存字,在扇区擦除前具有最大编程操作限制 | 16 个闪存字(128 个数据字节,可选 16 个 ECC 字节) |
| 扇区 | 一起擦除的一组字线(闪存的最小擦除分辨率) | 8 个字线(1024 个数据字节,可选 128 个 ECC 字节) |
| 存储体 | 在一次操作中可以批量擦除的一组扇区。在同一时间针对给定的存储体只能进行一个读取、编程、擦除或验证操作。 | 变量 |
MSPM0 器件上的 NVM 系统支持多达 5 个闪存存储体(编号为 BANK0 到 BANK4)。存在的闪存存储体数量取决于器件。要确定特定器件的存储体方案,请查看特定器件数据表中“闪存存储器”章节的详细说明部分。
在给定的闪存存储体内,若存在正在进行的编程或擦除操作,则该操作会暂停对该存储体的所有读取请求,直到操作完成并且闪存控制器已经释放了对存储体的控制。在具有多个闪存存储体的器件上,对其他闪存存储体的读取请求不受不同闪存存储体中操作的影响。因此,在一些应用场景中(如下述场景),若存在多个存储体,则可以提高性能:
| 闪存区域 | 区域内容 | 可执行 | 使用者 | 编程者 |
|---|---|---|---|---|
| FACTORY | 器件 ID 和其他参数 | 否 | 应用 | 仅限 TI(不可修改) |
| NONMAIN(配置 NVM) | 器件引导配置(BCR 和 BSL) | 否 | 引导 ROM | TI、用户 |
| MAIN(闪存) | 应用代码和数据 | 是 | 应用 | 用户 |
具有单个存储体的器件在 BANK0(唯一存在的存储体)上实现 FACTORY、NONMAIN 和 MAIN 区域,而不提供 DATA 存储体。具有多个存储体的器件也在 BANK0 上实现 FACTORY、NONMAIN 和 MAIN 区域,但是还包括可实现 MAIN 或 DATA 存储体的其他存储体(BANK1 至 BANK4)。
在 NVM 上执行操作
在擦除或重新编程操作过程中,任何中断(例如拔出器件、移除 SWD 跳线、意外触发复位、取消代码下载、IDE 崩溃等)都可能导致设备永久失效,即“变砖”。NONMAIN 配置不当也会导致器件永久锁定。
图 1-2 是一个三存储体配置的示例,其中 512KB 的 MAIN 区域跨 BANK0 和 BANK1 进行拆分,并在 BANK2 中提供一个 16KB 的 DATA 存储体。与单组示例一样,BANK0 中包含 NONMAIN 和 FACTORY 区域。此示例支持在 DATA 存储体中进行 EEPROM 仿真,而不会停止对 MAIN 的取指令操作。它还支持双映像应用,即可以在不影响 BANK1 MAIN 区域取指令的情况下向 BANK0 的 MAIN 区域写入数据,反之亦然。大多数 MAIN 区域大小 ≥256KB 的器件都实现了某种形式的多组配置。
对于多组器件,BANK0 和 BANK1 被视为物理存储体 0 (PB0) 和物理存储体 1 (PB1)。这些存储体可以根据存储体交换配置切换地址,但在 BOOTRST 后,入口点始终为 PB0。
例如,逻辑存储体 0 (LB0) 始终映射到地址 0x0000.0000 - 0x0003.FFFF;逻辑存储体 1 (LB1) 则映射到 0x0004.0000 - 0x0007.FFFF。这两个逻辑存储体可以映射到 PB0 或 PB1。
后续章节将重点介绍如何利用多组特性来满足应用要求。