MCU进阶篇(一)——选项字节

前言:
  

1 介绍

  本篇以STM32F103 MCU系列为例,选项字节(Option Bytes) 是STM32微控制器中一个特殊的配置区域,用于存储芯片的关键系统级配置信息。这些配置在芯片上电或复位时被读取,直接影响其硬件行为和安全特性。选项字节就是STM32芯片的一组“启动开关”或“熔丝位”(Fuse Bits),用来设置一些不能在运行时随意更改的重要参数。

2 存储

  在STM32F103系列中,选项字节不是程序代码的一部分,也不是RAM中的变量,而是保存在Flash存储器中的一个受保护区域,具有非易失性(掉电不丢失)。选项字节存储在MCU片内Flash中,查看芯片数据手册,其中介绍了选项字节在内存中的存放位置。它的前面是片内Flash中的固件,后面是主内存区。

flash.png

  在参考手册中介绍了选项字节的大小,共计16字节。

size.png

3 定义

  在官方文档 STM32F10xxx Flash memory microcontrollers 中有详细的字节定义。16个字节的功能定义如下。

organization.png

  详细的位定义如下。

description.png

description1.png

  • RDP : 读取保护。有三种等级的读保护。读保护功能的开关同时会反应在FLASH_OBR的bit1上,可用于快速判断,bit1 = 0:读保护关闭(RDP = 0xA5),bit1 = 1:读保护开启(RDP ≠ 0xA5)。注意,读保护只是限制外部设备的读取,运行起来的程序可以正常读取Flash。
    • 开启读保护 : 只需将RDP字节从默认的0xA5修改为除0xA5和0xCC之外的任何值即可。最常用、最标准的值是0x00。
    • 关闭读保护 : 将值写为0xA5(该字段的默认值)恢复外部调试器对芯片Flash的读取功能。注意,从保护状态恢复到 0xA5 解除读保护的操作,会触发芯片自动擦除整个主Flash存储区(用户程序会被清除)。这是ST芯片的一项安全设计,防止有人通过暂时关闭保护来窃取代码。
    • 永久禁用读 : 这是一个不可逆的操作。一旦写入,调试接口将永久失效,芯片只能通过系统存储器自举模式(如串口)来更新程序,且无法再次降级到Level 0或1。除非有极其特殊的安全需求,否则请避免使用此值。
  • nRDP : nRDP是RDP字节的互补字节(按位取反),是STM32 Flash保护机制中的一个校验字节。芯片在每次上电或复位时,会自动检查RDP和nRDP的值是否满足互补关系。如果不满足,硬件会认为选项字节数据已损坏,并自动将RDP强制恢复为默认值0xA5(这会关闭读保护)。
  • USER : 仅[16:8] bit被使用,[23:19] 未使用,值为0x1F。
    • WDG_SW[16] : WDG_SW = 0 (硬件看门狗),上电后硬件看门狗在时钟稳定后自动启动并开始计时,软件无法暂停或关闭它。 WDG_SW = 1 (软件看门狗),上电后看门狗由软件启动,可通过软件暂停。默认值为0。
    • nRST_STOP[17] : 它决定了芯片从 “停机模式” 唤醒时的行为,决定当芯片被从停机模式唤醒时,是像按了一下复位键一样整个系统重启,还是像睡醒了一样从原来的地方继续执行。 nRST_STOP = 0 唤醒即复位, nRST_STOP = 1 唤醒即恢复。默认值为1。
    • nRST_STDBY[18] : 它决定了待机模式的唤醒行为,决定了芯片是进入待机模式的瞬间就立即复位,还是在待机模式中被唤醒时才复位。 nRST_STDBY = 0 立即复位并进入待机模式, nRST_STDBY = 1 进入待机模式,在唤醒时复位。默认值为1。
  • nUSER : 与nRDP作用类似,是USER的互补字段。
  • Datax : 供用户使用的选项字节,由用户定义。
  • nDatax : 与nRDP作用类似,是Datax的互补字段。
  • WRPx : Flash写保护,对应FLASH_WRPR。WRP0~3根据存储空间的大小,对应了Flash一定页范围的写保护功能。bit为1,对应页被写保护,为0则关闭写保护。
  • nWRPx : 与nRDP作用类似,是WRPx的互补字段。