5.3.5User flash区擦除操作
User flash区支持以下擦除方式:
l页擦除(512字节)
l块擦除(16KB)
l批量擦除(128KB)
Flash存储器在执行擦除操作时,不能同时进行读取操作,需要等待存储器完成 擦除操作后,读取操作才能正常进行,擦除完成后的Flash数据为全1。
5.3.5.1User flash区页擦除步骤
对User flash区进行页擦除操作(512字节),可遵循以下步骤:
1) 检查Flash状态寄存器(FLASH_SR)中的BSY标志,以确认当前没有正在执行的Flash操作;
2) 检查FLASH_SR寄存器,确认错误标志均已清除;
3) 解锁Flash控制寄存器(FLASH_CR),使LOCK位清0;(详见:Flash控 制寄存器解锁)
4) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为01,进入页擦除模式;
5) 配置FLASH_CR寄存器中的PNB[7:0]位域,选择待擦除区域的页号;
6) 配置FLASH_CR寄存器中的ERASE位置1,启动Flash擦除,同时BSY标志将自动置1;
7) 查询并等待BSY标志清0,表明擦除操作已完成,此时ERASE位也将自 动清 0;
8) 如果要对多个页执行擦除操作,可重复执行步骤5到7;
9) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为00,退出擦除模式;
10) 配置FLASH_CR寄存器中的LOCK位置1,恢复FLASH_CR寄存器的写保护锁定状态。
5.3.5.2User flash区块擦除步骤
对User flash区进行块擦除操作(16KB),可遵循以下步骤:
1) 检查Flash状态寄存器(FLASH_SR)中的BSY标志,以确认当前没有正在执行的Flash操作;
2) 检查FLASH_SR寄存器,确认错误标志均已清除;
3) 解锁Flash控制寄存器(FLASH_CR),使LOCK位清0;(详见:Flash控制寄存器解锁);
4) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为10,进入块擦除模式;
5) 配置FLASH_CR寄存器中的PNB[2:0]位域,选择待擦除区域的块号;
6) 配置FLASH_CR寄存器中的ERASE位置1,启动Flash擦除,同时BSY标志将自动置1;7) 查询并等待BSY标志清0,表明擦除操作已完成,此时ERASE位也将自动清0;
8) 如果要对多个块执行擦除,可重复执行步骤5到7;
9) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为00,退出擦除模式;
10) 配置FLASH_CR寄存器中的LOCK位置1,恢复FLASH_CR寄存器的写保护锁定状态。
5.3.5.3User flash区批量擦除步骤
批量擦除用于擦除整个User flash区域(128KB),可遵循以下步骤:
1) 检查Flash状态寄存器(FLASH_SR)中的BSY标志,以确认当前没有正在执行的Flash操作;
2) 检查FLASH_SR寄存器,确认错误标志均已清除;
3) 解锁Flash控制寄存器(FLASH_CR),使LOCK位清0(详见:Flash控制寄存器解锁);
4) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为11,进入批量擦除模式;
5) 配置FLASH_CR寄存器中的ERASE位置1,启动Flash擦除,同时BSY标志将自动置1;
6) 查询并等待BSY标志清0,表明擦除操作已完成,此时ERASE位也将自动清 0;
7) 配置FLASH_CR寄存器中的ER_MODE[1:0]位域为00,退出擦除模式;
8) 配置FLASH_CR寄存器中的LOCK位置1,恢复FLASH_CR寄存器的写保护锁定状态。
5.3.5.4User flash区擦除错误
在对User flash区执行擦除操作的过程中,可能会出现以下错误标志:
lFlash操作序列错误标志PESERR:
-在ERASE位被置1的同时,如果ER_MODE[1:0]位域为00,则不会
启动擦除操作,错误标志PESERR将置1;
-在ERASE位被置1的同时,如果待擦除的区域(PNB[7:0])超出了
Flash的有效空间,则不会启动擦除操作,错误标志PESERR将置1;
-当有错误标志(PESERR、PROGERR、SIZERR、PGAERR、WRPERR)
未被清除时,配置ERASE位置1,则不会启动擦除操作,错误标志PESERR将置1;
-ERASE、OPTSTRT、OBL_LAUNCH中任意2个以上控制位同时置1,
则不会启动对应的操作,错误标志PESERR将置1。
l写保护错误标志WRPERR:
-如果要擦除的区域受到安全保护机制的影响,包含有受保护的区域,
则不会启动擦除操作,FLASH_SR寄存器中的WRPERR标志将置1。
5.3.6User flash区编程操作
对Flash存储器执行编程操作,每次能写入的数据长度固定为 32bits(字),不支持其他长度的数据写入。
FLASH存储器在执行编程操作时,不能同时进行读取操作,需要等待存储器完成编程操作后,读取操作才能正常进行。
与Flash擦除操作类似,编程操作也会受到安全保护机制的影响:
5.3.6.1User flash区编程操作步骤
对User flash区进行编程操作,可遵循以下步骤:
1) 检查Flash状态寄存器(FLASH_SR)中的BSY标志,以确认当前没有正在执行的Flash操作;
2) 检查FLASH_SR寄存器,确认错误标志均已清除;
3) 解锁Flash控制寄存器(FLASH_CR),使LOCK位清0(详见:Flash控制寄存器解锁);
4) 配置FLASH_CR寄存器中的PG_MODE为1,进入Flash编程模式;
5) 向Flash目标地址写入32bits数据,写入后BSY标志将自动置1;
6) 查询并等待BSY标志清0,表明编程操作已完成;7) 如果要对多个地址进行编程,可重复步骤5和6;
8) 配置FLASH_CR寄存器中的PG_MODE位为0,退出Flash编程模式;
9) 配置FLASH_CR寄存器中的LOCK位置1,恢复FLASH_CR寄存器的写保护锁定状态。
5.3.6.2User flash区编程错误
在对User flash区进行编程操作的过程中,可能会出现以下错误标志:
l编程错误标志PROGERR:
-当Flash地址内的数据不是 0xFFFF FFFF时,表明该地址已经执行过
编程操作,向该地址写入数据,则写入的数据会被忽略,不会启动编
程操作,错误标志PROGERR将置1;
-当PG_MODE位为0时,向Flash地址写入数据,则写入的数据会被
忽略,不会启动编程操作,错误标志PROGERR将置1;
-当有错误标志(PESERR、PROGERR、SIZERR、PGAERR、WRPERR)
未被清除时,向Flash地址写入数据,则写入的数据会被忽略,不会启动编程操作,错误标志 PROGERR将置1。
l编程位宽错误标志SIZERR:
-如果向Flash地址写入字节或半字,则写入的数据会被忽略,不会启
动编程操作,错误标志SIZERR将置1。
l编程地址未对齐错误标志PGAERR:
-如果编程操作的目标地址没有按字对齐(地址2位不为b00),则
写入的数据会被忽略,不会启动编程操作,错误标志PGAERR将置1。
l写保护错误标志WRPERR:
-如果要编程的区域受到安全保护机制的影响,处于受保护的状态,向
该区域中的地址写入数据,则写入的数据会被忽略,不会启动编程操
作,错误标志WRPERR将置1。
5.4.1选项字节组成
选项字节存放于Flash存储器的Option bytes区,用于保存与芯片硬件功能相关的配置项,用户可根据应用对选项字节进行配置,以实现特定的硬件功能。
为了校验选项字节的正确性,在Option bytes区的每个字(32bits)被拆分成两
部分,低16bits存放选项字节,高16bits存放选项字节的反码。
复位后,硬件会自动将Option bytes区中的内容,加载到寄存器里,这些寄存器被称为选项字节加载寄存器,选项字节中各控制位的作用,可查看以下寄存器的详细描述:
lFLASH_OPTR1:选项字节寄存器 1
lFLASH_OPTR2:选项字节寄存器 2
lFLASH_PCROP1AS:代码读出保护区 1A起始地址寄存器
lFLASH_PCROP1AE:代码读出保护区 1A结束地址寄存器
lFLASH_PCROP1BS:代码读出保护区 1B起始地址寄存器
lFLASH_PCROP1BE:代码读出保护区 1B结束地址寄存器
lFLASH_WRP1AS:写保护区A起始地址寄存器
lFLASH_WRP1AE:写保护区A结束地址寄存器
lFLASH_WRP1BS:写保护区B起始地址寄存器
lFLASH_WRP1BE:写保护区B结束地址寄存器
lFLASH_SECR:用户安全配置寄存器
5.4.2选项字节更新
Option bytes区与User flash区不同,用户不能直接对 Option bytes区执行擦除或编程操作,而是要通过对应的选项字节加载寄存器进行更新。
对选项字节的更新遵循以下步骤:
1) 检查Flash状态寄存器(FLASH_SR)中的BSY标志位,以确认当前没有正在执行的Flash操作;
2) 检查FLASH_SR寄存器,确认错误标志均已清除;
3) 解锁Flash选项字节的写保护,使Flash控制寄存器(FLASH_CR)中的
OPTLOCK位清0(详见:Flash选项字节解锁);
4) 配置FLASH_CR寄存器中的PG_MODE为1,进入Flash编程模式;
5) 配置选项字节加载寄存器;
6) 将FLASH_CR寄存器中的OPTSTRT位置1,启动选项字节的更新,同时BSY标志将自动置1;
7) 查询并等待BSY标志清0,表明选项字节已更新完成,此时OPTSTRT位也将被自动清 0;
8) 配置FLASH_CR寄存器中的PG_MODE位为0,退出Flash编程模式;
9) 配置FLASH_CR寄存器中的OPTLOCK位置1,恢复选项字节的写保护锁定状态;
10) 此时FLASH_CR寄存器处于解锁状态,可根据需要配置FLASH_CR寄存器中的LOCK位置1,将其恢复成写保护锁定状态。
在启动选项字节更新后,将对Option bytes区进行擦除,并自动生成选项字节的反码,随后会将选项字节及其反码更新到Option bytes区。
在完成对选项字节的更新后,直接读取Option bytes区,可获取更新后的选项字节值。但是更新后的选项字节此时并未生效,如果读取选项字节加载寄存器,获得的仍将是最近一次已加载生效的选项字节值。在对选项字节进行更新的过程中,可能会出现以下错误标志:
lFlash操作序列错误标志PESERR:
-在OPTSTRT位被置1的同时,如果PG_MODE位为0,则不会启动
选项字节更新,错误标志PESERR将置1;
-当有错误标志(PESERR、PROGERR、SIZERR、PGAERR、WRPERR)
未被清除时,配置OPTSTRT位置1,则不会启动选项字节更新,错误
标志PESERR将置1;
-ERASE、OPTSTRT、OBL_LAUNCH中任意2个以上控制位同时置1,
则不会启动对应的操作,错误标志PESERR将置1。
5.4.3选项字节加载
要使Option bytes区中选项字节生效,可通过以下方式对选项字节进行加载:
l以下复位将触发加载:
-POR/PDR复位
-退出Standby模式复位
l配置FLASH_CR寄存器中OBL_LAUNCH位为1启动加载,加载执行时BSY标志将自动置1,加载完成后该标志将自动清0并触发系统复位。
如果ERASE、OPTSTRT、OBL_LAUNCH中任意2个以上控制位同时置1,则不会启动对应的操作,错误标志PESERR将置1。
在选项字节加载过程中,将自动对选项字节及其反码进行校验,如果出现错误,将维持复位状态不再执行任何操作,直到发生POR/PDR复位。
当选项字节加载生效后,Option bytes区中的选项字节将被自动复制到对应的加载寄存器。读取选项字节加载寄存器,获得的总是加载生效后的选项字节值。
5.5Flash安全保护机制
Flash存储器支持以下安全保护机制:
lFlash读出保护(RDP):通过配置不同RDP保护等级,对存储器的操作权限进行限制。
lFlash代码读出保护(PCROP):禁止对受保护的区域执行读取、编程或擦
除操作,仅允许取指操作。
lFlash写入保护(WRP):禁止对受保护的区域执行编程或擦除操作,但允
许取指和读取操作。
lFlash用户安全区域:在复位后,用户安全区域处于未保护状态,可执行
取指、读取、编程和擦除操作。当安全区域使能后,该区域不可见,禁止
对该区域执行任何操作,直到重新复位。
5.5.1Flash读出保护
5.5.1.1RDP保护权限
Flash读出保护(RDP),共有三种保护等级:
RDP0:
l从User flash/SRAM启动
-User flash区:允许取指、读取、编程、擦除
-System memory区:仅允许取指
-Option bytes区:允许读取、更新(通过选项字节加载寄存器)
-OTP区:允许读取、编程(每个字仅可编程一次)
-备份寄存器:允许读取、写入
l从Bootloader启动
-User flash区:允许取指、读取、编程、擦除
-System memory区:允许取指、读取
-Option bytes区:允许读取、更新(通过选项字节加载寄存器)
-OTP区:禁止执行任何操作
-备份寄存器:禁止执行任何操作
l调试接口
-User flash区:允许取指、读取、编程、擦除
-System memory区:仅允许取指
-Option bytes区:允许读取、更新(通过选项字节加载寄存器)
-OTP区:允许读取、编程(每个字仅可编程一次)
-备份寄存器:允许读取、写入
注意:从Bootloader启动时,禁用调试接口。
RDP1:
l从User flash启动
-User flash区:允许取指、读取、编程、擦除
-System memory区:仅允许取指
-Option bytes区:允许读取、更新(通过选项字节加载寄存器)
-OTP区:允许读取、编程(每个字仅可编程一次)
-备份寄存器:允许读取、写入
l从Bootloader启动
-User flash区:仅允许取指
-System memory区:允许读取、取指
-Option bytes区:允许读取、更新(通过选项字节加载寄存器)
-OTP区:禁止执行任何操作
-备份寄存器:禁止执行任何操作
l禁止从SRAM启动
l禁用调试接口
RDP2:
l从User flash启动
-User flash区:允许取指、读取、编程、擦除
-System memory区:仅允许取指
-Option bytes区:仅允许读取-
OTP区:允许读取、编程(每个字仅可编程一次)
-备份寄存器:允许读取、写入
l禁止从Bootloader启动
l禁止从SRAM启动
l禁用调试接口
对于Flash存储器,当Flash控制器检测到无权限的非法操作时,FLASH_SR寄 存器中的 ACERR错误标志将立刻置1,非法操作会被立刻终止,并产生总线访 问错误,触发 HardFault中断。
对Option bytes区的更新,必须通过相应的选项字节加载寄存器来完成。当保护等级为 RDP2时,不允许更新该区域,此时如果FLASH_CR寄存器中的
OPTSTRT位被置1,则FLASH_SR寄存器中的ACERR错误标志将置1,wo对Option bytes区的操作将被终止,并产生总线访问错误,触发HardFault中断。
-
mcu
+关注
关注
146文章
17128浏览量
350999 -
FlaSh
+关注
关注
10文章
1633浏览量
147947 -
存储器
+关注
关注
38文章
7484浏览量
163767
发布评论请先 登录
相关推荐
评论