5.3.5 User flash 区擦除操作
User flash 区支持以下擦除方式:
l 页擦除(512 字节)
l 块擦除(16KB)
l 批量擦除(128KB)
Flash 存储器在执行擦除操作时,不能同时进行读取操作,需要等待存储器完成 擦除操作后,读取操作才能正常进行,擦除完成后的 Flash 数据为全 1。
5.3.5.1 User 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.2 User 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.3 User 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.4 User flash 区擦除错误
在对 User flash 区执行擦除操作的过程中,可能会出现以下错误标志:
l Flash 操作序列错误标志 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.6 User flash 区编程操作
对 Flash 存储器执行编程操作,每次能写入的数据长度固定为 32bits(字),不支持其他长度的数据写入。
FLASH 存储器在执行编程操作时,不能同时进行读取操作,需要等待存储器完成编程操作后,读取操作才能正常进行。
与 Flash 擦除操作类似,编程操作也会受到安全保护机制的影响:
5.3.6.1 User 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 寄存器的写保护锁定状态。
沈阳芯硕科技有限公司是华大电子专业代理商,有技术问题可咨询芯虎论坛.