關於跨塊寫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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章