stm32wb55 flash

FLASH:

如果在 Flash 存储器操作期间发生器件复位,则不能保证 Flash 存储器的内容。
在对闪存进行编程/擦除操作期间,任何读取闪存的尝试都会使总线停止。一旦编程/擦除操作完成,读操作就会正确进行。

解锁闪存
复位后,不允许对 Flash 存储器控制寄存器 (FLASH_CR) 或 Flash 存储器 CPU2 控制寄存器 (FLASH_C2CR) 进行写操作,以保护 Flash 存储器免受因电气干扰等可能导致的意外操作。以下序列用于解锁这些寄存器:
1. 将KEY1 = 0x4567 0123写入闪存密钥寄存器(FLASH_KEYR)
2. 将 KEY2 = 0xCDEF 89AB 写入闪存密钥寄存器 (FLASH_KEYR)。
任何错误的序列都会锁定 FLASH_CR 寄存器,直到下一次系统复位。在按键顺序错误的情况下,检测到总线错误并产生硬故障中断。
FLASH_CR 寄存器可以通过设置其中一个寄存器中的 LOCK 位由软件再次锁定。

闪存擦除操作可以在页级别(页擦除)或整个内存(整体擦除)执行。 批量擦除不影响信息块(系统闪存、OTP 和选项字节)。
闪存页擦除
CPU1 只能页擦除用户 Flash 的非安全部分。
安全 CPU2 能够页擦除用户闪存的安全和非安全部分。
只有在闪存状态寄存器 (FLASH_SR) 和闪存 CPU2 状态寄存器 (FLASH_C2SR) 中的 PESD 位允许时,才会开始页面擦除。
当一个页面受 PCROP 或 WRP 保护时,它不会被擦除。

要擦除页面(4 KB),请按照以下步骤操作:
1. 通过检查 Flash 存储器状态寄存器 (FLASH_SR) 或 Flash 存储器 CPU2 状态寄存器 (FLASH_C2SR) 中的 BSY 位来检查没有 Flash 存储器操作正在进行。
通过检查 Flash 存储器状态寄存器 (FLASH_SR) 或 Flash 存储器 CPU2 状态寄存器 (FLASH_C2SR) 中的 PESD 位来检查 Flash 存储器编程和擦除操作是否被允许(即使状态可能由于 Flash 存储器操作请求而改变,建议进行这些检查) 另一个CPU,以限制风险
开始页擦除时收到总线错误)。
2. 检查并清除由于先前编程导致的所有错误编程标志。 如果没有,则设置 PGSERR。
3. 设置 PER 位并在 Flash 存储器控制寄存器 (FLASH_CR) 或 Flash 存储器 CPU2 控制寄存器 (FLASH_C2CR) 中选择要擦除的页 (PNB)。
4. 设置 FLASH_xxCR 寄存器中的 STRT 位。
5. 等待 FLASH_xxSR 寄存器中的 BSY 位被清除。

闪存主存储器编程序列
闪存一次编程 72 位(双字,64 位加 ECC,8 位)。
只有在编程全 0 值时才允许在先前编程的双字中编程。不允许在先前编程的双字中编程任何其他值,任何尝试都会在闪存状态寄存器中设置 PROGERR 标志
(FLASH_SR) 或闪存 CPU2 状态寄存器 (FLASH_C2SR),除非使用全 0 值对已编程的双字进行编程。
只能对双字(2 x 32 位数据)进行编程。
 任何写入字节(8 位)或半字(16 位)的尝试都会在 FLASH_xxSR 寄存器中设置 SIZERR 标志。  任何写入未与双字地址对齐的双字的尝试都会在 FLASH_xxSR 寄存器中设置 PGAERR 标志。
只有安全 CPU2 能够将编程数据下载到内存的安全部分。 CPU1 在安全闪存区域中的闪存编程被忽略,并产生总线错误。

标准编程
标准模式下的 Flash 存储器编程顺序如下:
1. 通过检查 Flash 存储器状态寄存器 (FLASH_SR) 或 Flash 存储器 CPU2 状态寄存器 (FLASH_C2SR) 中的 BSY 位来检查没有 Flash 主存储器操作正在进行。
通过检查 Flash 存储器状态寄存器 (FLASH_SR) 或 Flash 存储器 CPU2 状态寄存器 (FLASH_C2SR) 中的 PESD 位来检查 Flash 存储器编程和擦除操作是否被允许(即使状态可能由于 Flash 存储器操作请求而改变,建议进行这些检查)另一个CPU,以限制风险
开始编程时收到总线错误)。
2. 检查并清除由于先前编程导致的所有错误编程标志。如果没有,则设置 PGSERR。
3. 设置 Flash 存储器控制寄存器 (FLASH_CR) 或 Flash 存储器 CPU2 控制寄存器 (FLASH_C2CR) 中的 PG 位。
4. 在所需的内存地址、主内存块或 OTP 区域内执行数据写入操作。只能编程双字(64 位)。
a) 在与双字对齐的地址中写入第一个字
b) 写第二个词。
5. 等到 FLASH_xxSR 寄存器中的 BSY 位被清除。
6. 检查FLASH_xxSR寄存器中的EOP标志是否置位(表示烧录操作成功),并用软件清零。
7. 如果没有更多的编程请求,清除 FLASH_xxSR 寄存器中的 PG 位。

当 Flash 存储器接口接收到一个良好的序列(双字)时,会自动启动编程并设置 BSY 位。 内部振荡器 HSI16(16 MHz)在 PG 位置位时自动启用,在 PG 位清零时自动禁用,除非 HSI16 之前使用 RCC_CR 寄存器中的 HSION 启用。
如果用户只需要烧写一个字,则必须用擦除值 0xFFFF FFFF 完成双字才能自动启动烧写。ECC 是从烧写的双字计算出来的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值