STM32学习笔记 | 片内FLASH读写失败问题分析( 二 )


通过工具写数据,就是我们量产时说的下载数据,正式一点说法叫编程 。
3.擦除数据

STM32学习笔记 | 片内FLASH读写失败问题分析

文章插图
擦除数据通常分擦除页、扇区、整块,擦除时间也因型号不同、速度不同有差异 。
提示:该部分内容建议参考官方提供的Demo(标准外设库和HAL都有基本例程)
嵌入式专栏
FLASH 常见问题
STM32内部Flash主要用途是存储程序代码和数据 。操作内部Flash要慎重,一旦操作不当就有可能会破坏整个程序 。
问题一:编程(写数据)地址非对齐
写数据时,我们要指定写入的地址,如果写入地址为非对齐,则会出现编程对齐错误 。
比如:
遵循32位(4字节)地址对齐,你的地址只能是4的倍数 。正确,错误 。
提示:不同型号对齐宽度可能不同,有的32位、有的128位等 。
解决办法:通过“取余”判断地址 。
问题二:编程地址数据未擦除
写数据之前需要擦除对应地址数据才能正常写入,否则会出现失败 。
我们擦除数据通常是页,或扇区,写入某个地址数据,就可能影响其他地址的数据,如果直接覆盖就会出现问题 。
解决办法:通常的做法是读出整页(或扇区)数据并缓存,再擦除整页,再写入 。
问题三:擦除时读取数据
STM32内部Flash在进行写或擦除操作时,总线处于阻塞状态,此时读取Flash数据就会出现失败 。【双BANK模式除外】
解决办法:通过标志判断写/擦除操作是否完成 。
问题四:电压不稳定写入失败
处于外界干扰较大的环境,供电就有暂降的可能,而对STM32内部Flash进行操作时,如果低于特定电压就会出现编程失败 。
操作Flash的最低电压既与工作频率有关,也与STM32型号有关(具体需要看数据手册) 。
解决办法:通过完善硬件电路保证电压稳定 。电源电压不够或不稳导致隐患往往不易觉察!!
复盘一下
▼FLASH 基础内容:结构、常规操作、容量、大小端格式;
▼FLASH 选项字节:通过软件编码和编程工具配置;
▼FLASH 读写擦除操作:常规程序读写操作、工具的读写操作;
▼FLASH 常见问题:编程地址非对齐、数据未擦除、擦除同时读取数据、电压不稳定写入失败 。