嵌入式arm學習總結(八)--存儲知識-nandflash-norflash-基於MINI2440平臺



MINI2440   ram:4k , rom:沒有
程序運行:sdram  ,norflash
程序存放:nandflash,norflash
nandflash和norflash最大區別:norflash可以片上運行程序(並行總線,引腳多),nandflash不能(串行總線,引腳少)
通常linux操作系統存放在nandflash裏面

nandflash啓動模式:開發板上電時,nandflash控制器把前4K代碼複製到2440的內部4ksram中,然後通過硬件機制把2440內部4ksram地址映射到爲0的地址開始,程序開始執行這4k代碼
這4k代碼包含功能:初始化sdram,複製nandflash中的代碼到sdram中,然後跳轉到sdram中運行

noflash啓動模式:norflash也有同樣的最前面的4k代碼,只不過不需要複製到2440內部4ksram這個過程,因爲norflash可以片上執行程序

上面所說的4K代碼也就是包含了啓動代碼 
(其實啓動代碼可以小於4K或大於4K,但當大於4K時拷貝的4k代碼裏必須包含功能:初始化sdram,複製nandflash中的代碼到sdram中,然後跳轉到sdram中運行小於4k時複製的4k程序執行完啓動代碼後會跳轉,剩下的空間不執行)


NANDFLASH的相關操作原理:
NANDFLASH的擦除操作
NANDFLASH壞區檢測
ID號檢測
壞區標識
任意地址區間的讀寫 :以前沒有任意讀寫功能,現在升級了,但實際應用中讀沒問題,寫可能會出錯
讀寫校驗


NandFlash的ECC校驗過程總結:

寫頁操作: (8位的nandflash)

在寫完一頁數據後,硬件會自動產生4個字節的主區ECC,硬件自動存放到rNFMECC0裏面,再編程保存(寫)到Space區,
此時又會產生2個字節的Space區ECC,硬件自動存放在rNFSECC寄存器的低兩字節裏面 。再編程保存(寫)到Space區,


讀頁操作: (8位的nandflash)
在讀完一頁數據後,也會產生四個字節的主區ECC,硬件自動存放到rNFMECC0裏面, (等待與之前寫數據的時候產生的主區ECC進行比較) 再讀取之前保存在Space區的4個字節的主區ECC  (mecc0=NF_RDDATA();這時讀完操作後又會產生兩個字節的Space區的ECC,硬件自動存放在rNFSECC的低兩字節裏
面),放到寄存器rNFMECCD0和rNFMECCD1的bit0--7和bit16--23,放入後硬件會自動和讀頁操作時產生的主區ECC(放在NFMECC0寄存器裏面)進行比較。再讀取保存在Space區的兩字節的Space區ECC(secc=NF_RDDATA();低2個字節爲spare區的ECC值),放到寄存器rNFSECCD的bit0--7和bit16--23,放入後硬件又會自動和讀操作時產生的Space區ECC(放在NFSECC寄存器裏面的低兩字節)進行比較,最後主區ECC、Space區ECC的比較結果可以通過NFESTAT0寄存器   的低四位來進行查詢,判斷讀、寫時分別產生的ECC是否相同,如果相同則說明讀取數據成功,否則讀取失敗。 

16位的nandflash操作過程與8位相似,只不過16位的nandflash主區ECC爲8個字節,存放在rNFMECC0和rNFMECC1兩個寄存器裏面 Space區ECC有4個字節,也是存在rNFSECC寄存器裏面(8位nandflash只用到了低兩字節)


具體詳情可以參考S3C2440的nandflash控制器部分內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章