MCU的闪存(FLASH)存储器的接口寄存器
MCU(微控制器单元)中的闪存存储器接口寄存器(Flash Memory Interface Registers),是MCU 内核与片内 Flash 之间的桥梁,用于控制和管理 MCU 内部闪存(Flash Memory)读写、擦除、编程以及保护等操作的一组特殊功能寄存器(SFRs)。这些寄存器通常由 MCU 的**闪存控制器(Flash Controller)**提供,允许开发者对 Flash 进行底层操作,比如固件升级(IAP,In-Application Programming)、出厂程序保护、低功耗模式下的管理等等。
不同厂商(如 STMicroelectronics、NXP、Microchip、TI、国产如华大、兆易创新等)和不同型号的 MCU,其闪存接口寄存器的名称、功能和地址可能有所不同,但基本功能和结构具有相似性。
一、闪存接口寄存器常见功能模块
一般来说,MCU 的闪存接口寄存器主要包括以下几类功能:
1. 闪存控制寄存器(Flash Control Register, 如 FLASH_CR)
用于控制 Flash 的主要操作,比如:
- 启动/禁止 Flash 编程或擦除
- 选择操作模式(读、页擦除、整片擦除、编程等)
- 使能/失能中断
- 选择 Flash 操作电压范围(在某些 MCU 中)
🔧 示例(以 STM32 为例):
FLASH_CR
:Flash 控制寄存器,控制擦除/编程操作。- 包含位域如:
PG
(Programming):编程使能PER
(Page Erase Request):页擦除请求MER
(Mass Erase):整片擦除STRT
(Start):启动操作LOCK
:Flash 锁定状态
2. 闪存状态寄存器(Flash Status Register, 如 FLASH_SR)
用于反映当前 Flash 操作的状态,比如:
- 是否正在忙于擦除/编程(Busy 位)
- 操作是否成功
- 是否有错误(如写保护错误、编程对齐错误等)
🔧 常见状态位:
BSY
(Busy):Flash 忙碌中,不能接受新命令EOP
(End Of Operation):操作完成标志PGERR
(Programming Error):编程错误WRPERR
(Write Protection Error):写保护错误
3. 闪存地址寄存器(Flash Address Register, 如 FLASH_AR / FLASH_ADDR)
用于指定要擦除或编程的 Flash 地址,比如:
- 指定要擦除的页地址
- 指定要写入数据的 Flash 目标地址
4. 闪存选项字节控制寄存器(Option Bytes Registers)
用于管理 Flash 的选项字节(Option Bytes),这些字节通常存储了:
- 读写保护配置(Read/Write Protection)
- 硬件看门狗配置
- 启动模式选择(Boot Pin/Mode)
- nRST 停止/复位行为
- 用户自定义配置(如芯片 ID 或默认配置)
这些寄存器通常有特殊的访问机制,有的需要解锁、有的只能在特定模式下修改。
5. 闪存密钥寄存器(Flash Key Register, 如 FLASH_KEYR)
由于 Flash 的保护和关键操作(如解锁控制寄存器、擦除选项字节)涉及安全机制,因此需要通过**写入特定钥匙序列(Key)**才能进行操作,比如 STM32 中的 FLASH_KEYR
寄存器。
🔐 例如 STM32:
- 写入
KEY1 = 0x45670123
和KEY2 = 0xCDEF89AB
到FLASH_KEYR
才能解锁 Flash 控制寄存器。
6. 闪存选项键寄存器(Option Key Register)
与选项字节相关的解锁寄存器,比如 OPTKEYR
,用于解锁对选项字节的修改权限。
二、常见 MCU 厂商的闪存寄存器举例
1. STM32 系列(ARM Cortex-M)
FLASH_ACR
:Flash 访问控制寄存器(配置等待状态、预取等)FLASH_KEYR
:Flash 密钥寄存器(用于解锁)FLASH_OPTKEYR
:选项字节密钥寄存器FLASH_SR
:状态寄存器FLASH_CR
:控制寄存器FLASH_AR
(或FLASH_ADDR
):地址寄存器FLASH_OBR
/FLASH_WRPR
:选项字节相关
📌 STM32 的 Flash 操作通常需要按照严格的步骤,比如先解锁、清除状态、设置控制位、启动操作、等待完成等。
2. NXP(如 Kinetis、i.MX RT、LPC 系列)
- 寄存器命名可能为
FTFL_FSTAT
,FTFL_FCNFG
,FTFL_FCCOB
等(Kinetis Flash 模块) - 使用 FCCOB(Flash Common Command Object)寄存器组来执行命令(擦除、编程等)
3. GD32(国产,兼容 STM32)
- 与 STM32 类似,寄存器名称也类似,如
FLASH_ACR
,FLASH_KEYR
,FLASH_SR
,FLASH_CR
- 适用于国产替代方案,寄存器级兼容度高
4. Microchip(如 PIC、AVR、SAM)
- 不同架构差异较大,比如 AVR 的 Flash 通过特殊指令和 SPM(Store Program Memory)寄存器操作
- SAM(ARM-based)系列类似于 STM32,有专门的 Flash 控制器寄存器
三、典型操作流程(以擦除/编程 Flash 为例)
以 STM32 为例,对 Flash 进行编程或擦除的大致流程如下:
-
解锁 Flash 控制器
- 向
FLASH_KEYR
写入正确的解锁键序列
- 向
-
检查并清除状态标志
- 读取
FLASH_SR
,确保没有错误(如 WRPERR, PGERR) - 必要时通过写 1 清除标志(如 EOP, PGERR)
- 读取
-
等待 Flash 不忙(BSY = 0)
-
配置控制寄存器
- 设置
PG
或PER
/MER
位,选择操作类型(编程/页擦除/整片擦除)
- 设置
-
设置地址
- 在
FLASH_AR
或FLASH_ADDR
中写入要操作的 Flash 地址
- 在
-
启动操作
- 设置
STRT
位,开始执行擦除/编程
- 设置
-
等待操作完成
- 轮询
BSY
位,或者等待中断(如果使能了中断)
- 轮询
-
检查操作结果
- 查看
EOP
(操作成功)或其他错误标志
- 查看
-
重新上锁(可选)
- 设置
LOCK
位,防止误操作
- 设置
四、如何查找具体 MCU 的 Flash 寄存器?
每个 MCU 的 Flash 寄存器都定义在其技术参考手册(Technical Reference Manual, TRM) 或 数据手册(Datasheet) 中,通常位于以下章节:
- Flash Memory Controller
- Flash Programming Manual
- Memory Chapter(内存章节)
- Register Map(寄存器映射表)
🔍 推荐步骤:
- 找到你所使用的 MCU 的型号(如 STM32F103C8T6、GD32F303、LPC55xx 等)
- 下载该型号的 Reference Manual(参考手册)
- 搜索关键词:Flash、Flash Controller、Flash Registers、FTFA、FLASH_CR 等
- 查看寄存器定义、地址、功能描述与使用流程
五、总结
寄存器类别 | 功能说明 | 常见寄存器名(举例) |
---|---|---|
控制寄存器 | 控制 Flash 操作(读/写/擦除) | FLASH_CR, FTFA_FCCOB |
状态寄存器 | 反映 Flash 状态与错误 | FLASH_SR, FSTAT |
地址寄存器 | 指定要操作的 Flash 地址 | FLASH_AR, FLASH_ADDR |
密钥寄存器 | 解锁 Flash 控制器或选项字节 | FLASH_KEYR, OPTKEYR |
选项字节相关 | 配置读写保护、启动模式、安全特性等 | 选项字节寄存器、OBR、WRPR |
Flash 访问配置 | 配置等待状态、预取、缓存等(影响性能与稳定) | FLASH_ACR |