STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58
STM32F407芯片的OPTION Byte全面解析
STM32F407芯片是STMicroelectronics推出的一款功能强大的微控制器,广泛应用于工业控制、通信和消费电子等领域。其中,OPTION Byte(选项字节)是STM32系列芯片的重要配置功能,允许用户通过配置特定的寄存器,控制芯片的关键特性,例如启动模式、读保护和写保护等。
本文将分为8个章节,全面解析STM32F407芯片的OPTION Byte功能。
第一章:OPTION Byte 概述
1.1 什么是OPTION Byte?
OPTION Byte 是 STM32 系列芯片中一种特殊的配置区域,存储在片内闪存(Flash memory)中。它的主要作用是提供芯片启动、保护和工作模式等关键参数的配置选项。这些字节在系统启动时被加载到对应的配置寄存器中,影响芯片的行为。
1.2 OPTION Byte 的作用
OPTION Byte 的主要功能包括:
- 启动模式配置:选择芯片从主Flash、系统存储器或SRAM启动。
- 读保护(Read Out Protection, ROP):保护芯片中的数据不被非法读取。
- 写保护(Write Protection, WP):保护指定的Flash区域不被擦除或写入。
- BOR(Brown-Out Reset)电压等级:设置芯片的掉电检测电压等级。
- Watchdog配置:使能或禁止独立看门狗(IWDG)在芯片复位后启动。
Option Byte由最终用户根据应用需求进行配置。表14显示了这些字节在用户配置扇区内的组织结构。
1.3 Programming user option bytes
要在该扇区上执行任何操作,必须清除Flash选项控制寄存器(FLASH_OPTCR)中的选项锁定位(OPTLOCK)。为了允许清除此位,您需要按照以下步骤进行操作:
-
将Flash选项密钥寄存器(FLASH_OPTKEYR)中的OPTKEY1设置为0x0819 2A3B。
-
将Flash选项密钥寄存器(FLASH_OPTKEYR)中的OPTKEY2设置为0x4C5D 6E7F。
用户选项字节可以通过软件设置OPTLOCK位来防止不必要的擦除/编程操作。
Modifying user option bytes on STM32F405xx/07xx and STM32F415xx/17xx
要修改用户选项值,请按照以下顺序进行操作:
- 检查FLASH_SR寄存器中的BSY位,确保没有正在进行的Flash内存操作。
- 将所需的选项值写入FLASH_OPTCR寄存器。
- 在FLASH_OPTCR寄存器中设置选项启动位(OPTSTRT)。
- 等待BSY位被清除。
1.4 Write protections
FLASH_OPTCR
是 STM32F407 芯片中用于控制和配置 Option Byte 的关键寄存器。通过操作该寄存器,可以设置各种与芯片启动模式、安全性以及电压保护相关的功能。以下是对 FLASH_OPTCR
寄存器的详细介绍。
Flash存储器中最多可以保护24个用户扇区,以防止由于程序计数器上下文丢失而导致的不必要写操作。当FLASH_OPTCR或FLASH_OPTCR1寄存器中的非写保护nWRPi位(0 ≤ i ≤ 11)为低电平时,相应的扇区将无法被擦除或编程。因此,如果其中一个扇区受到写保护,则无法进行全片擦除。如果尝试对Flash存储器中受写保护部分(由写保护位、OTP部分锁定或永远不能被写入的ICP组成)进行擦除/编程操作,则会在FLASH_SR寄存器中设置写保护错误标志(WRPERR)。
FLASH_OPTCR 寄存器定义
FLASH_OPTCR
是一个 32 位寄存器,其各位或各位段控制特定的 Option Byte 配置。
位段 | 名称 | 说明 |
---|---|---|
[0] | OPTLOCK | 选项锁位(Option Lock) |
[1] | OPTSTRT | 选项启动位(Option Start) |
[2:3] | BOR_LEV | 掉电复位电压等级(Brown-Out Reset Level) |
[4] | Reserved | 保留位 |
[5] | WDG_SW | 独立看门狗模式选择(Software or Hardware IWDG) |
[6] | nRST_STOP | STOP模式复位禁用 |
[7] | nRST_STDBY | Standby模式复位禁用 |
[8:15] | RDP | 读保护等级(Read Protection Level) |
[16:27] | WRP | 写保护配置(Write Protection for Flash Sectors) |
[28:31] | Reserved | 保留位 |
各字段详细解析
1. OPTLOCK(Option Lock) [0]
- 说明:选项字节锁定位,用于保护
FLASH_OPTCR
寄存器不被意外修改。 - 值:
1
:锁定 Option Byte。0
:解锁 Option Byte。
- 操作:需要先写入解锁密钥到
FLASH_OPTKEYR
寄存器,才能将此位清零解锁。
2. OPTSTRT(Option Start) [1]
- 说明:选项启动位,用于触发 Option Byte 的写入操作。
- 值:
1
:启动 Option Byte 写入。0
:无操作。
- 操作:在修改完 Option Byte 配置后,需将该位设置为
1
以启动写入。
3. BOR_LEV(Brown-Out Reset Level) [2:3]
- 说明:配置 BOR 掉电复位的电压阈值。
- 值:
0000
:BOR Level 0(最低电压复位,1.8V 至 2.1V)。0001
:BOR Level 1(1.9V 至 2.4V)。0010
:BOR Level 2(2.1V 至 2.7V)。0011
:BOR Level 3(2.4V 至 2.9V)。- 其他值:保留。
- 应用:在电源不稳定的场景中,可通过调整 BOR Level 确保 MCU 在电压异常时安全复位。
4. WDG_SW(Independent Watchdog Selection) [5]
- 说明:独立看门狗模式选择。
- 值:
0
:硬件模式(独立看门狗由硬件启动,不能由软件禁用)。1
:软件模式(独立看门狗由软件启动,可以由软件控制)。
- 应用:在安全关键场景中,硬件模式更可靠;而软件模式适合需要灵活控制的应用。
5. nRST_STOP(Stop Mode Reset Disable) [6]
- 说明:STOP模式复位禁用。
- 值:
0
:启用 STOP 模式下的复位。1
:禁用 STOP 模式下的复位。
- 应用:用于控制在进入 STOP 模式后,是否允许复位信号。
6. nRST_STDBY(Standby Mode Reset Disable) [7]
- 说明:Standby模式复位禁用。
- 值:
0
:启用 Standby 模式下的复位。1
:禁用 Standby 模式下的复位。
- 应用:与 nRST_STOP 类似,用于控制芯片在 Standby 模式的复位行为。
7. RDP(Read Protection Level) [8:15]
- 说明:读保护等级。
- 值:
0xAA
:无保护(Level 0)。0xBB
:读保护(Level 1)。其他
:高强度保护(Level 2,数据不可访问且不可恢复)。
- 注意:
- 一旦进入 Level 2,芯片的 Flash 区域永久锁定。
- 从 Level 1 回到 Level 0 需要擦除整个 Flash。
8. WRP(Write Protection) [16:27]
- 说明:写保护设置,指定哪些 Flash 扇区受写保护。
- 值:每个位对应一个扇区,
1
表示受保护,0
表示不受保护。 - 应用:在固件更新或调试时防止误擦写关键代码区域。
使用 FLASH_OPTCR 的关键操作
1. 解锁 OPTION Byte
在写入 FLASH_OPTCR
之前,必须解锁 Option Byte:
FLASH->OPTKEYR = 0x08192A3B; // 解锁密钥1
FLASH->OPTKEYR = 0x4C5D6E7F; // 解锁密钥2
2. 配置 FLASH_OPTCR
修改寄存器中对应的字段。例如,启用读保护并设置 BOR 为 Level 3:
FLASH->OPTCR |= FLASH_OPTCR_RDP_0; // 设置 RDP 为 Level 1
FLASH->OPTCR &= ~FLASH_OPTCR_BOR_LEV; // 清除 BOR 配置
FLASH->OPTCR |= FLASH_OPTCR_BOR_LEV_2; // 设置 BOR 为 Level 3
3. 启动写入
完成配置后,启动 Option Byte 写入:
FLASH->OPTCR |= FLASH_OPTCR_OPTSTRT; // 启动写入
while (FLASH->SR & FLASH_SR_BSY); // 等待操作完成