FMC 提供了一个通过 SBUS 修改主存储闪存内容的 32 位整字编程功能。
编程操作,寄存器设置具体步骤如下:
确保FMC_CTL寄存器不处于锁定状态;
检查FMC_STAT寄存器的BUSY位来判定闪存是否正处于擦写访问状态,若BUSY位为1,
则需等待该操作结束,BUSY位变为0;
置位FMC_CTL寄存器的PG位;
写一个32位整字到目的绝对地址(0x08XX XXXX);
等待编程指令执行完毕,FMC_STAT寄存器的BUSY位清0;
如果需要,使用SBUS读并验证是否编程成功。
当主存储块编程成功执行,FMC_STAT 寄存器的 ENDF 位置位。若 FMC_CTL 寄存器的 ENDIE
位被置 1,FMC 将触发一个中断。有一些编程错误需要注意:
每个字在擦除后和下次擦除前只能编程一次。注意 PG 位必须在字编程操作前被置位。在正被
擦除 / 保护页上的编程操作会被忽略,FMC_STAT 寄存器中的 WPERR 位会被置位。
注意,如果编程数据未能写满 32 位,这些数据不会被编程入 flash 闪存,并且不会有任何提
示。
在这些情况下,如果 FMC_CTL 寄存器的 ERRIE 位被置 1,FMC 将触发一次闪存操作错误中
断。在中断服务程序中,软件可以通过检查 FMC_STAT 寄存器中的 WPERR 位来检测发生了
哪种错误。
图 字编程操作流程显示了主存储块字编程操作流程
注意:1.设置 PG 位后,支持连续编程以满足 WLAN OTA 要求。2.如果用户在编程前不进行软件读操作检查,则编程内容与闪存原有内容线与。3.为了获得最快的编程速度,用户在操作过程中需要注意以下几点:(1)32 位编程并且地址连续。(2)在总线上连续写入,写操作之间必须没有读操作。(3)两次写之间的间隔不能超过 64xThclk(闪存时钟是 hclk 的 2 分频)。
|