本文重點介紹flash的數據存取特性、flash的內存劃分、一個簡單的存取圖片的內存管理方式,以及對flash寫前刪的時間、刪後讀的時間、寫後讀的時間進行測量的一個小實驗。目的在於更全面瞭解flash自己特色(尤爲是限制),從而方便設計出高效的內存管理驅動。函數
本文參考論文:閃存的存儲管理及索引方法研究_趙培_華中科技大博士論文_2011年性能
e-mail:beautifulzzzz@qq.com測試
flash有幾大奇葩的特色:ui
閃存具備多種不用於磁盤的特性,例如:(1)閃存具備不對稱的讀寫操做時間,即閃存的寫時間遠大於讀時間,擦除時間遠大於寫時間。(2)閃存在重寫同一閃存存儲位置的數據以前須要執行擦除操做,即具備Erase-Before-Write特性。很顯然,採用傳統的「In-place-update"方法(即每次更新閃存頁前均擦除整個閃存塊)更新閃存的策略是不可行的。所以通常狀況下,閃存存儲系統採用」out-place-updata"方式更新閃存中的數據,即:將新版本的數據寫入其餘空閒的頁面內,而後再將原始數據所在頁面記爲失效頁面(Dead page 或Dirty Page),包含最新版本的閃存頁面成爲Live頁面。當閃存中的空頁面不足時,才執行擦除操做回收空間。若待回收的閃存塊包含有效數據,則須要在執行擦除操做前將有效數據複製到閃存其餘空閒頁面,這一過程成爲Garbage Collection。(3)每一個閃存塊具備有限的擦除次數(通常爲10K或100K次),若某個塊超過最大擦除次數,則此塊爲「壞塊」(Worn-out Block或Bad Block)。壞塊的可靠性差,將會頻繁出現讀寫錯誤,不能用於存儲數據。(4)爲了延長閃存使用壽命,閃存存儲系統須要經過Wear-leveling機制儘可能使全部閃存塊具備相同或類似的擦除次數。spa
這些特性使得傳統的基於磁盤設計的數據管理拌飯直接應用到閃存系統時的性能不好,不能充分發揮閃存本省的優良特性(SSD和機械式硬盤)。設計
http://www.xinyahong.com/upLoad/product/month_1411/20141118164301603.pdf3d
該款芯片在nRF51822EK_TM開發板上用~code
按頁寫,寫多頁,傳入是地址和要寫數據的量,內部寫寫的是零頭,而後按頁整頁整頁的寫blog
一張圖128X160的40960bytes=160X256(頁),而1block爲64KB=2^16=2^8X256≈256頁(而2^7又小於160,所以把1block的64K用來存儲一個圖片)。所以:索引
1 SPIFlash_Erase_Block(0); 2 SPIFlash_Erase_Block(1); 3 SPIFlash_Erase_Block(2); 4 nrf_delay_ms(400); 5 SpiFlash_Write_MorePage(gImage_A, 0, 40960); 6 SpiFlash_Write_MorePage(gImage_B, 1<<16, 40960); 7 SpiFlash_Write_MorePage(gImage_C, 2*(1<<16), 40960); 8 //DispPic(pic_eval); 9 DispPicFromSD(0); 10 DispPicFromSD(1); 11 DispPicFromSD(2);
因爲第三節中介紹的一張圖片約爲1block大小,此外整個存儲所有用來存放相同規格的圖片,加之這些圖片只須要存一遍,以後僅僅是讀取這些圖片(不涉及屢次刪除、隨機索引等狀況),所以,在第三節中的存儲利用方法還算能夠知足需求。
可是對於一種帶有陀螺儀採集數據、存儲和同步的一種手環:每幀17byte的傳感器採集數據,(1)首先要知足採集數據的時候高速存儲,(2)其次要知足同步數據時完整同步,(3)同時也要知足Flash滿了以後能用新的數據覆蓋老的數據。
針對這3點要求能夠按照下面的方法進行實施:
針對上面實施辦法,須要具體測試下存取的效果:
實驗覈心代碼:48行以上測試sector erase後最短多久進行write操做沒有問題;48行如下是測試sector erase後最短多久read操做沒有問題:
測試結果:erase sector後write至少須要100ms的延時(建議選120ms),write後read和erase sector後read均不須要延時。
同4.1理解.
測試結果:erase block後至少須要350ms的延時,才能進行有效寫!(其中後半段是註釋掉第50行代碼致使的)
PS:erase full至少40s,測試6次未出現錯誤,實驗同4.1,4.2。
PS:若是您以爲還不錯,點個贊,讓更多人受益~
@link:http://pan.baidu.com/s/1pK13HUV(私用)
@beautifulzzzz 2016-03-19 continue~
e-mail:beautifulzzzz@qq.com