关于跨块写flash出现为擦除问题的解决

                            ***

关于跨块写flash出现的擦除再赋值不成功问题的解决

    之前大学的时候关于写flash的接触不多用的是STM32ZET6,但是现在工作了,遇到些问题必须是我们去解决的,就是在断电再上电的过程通道的flash,我们一般用到的是norflash,这样的flash擦除时间比较久,写入的比较快,比较适合少量代码存储,此flash的大小也有很多,那就进入正题;
    来到公司因为某些原因,这些芯片的资料不能提供给大家,只能讲讲我的经历与一点点经验;
    我知道之前使用的stm32在擦除时会有检测此变量存储地址开始到变量结束的存储空间是否在一个数据块上,如果不在,会擦出两块连续的区域,如果在,只擦除本块flash存储空间,但是工作了不再是以前那些芯片,可能会存在不一样,这需要我们自己去看底层sdk是否做了这样的处理,这里需要我们自己一些思考,我以前就从来没有考虑过这些,拿到配好的sdk就看是上手。
   我用的是2M的flash,每个数据存储页是4K,也就是会有512块数据,我们可以看数据手册,也可以直接计算出每块的地址,如果不想进一步玩一下flash,从每块开始写数据,用户变量区自己保存(少量变量数据,不适合大量存储)的,一般不会超过一块的存储容量,不用考虑跨块的问题
   如果需要跨块,如果了解的底层接口功能之后,这时候才知道问题的根源
   下面是遇到的问题截图加解决方法:
   问题1:擦除整片芯片flash,首次跨块赋值成功,再次按照原来的方法擦除再写入,跨块前的数据修改成功,跨块区域为数值0
   读取flash的初始值:
   ![结构体变量aaa,bbb,ccc的初始值](https://img-blog.csdnimg.cn/2020021411260417.png)
   初始赋值:
   ![初始值赋值成功](https://img-blog.csdnimg.cn/20200214112909277.png)
   二次赋值:
   ![aaa变量赋值成功,bbb,ccc赋值失败,读出数据值为0](https://img-blog.csdnimg.cn/2020021411295479.png)
   解决办法:
   ![将跨快区域后一块擦除,添加擦除](https://img-blog.csdnimg.cn/20200214113155690.png)
   结果,成功赋值
   谢谢
   第一次写文,希望能有所帮助,小白一个,大神莫喷!
发布了2 篇原创文章 · 获赞 4 · 访问量 2357
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章