打印
[AT32F403/403A]

擦除页大小不同的内部 FLASH 有何注意事项?

[复制链接]
468|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2023-9-19 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AT32F4 全系列内部 FLASH 大小为 256K 及以上的闪存扇区大小是 2K,内部 FLASH 大小小于 256K 的闪存扇区大小是 1K,在擦除时有所区别:

使用特权

评论回复
沙发
forgot|  楼主 | 2023-9-19 10:36 | 只看该作者
1. 擦除闪存扇区步骤:解锁闪存->擦除闪存扇区->锁定闪存

使用特权

评论回复
板凳
forgot|  楼主 | 2023-9-19 10:37 | 只看该作者
2. 擦除闪存扇区起始地址(Page_Address)及页内的任何地址都可以将该页擦除

使用特权

评论回复
地板
forgot|  楼主 | 2023-9-19 10:37 | 只看该作者
3. 擦除位于 512K 之内的闪存扇区,是操作寄存器 FLASH->CTRL/FLASH->ADDR;擦除位于 512K 及以
外的闪存扇区,是操作寄存器 FLASH->CTRL2/FLASH->ADDR2

使用特权

评论回复
5
forgot|  楼主 | 2023-9-19 10:37 | 只看该作者
4. 将闪存扇区大小是 1K 的擦除代码移植到闪存扇区大小是 2K 时,若连续擦除多个闪存扇区,需要将起
始地址递增长度改为 2K(0x800)。如果起始地址递增长度还是 1K(0x400),那么一个 2K 的闪存扇区
将会被擦除两次。例如,在 IAP 升级 APP 时,一般操作是擦除 1 页,写 1 页。如果页大小 2K 还是按
页大小 1K 的擦除代码操作,比如擦除起始地址是 0x08001000 的闪存扇区,第一次会将该页擦除,写
入 1K 数据后,第二次擦除长度只增加 1K,写入的起始地址是 0x08001400,那么还是会将该页擦除,
将上一次写入的 1K 数据擦除

使用特权

评论回复
6
forgot|  楼主 | 2023-9-19 10:37 | 只看该作者
5. 将闪存扇区大小是 2K 的擦除代码移植到闪存扇区大小是 1K 时,若连续擦除多个闪存扇区,需要将起
始地址递增长度改为 1K(0x400)。如果起始地址递增长度还是 2K(0x800),那么每隔一页将会有一页
被漏擦除。例如,在 IAP 升级 APP 时,一般操作是擦除 1 页,写 1 页。如果闪存扇区大小 1K 还是按
闪存扇区大小 2K 的擦除代码操作,比如擦除起始地址是 0x08001000 的页,将该页 1K 空间擦除,但
写入 2K 数据,那么起始地址是 0x08001400 的页在没有被擦除就写入数据,会导致写入的数据错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1635

主题

12510

帖子

54

粉丝