页擦除
FMC 的页擦除功能使得主存储闪存的页内容初始化为高电平。 每一页都可以被独立擦除,而不影响其他页内容。
FMC 擦除页步骤如下:
◼ 确保 FMC_CTLx 寄存器不处于锁定状态;
◼ 检查 FMC_STATx 寄存器的 BUSY 位来判定闪存是否正处于擦写访问状态,若 BUSY 位为 1,则需等待该操作结束, BUSY 位变为 0;
◼ 置位 FMC_CTLx 寄存器的 PER 位;
◼ 将待擦除页的绝对地址( 0x08XX XXXX)写到 FMC_ADDRx 寄存器;
◼ 通过将 FMC_CTLx 寄存器的 START 位置 1 来发送页擦除命令到 FMC;
◼ 等待擦除指令执行完毕, FMC_STATx 寄存器的 BUSY 位清 0;
◼ 如果需要,使用 DBUS 读并验证该页是否擦除成功。
整片擦除
FMC 提供了整片擦除功能可以初始化主存储闪存块的内容。当设置 MER0 为 1 时,擦除过程仅作用于 Bank0,当设置 MER1 为 1 时,擦除过程仅作用于 Bank1,当设置 MER0 和 MER1 为 1 时,擦除过程作用于整片闪存。
整片擦除操作,寄存器设置具体步骤如下:
◼ 确保 FMC_CTLx 寄存器不处于锁定状态;
◼ 等待 FMC_STATx 寄存器的 BUSY 位变为 0;
◼ 如果单独擦除 Bank0,置位 FMC_CTL0 寄存器的 MER 位。如果单独擦除 Bank1,置位 FMC_CTL1 寄存器的 MER 位。如果整片擦除闪存,同时置位 FMC_CTL0 和 FMC_CTL1 寄存器的 MER 位;
◼ 通过将 FMC_CTLx 寄存器的 START 位置 1 来发送整片擦除命令到 FMC;
◼ 等待擦除指令执行完毕, FMC_STATx 寄存器的 BUSY 位清 0;
◼ 如果需要,使用 DBUS 读并验证是否擦除成功。
字编程操作
FMC 提供了一个 64 位、32 位整字/16 位半字编程功能,用来修改主存储闪存块内容。
编程操作使用各寄存器流程如下。
◼ 确保 FMC_CTLx 寄存器不处于锁定状态;
◼ 等待 FMC_STATx 寄存器的 BUSY 位变为 0;
◼ 置位 FMC_CTLx 寄存器的 PG 位;
◼ DBUS 写一个 32 位整字/16 位半字到目的绝对地址(0x08XXXXXX);
◼ 等待编程指令执行完毕, FMC_STATx 寄存器的 BUSY 位清 0;
◼ 如果需要,使用 DBUS 读并验证是否编程成功。
可选字节块擦除
FMC 提供了一个擦除功能用来初始化闪存中的可选字节块。
可选字节块擦除过程如下所示。
◼ 确保 FMC_CTL0 寄存器不处于锁定状态;
◼ 等待 FMC_STAT0 寄存器的 BUSY 位变为 0;
◼ 解锁 FMC_CTL0 寄存器的可选字节操作位;
◼ 等待 FMC_CTL0 寄存器的 OBWEN 位置 1;
◼ 置位 FMC_CTL0 寄存器的 OBER 位;
◼ 通过将 FMC_CTL0 寄存器的 START 位置 1 来发送可选字节块擦除命令到 FMC;
◼ 等待擦除指令执行完毕, FMC_STAT 寄存器的 BUSY 位清 0;
◼ 如果需要,使用 DBUS 读并验证是否擦除成功。当可选字节块擦除成功执行, FMC_STAT 寄存器的 ENDF 位置位。若 FMC_CTL0 寄存器的 ENDIE 位被置 1, FMC 将触发一个中断。
可选字节块编程
FMC 提供了一个 32 位整字/16 位半字编程功能,可用来修改可选字节块内容。可选字节块共有8 对可选字节。每对可选字节的高字节是低字节的补。当低字节被修改时, FMC 自动生成该选项字节的高字节。
字节块编程操作过程如下。
◼ 确保 FMC_CTL0 寄存器不处于锁定状态;
◼ 等待 FMC_STAT0 寄存器的 BUSY 位变为 0;
◼ 解锁 FMC_CTL0 寄存器的可选字节操作位;
◼ 等待 FMC_CTL0 寄存器的 OBWEN 位置 1;
◼ 置位 FMC_CTL0 寄存器的 OBPG 位;
◼ DBUS 写一个 32 位整字/16 位半字到目的地址;
◼ 等待编程指令执行完毕, FMC_STAT 寄存器的 BUSY 位清 0;
可选字节块说明
每次系统复位后,闪存的可选字节块被重加载到 FMC_OBSTAT 和 FMC_WP 寄存器,可选字节生效。可选字节的补字节具体为可选字节取反。当可选字节被重装载时,如果可选字节的补字节和可选字节不匹配, FMC_OBSTAT 寄存器的 OBERR 位将被置 1,可选字节被强制设置为 0xFF。若可选字节和其补字节同为 0xFF,则 OBERR 位不置位。
页擦除/编程保护
FMC 的页擦除/编程保护功能可以阻止对闪存的意外操作。当 FMC 对被保护页进行页擦除或编程操作时,操作本身无效且 FMC_STAT 寄存器的 WPERR 位将被置 1。如果 WPERR 位被置 1 且 FMC_CTL 寄存器的 ERRIE 位也被置 1 来使能相应的中断, FMC 将触发闪存操作出错中断,等待 CPU 处理。配置可选字节块的 WP [31:0]某位为 0 可以单独使能某几页的保护功能。如果在可选字节块执行了擦除操作,所有的闪存页擦除和编程保护功能都将失效。当可选字节的 WP 被改变时,需要系统复位使之生效。