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 寄存器的写保护锁定状态。 5.3.6.2 User 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 Option bytes 区操作说明 5.4.1 选项字节组成 选项字节存放于 Flash 存储器的 Option bytes 区,用于保存与芯片硬件功能相关的配置项,用户可根据应用对选项字节进行配置,以实现特定的硬件功能。为了校验选项字节的正确性,在 Option bytes 区的每个字(32bits)被拆分成两部分,低 16bits 存放选项字节,高 16bits 存放选项字节的反码。复位后,硬件会自动将 Option bytes 区中的内容,加载到寄存器里,这些寄存器被称为选项字节加载寄存器,选项字节中各控制位的作用,可查看以下寄存器的详细描述: l FLASH_OPTR1:选项字节寄存器 1 l FLASH_OPTR2:选项字节寄存器 2 l FLASH_PCROP1AS:代码读出保护区 1A 起始地址寄存器 l FLASH_PCROP1AE:代码读出保护区 1A 结束地址寄存器 l FLASH_PCROP1BS:代码读出保护区 1B 起始地址寄存器 l FLASH_PCROP1BE:代码读出保护区 1B 结束地址寄存器 l FLASH_WRP1AS:写保护区 A 起始地址寄存器 l FLASH_WRP1AE:写保护区 A 结束地址寄存器 l FLASH_WRP1BS:写保护区 B 起始地址寄存器 l FLASH_WRP1BE:写保护区 B 结束地址寄存器 l FLASH_SECR:用户安全配置寄存器
|