长话短说:先擦后写。
最近在做一个课程设计 (which flopped but anyway). 需要向 Flash 写一些能够断电后保留的数据。
在 HAL 库的加持下,一切进行得都很顺利。但是有趣的事情是:如果向同一个 Flash 地址写入两次(或者以上),那么会写入失败,只有第一次写入的值是可用的。这影响了调试工作的进行(毕竟,你需要能够重置这些信息)。
Flash 的访问要求 8 字节对齐。这一点检查没有问题,毕竟只要搜索「Flash 无法写入」,大家的第一反应都是对齐访问问题。
Google 一圈没找到太多相关的内容。不过发现了一个 pattern: 所有的样例代码在写入函数中都会先擦除要被写入的 Page, 再进行写入。
这提示了:Flash 必须先被擦除,然后才能被写入。将重置信息部分改写为擦除对应的 Page 之后,问题解决。
Your comments will be submitted to a human moderator and will only be shown publicly after approval. The moderator reserves the full right to not approve any comment without reason. Please be civil.