一、基本架構
快閃記憶體是無需供電保持資訊的可擦寫的儲存空間。快閃記憶體與經過裁剪的、合適的裝置驅動程式和檔案系統一起使用。在linux系統中,這種特別設計的驅動程式和檔案系統是由MTD子系統提供的。
linux-MTD的組成
1. MTD核心
2. 映射驅動程式。
3. 晶片驅動程式。晶片通訊的命令支援。
使用者程式提出請求後,經過VFS(虛擬檔案系統),解析出具體的檔案系統,如jffs2,yaffs2
mtd裝置驅動分三層
作業系統介面層
塊裝置mtd_block.c mtd_blkdev.c
字元裝置mtd_char.c
處理協議層
MTD裝置驅動(nandbase.c)
和結構nand_chip相關
相關硬體層(晶片驅動程式)
S3C2410_nand.c和硬體相關。
MTD塊裝置驅動程式可以讓flash器件偽裝成塊裝置
mtd_info用於描述MTD原始裝置資訊。其中定義了大量關於MTD的資料和操作函數。如頁大小,OOB大小,塊大小,ecc類型等。
塊裝置是要放在檔案系統上才能訪問的。JFFS2是專門為flash設計的完整的檔案系統。cramfs,唯讀檔案系統,壓縮比例高。yaffs檔案系統是為nand flash器件設計的檔案系統。
二、資料結構
mtd_partition 標識快閃記憶體晶片的分區情況
map_info 聯絡映射驅動程式與晶片驅動程式
mtd_info一般裝置相關資訊
erase_info,erase_info_user,用於快閃記憶體擦除管理結構
cfi_private, 由NOR晶片驅動程式維護的裝置相關資訊
nand_ecclayout,NAND晶片集的OOB空閑區布局
三、nand flash相關
nand flash內部有許多塊(block)組成,每塊又由若干頁(page)組成。第
頁有保留的冗餘區(spare area)。寫入資料的最小單元是頁,擦除的最小單
元是塊。一般情況下,每512個位元組對應16個冗餘位元組的冗餘區,用於儲存差
錯校正碼,邏輯地址等。
根據一個flash單元可儲存的bit位,可將flash分為SLC和MLC兩種。MLC
flash可儲存2~4位資訊。
使用flash要解決的問題
1.塊擦除次數有限
採用損耗均衡法使各個塊近似均衡使用
2.異位更新
flash中的資料修改後要放在其它閒置地區,原來的地區要在適
當的時候擦除。因此需要地址映射、記憶體回收等技術來管理儲存空間。
3.壞塊
nand在生產和使用的過程中會產生壞塊。
4.錯誤校正碼
nand flash會產生位翻轉的問題。需要使用ECC演算法來錯誤修正。
以上4個問題都要在檔案系統中(NFTL層)解決。
nand flash使用
nand flash按功能上可以分為這麼幾個部分
1.有效資料區
2.替代區
3.空閑區
4.待擦除區
5.壞塊區
所以在物理區管理上你可以分為這麼三個部分
1.映射區
2.資料使用區
3.保留區
映射區內要包含壞塊表(一般一頁就夠了)
資料使用區,就是自己使用的地方。具體就是上面說的空閑區,待擦除區,替代區。
保留區,就是防止flash使用過程中產生了壞塊,用此區去填充壞掉的塊。
第一次使用時,必須掃描全盤建立壞塊表。這一步是通過查詢冗餘區的塊狀態位元組完成的。此後根據情況,利用冗餘區查詢flash的ecc資訊,地址轉換表資訊,塊狀態資訊等完成相應的操作。
關於nand flash的具體操作,參看http://download.csdn.net/source/3568972