首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于STM32的FLASH操作(2)

关于STM32的FLASH操作(2)

FPEC

FPEC(FLASH Program/Erase controller闪存编程/擦除控制器),STM32通过FPEC来擦除和编程FLASH。FPEC使用7个寄存器来操作闪存:

FPEC键寄存器(FLASH_KEYR)                                  写入键值解锁。

选项字节键寄存器(FLASH_OPTKEYR)              写入键值解锁选项字节操作。

闪存控制寄存器(FLASH_CR)                               选择并启动闪存操作。

闪存状态寄存器(FLASH_SR)                               查询闪存操作状态。

闪存地址寄存器(FLASH_AR)                               存储闪存操作地址。

选项字节寄存器(FLASH_OBR)                            选项字节中主要数据的映象。

写保护寄存器(FLASH_WRPR)                            选项字节中写保护字节的映象。

键值

为了增强安全性,进行某项操作时,须要向某个位置写入特定的数值,来验证是否为安全的操作,这些数值称为键值。STM32FLASH共有三个键值:

RDPRT   =0x000000A5        用于解除读保护

KEY1        =0x45670123         用于解除闪存锁

KEY2        =0xCDEF89AB            用于解除闪存锁

闪存锁

FLASH_CR中,有一个LOCK位,该位为1时,不能写FLASH_CR寄存器,从而也就不能擦除和编程FLASH,这称为闪存锁。

LOCK位为1时,闪存锁有效,只有向FLASH_KEYR依次写入KEY1KEY2后,LOCK位才会被硬件清零,从而解除闪存锁。当LOCK位为1时,对FLASH_KEYR的任何错误写操作(第一次不是KEY1,或第二次不是KEY2),都将会导致闪存锁的彻底锁死,一旦闪存锁彻底锁死,在下一次复位前,都无法解锁,只有复位后,闪存锁才恢复为一般锁住状态。

复位后,LOCK位默认为1,闪存锁有效,此时,可以进行解锁。解锁后,可进行FLASH的擦除编程工作。任何时候,都可以通过对LOCK位置1来软件加锁,软件加锁与复位加锁是一样的,都可以解锁。

主存储块的擦除

主存储块可以按页擦除,也可以整片擦除。

页擦除

主存储块的任何一页都可以通过FPEC的页擦除功能擦除。

建议使用以下步骤进行页擦除:

1.检查FLASH_SR寄存器的BSY位。以确认没有其他正在进行的闪存操作。必须等待BSY位为0,才能继续操作。

             2.设置FLASH_CR寄存器的PER位为1。选择页擦除操作。

3.设置FLASH_AR寄存器为要擦除页所在地址,选择要擦除的页。FLASH_AR的值在哪一页范围内,就表示要擦除哪一页。

4.设置FLASH_CR寄存器的STRT位为1,启动擦除操作。

5.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。

6.查询FLASH_SR寄存器的EOP位,EOP1时,表示操作成功。

            7.读出被擦除的页并做验证。擦完后所有数据位都为1

整片擦除

整片擦除功能擦除整个主存储块,信息块不受此操作影响。

建议使用以下步骤进行整片擦除:

      1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。

             2.设置FLASH_CR寄存器的MER位为1。选择整片擦除操作。

             3.设置FLASH_CR寄存器的STRT位为1。启动整片擦除操作。

             4.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。

             5.查询FLASH_SR寄存器的EOP位,EOP1时,表示操作成功。

             6.读出所有页并做验证。擦完后所有数据位都为1

继承事业,薪火相传
返回列表