nandflash操作詳解


1.nandflash就是嵌入式系統的硬盤


2.分類
(1)MLC:存儲單元格存儲兩位,慢,偏移,壽命短,容量大
(2)SLC:存儲一位。快,壽命長,容量小,昂貴




3訪問;
(1)獨立編址,有專用的控制器,控制器里有相應的寄存器,先送地址,然后命令,最后數據
(2)地址組成:行地址(頁編號),列地址(在頁中的偏移),一個nand可以有很多塊,每一塊可以很多頁,每一頁的兩個部分可以不同規格
(3)信號引腳:

4.初始化nand控制器,(搜索關鍵字operation)
(1)初始化NFCONF,配置三個重要的與HCLK有關的時間參數
(2)初始化NGCONT,一開始要disable chip select 以及使能控制器
(3)復位:選中nandflash,清除RB標志,發送0xff命令,等待RB信號,取消選中RB信號




5.按頁讀
(1)選中nandflash
(2)清除RB標志
(3)寫入0x00命令
(4)發送列地址,兩次(但是由於是頁讀的方式,所以列地址,即頁中的偏移量就是0)
(5)發送頁編號,即行地址,分三次完成
(6)發送0x30命令
(7)等待RB信號變為ready
(8)讀出數據,每次都取出數據寄存器的值,他會自動更新自己的值
(9)取消選中nandflash


6.修改之前的代碼拷貝啟動代碼(之前只從iram復制到內存)
(1)時鍾初始化有問題,錯把UPLL當MPLL
(2)匯編和C語言的參數傳遞,不超過4個的時候,直接用r0--r3傳遞,且順序和從函數的形參一致
(3)注意保存lr,否則連續兩次跳轉,會破壞lr,導致在執行完復制函數以后,不能返回到應執行的初始化后續代碼部分
(4)注意在調用c函數之前進行棧的初始化


7.拷貝函數的三個參數,頁的起始地址r0,(ulong,但是由於是頁讀方式,所以要去掉低11位,低11位是列地址,這里我們要去頁編號,即行地址),內存起始地址r1(目標起始地址,uchar*),數據大小r3,每一頁對應2048個字節(2K,視具體nandflash而言,每一個循環,大小減小2048)


8.一旦要去讀取(等待)RB信號,之前就要對其進行清除;
一旦有選中操作,在結束之后要取消選中。




9.寫入之前要擦除,參數是要擦除的頁地址,擦除的是指定的頁所在的塊:
(1)選中nandflash
(2)清除RB標志
(3)寫入0x60命令
(4)發送頁編號,即行地址,分三次完成
(5)發送0xD0命令
(6)等待RB信號變為ready
(7)發送命令0x70
(8)讀取擦出結果
(9)取消選中nandflash
(10)返回擦除結果


10.按頁寫
(1)選中nandflash
(2)清除RB標志
(3)寫入0x80命令
(4)發送列地址,兩次(但是由於是頁讀的方式,所以列地址,即頁中的偏移量就是0)
(5)發送頁編號,即行地址,分三次完成
(6)寫入數據,用循環
(7)發送0x10命令
(8)等待RB信號變為ready
(9)發送命令0x70,
(10)讀取寫入結果,從數據寄存器讀
(11)取消選中nandflash
(12)返回寫入結果

 


免責聲明!

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



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