當前位置:
首頁 >
【嵌入式干货】利用二分法定位Flash存有数据(非FF)的地址
發布時間:2025/4/16
48
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【嵌入式干货】利用二分法定位Flash存有数据(非FF)的地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
最近項目中需要實現這樣的功能:設備具備溫濕度數據采集并寫入flash保存的功能;當設備復位后,還能重新開啟采集功能且將采集到的數據繼續接著寫入。問題來了,復位后,MCU會將RAM的數據清除,這樣會導致程序丟失了上次記錄溫濕度數據的最終flash地址,那么得在復位后程序能夠找到復位前記錄的flash地址(即flash中存有數據(非FF)的最后地址)。
實現
利用二分法對flash進行數據查找,用的是2M byte flash芯片P25Q16U
一、首先在PC端用C語言跑通實現代碼如下:
二、在硬件上跑通代碼如下;
//定位上次最后一個存有數據的地址 unsigned int MidAddress; unsigned int NextAddressStart; unsigned int NextAddressStop; unsigned char buf; unsigned int Get_Last_Sector(unsigned int Sector_start, unsigned int Sector_stop) {static unsigned char cnt=0;cnt++;if(Sector_start<0x00004000 || Sector_stop>0x001EC480)//不在尋找區域內{return -1;}MidAddress = (Sector_start + Sector_stop)/2;spiFlashRead(MidAddress,1,&buf);if(buf == 0xFF){ NextAddressStop = MidAddress;NextAddressStart = Sector_start;if(Sector_stop == NextAddressStop){return Sector_start; }else{return Get_Last_Sector(NextAddressStart,NextAddressStop);}}else{ NextAddressStop = Sector_stop;NextAddressStart = MidAddress;if(NextAddressStart == Sector_start){return Sector_start;}else{return Get_Last_Sector(NextAddressStart,NextAddressStop);}} }三、結論
經測試,在2M byte的flash中,最多只需20次便能定位到存有溫濕度數據(非FF)的最后一個字節(地址)。
總結
以上是生活随笔為你收集整理的【嵌入式干货】利用二分法定位Flash存有数据(非FF)的地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BLE】蓝牙模块V1.0
- 下一篇: 【C language】函数指针