STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58

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 的主要功能包括:

  1. 启动模式配置:选择芯片从主Flash、系统存储器或SRAM启动。
  2. 读保护(Read Out Protection, ROP):保护芯片中的数据不被非法读取。
  3. 写保护(Write Protection, WP):保护指定的Flash区域不被擦除或写入。
  4. BOR(Brown-Out Reset)电压等级:设置芯片的掉电检测电压等级。
  5. Watchdog配置:使能或禁止独立看门狗(IWDG)在芯片复位后启动。

Option Byte由最终用户根据应用需求进行配置。表14显示了这些字节在用户配置扇区内的组织结构。

image-20241128212547464

image-20241128212606075

image-20241128212713019

image-20241128212758865


1.3 Programming user option bytes

要在该扇区上执行任何操作,必须清除Flash选项控制寄存器(FLASH_OPTCR)中的选项锁定位(OPTLOCK)。为了允许清除此位,您需要按照以下步骤进行操作:

  1. 将Flash选项密钥寄存器(FLASH_OPTKEYR)中的OPTKEY1设置为0x0819 2A3B。

  2. 将Flash选项密钥寄存器(FLASH_OPTKEYR)中的OPTKEY2设置为0x4C5D 6E7F。

用户选项字节可以通过软件设置OPTLOCK位来防止不必要的擦除/编程操作。

Modifying user option bytes on STM32F405xx/07xx and STM32F415xx/17xx

要修改用户选项值,请按照以下顺序进行操作:

  1. 检查FLASH_SR寄存器中的BSY位,确保没有正在进行的Flash内存操作。
  2. 将所需的选项值写入FLASH_OPTCR寄存器。
  3. 在FLASH_OPTCR寄存器中设置选项启动位(OPTSTRT)。
  4. 等待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)。

image-20241128214504565

image-20241128214609809

image-20241128214622556


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 表示不受保护。
  • 应用:在固件更新或调试时防止误擦写关键代码区域。

image-20241129081300295

使用 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);    // 等待操作完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾格北峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值