關於STM32 Flash的一些問題


 

注:本人感覺是STM32 Flash本身的問題.

 

最近做STM32的遠程升級,保存到Flash里面,用於記錄更新狀態的信息總是無故的清理掉

最終測試發現 STM32的 Flash 擦除操作 並不一定會真正的清除,

測試代碼 ,底層為原子哥的底層,注:底層程序沒有問題.

FLASH_DATA_ADDR  地址為  0x800f802

u16 ReadDat[10]={10000,0x3031,0x3032,0x3033,0x3034,0x3035,0x3036,0x3037,0x3038,0x3038};
u16 ReadDatata=0;

    
printf("0000000000000000000000000\r\n"); delay_ms(1000); // IAPSetUpdateVersionServer("22222222222222");//存儲雲端版本 STMFLASH_Write(FLASH_DATA_ADDR+6,&ReadDat[0],1);//寫一個數據 delay_ms(1000); printf("1111111111111111111111111111111111\r\n"); delay_ms(1000); STMFLASH_Write(FLASH_DATA_ADDR,&ReadDatata,1); //寫一個數據 delay_ms(1000); printf("ReadDatata=%d\r\n",ReadDatata);//打印讀出的數據 if(ReadDatata == 65535) ReadDatata=0; delay_ms(1000); printf("222222222222222222222222\r\n"); delay_ms(1000); STMFLASH_Write(FLASH_DATA_ADDR+2,&ReadDatata,1);//寫入一個數據 delay_ms(1000); printf("333333333333333333333\r\n"); delay_ms(1000); ReadDatata = 1; STMFLASH_Write(FLASH_DATA_ADDR,&ReadDatata,1);//寫一個數據 while(1);

 

 

測試發現,執行擦除操作以后,有個位置的數據竟然是0xBF

 

 

 

 

擦除前后都是 4 ,說明操作是完全沒有問題的!!!!!!

 

 

 

 

但是執行擦除以后卻........

 

 

 

 

所以寫入數據的時候就會報錯

   

 

說明STM32的Flash確實有bug

出現這種bug...有點蒙,

 

 

為了應對這個問題,我做了少許修改

 

一,擦除以后,再次判斷是否真的擦除

 

 

 

二,存儲數據的地址從每一頁的第十個字節開始

 

 

 

當前方式正在測試,每隔10S更新切換一次程序,每次皆會大量的操作Flash,我讓它執行一天時間,看下數據出錯的概率.

 

 

 

注:其實最優的方法是 分為A,B兩個區域,兩個區域來回存儲數據,然后為了可靠,最好還有一個區域放置初始化的數據!如果A,B皆有問題

則重新調取數據.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM