日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM9之NAND FLASH总结

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM9之NAND FLASH总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*author----->Armking*/

/*data----->2008年9月2*/

/*ps:本人總結,備于日后查閱,如若轉載,請注明出處*/

/*QQ:382750150*/

寫于篇頭:

終于又開始接著學習了,只是不知道為什么JTAG又連不上目標板了,如果誰不小心看到了此文章,又湊巧知道了是什么原因,請留言賜教,不勝感激。

關于NAND FLASH很詳細的內容,肯定無需在此多做說明,只要有電腦,baidu,google一天不垮臺,都可以查閱到很多相關的資料。最最最權威的還是官方的手冊,比如說我用的就是S3C2440這個板子,而這個板子上配的NAND是K9F1208,三星公司的,可以去它的官網下載即可。

下圖為手冊上的管腳圖和管腳功能表,可能一開始搬這些東西出來覺得很枯澀,我也覺得這樣,不過我是總結之用,無所謂了

各位看客的英語肯定比俺好,幾個類似于power這樣的E文,隨便啃肯定沒問題!

下面這個圖是NAND FLASH的功能圖,有點嚇人的功能圖

?

下面我先來剖析NAND FLASH的物理結構:

?

上圖就是NAND FLASH的物理層結構,其實上圖畫的比較形象,比較生動

大致意思是這樣的:

一個NAND FLASH存儲器是由很多快組成的,很多是多少?4096塊(就本人所用而言,K9F1208)

4096塊中的1塊又由很多頁組成,多少頁?32頁

32頁中的1頁又由什么組成呢?就是由512+16字節組成(為什么要寫成512+16)

其實說白了就是528字節,但是是由512的主數據區和16的額外數據區組成的,所以如是。

那我掰開手指算算容量有多大?

1個NAND FLASH容量=4096(塊)*32(頁)*528(字節)*8(位)=528Mbit(以位為單位算的)

既然是FLASH肯定要與外界交流,如何交流,看上圖,發現有IO 0~IO7,不錯,就是用這8位來交流的。

剛才算的容量是528Mbit,也就是有64M的空間了,也就是說需要26位地址傳送了,可是只有8根IO怎么辦啊

這樣就形成了NAND FLASH交流的獨特性,不管你要干什么,首先發送命令,當然命令也是通過IO傳送的,命令傳送完畢了,再發送4個地址序列(為什么是4個?,26位要IO來傳,分4次才行啊),最后才是必要的校驗。

看到上面圖是不是有2個方塊,下面那個,用E文寫著:page regsiter,這又是干什么的啊?

其實NAND訪問并非直接通過里面的存儲物理層,而是有一個專門的頁寄存器來管理,不管你是讀,是寫,都要首先通過page regsiter,這回我暈暈的腦袋稍微好些了。

上面講到過需要26位才能尋址到64M啊,我的媽亞,我的家家亞,這么多,叫IO0~IO7怎么吃得消啊,所以說才有地址序列的說法啊,但是地址序列又是如何對應的呢?由于NAND FLASH的結構分的很細,又有什么塊啊,頁啊,字節啊,所以說這個26位地址的本質就是如何區分這個的!

因此就有了A0~A7是頁內尋址,也叫列尋址,也就是528字節尋址,我尋啊尋啊,不對勁啊,A0~A7才8位,匝地就能尋528啊,不是只能尋256嗎?貌似有道理,請往下看.....

A9~A25是用來進行頁尋址的,也叫行尋址,剛不是算了,4096塊*32頁=131072頁,用A9~A25就可以搞定這么多頁了,不信你算算。

客官看出來了沒?發現A8怎么溜了?難道生氣不干了?沒這回事,它在偷偷的工作,默默無為的那種,象俺。

A8是由里面的某個硬件電路根據相關的命令而置為1或者0,這不用我們操心,但我們要理解

比如說我喊話了說要尋址0~255字節,敢情好啊,這樣的話8位IO肯定搞定了,對頭!這時候我們聰明的硬件電路就會把A8置為0,不需要它了。

又比如說我喊話了要尋址第484字節啊,這么多啊,8位抗不住啊,對,這時候硬件電路就會把A8叫上,一起協助你,完成所謂的第484個字節尋址.484的二進制是111100100,需要9為才行,其實A8此時就充當第9位,其余8位還是由IO完成的,這樣就可以完成528字節內的任何尋址了!

基于以上可知,A9~A25是進行多達上萬頁尋址的,其實還可以細分的,A9~A13是塊內的32頁尋址,正好5位,2的5次方=32,一塊由32頁組成,多好啊。

A14~A25是用于尋塊的,前面說了,4096塊,自己掰開手指算算吧。

其實A14~A25還可以細分,不過必須先了解個概念才行,知道什么是plane嗎?

NO!我說的不是飛機!

其實NAND FLASH還被組織成一種形式,就是把整個NAND FLASH分成四個層(plane),每層1024塊,每層里還有個528字節的頁寄存器,組織形式看下圖:

?

?

所以說的話,A14~A15是用于plane尋址的,正好4種情況。其余的用于1024塊尋址。

對于基本的物理結構就是如上的,其實是總結之用,請勿嘲笑,欲知詳細,請查閱文檔,OK?

以下是基于程序分析的

本次實驗的思路是將一些啟動代碼,初始化代碼放在NAND 0~4K的空間內,把主函數放在4096字節后,那些啟動代碼,初始化代碼負責將4096后的主函數copy到0x30000000的地址空間,然后跳轉執行主函數即可。

程序在此就不必寫出來了,重在整理思路

在head.S里主要需要關掉watch_dog,調用sdram初始化函數,調用nand初始化函數,調用nand的復制函數(也就是讀函數,復制到0x30000000),最后跳轉到0x30000000處

nand在使用前,需要進行簡單的配置,比如說設置時序,2440在NFCONF里面設置,ECC初始化,片選,控制器使能,在NFCONT設置,最后再復位下nand flash即可。

nand的讀需要注意,只用到了低8位,而且讀的時候,需要注意控制字節數,因為如果從A區或者C區讀取,它會一直的緊接著從下一頁的A區或者C區讀取,如果是B區,就會在下一頁從A區開始讀取了,一定要記得判斷是否準備好,檢測狀態。

總結

以上是生活随笔為你收集整理的ARM9之NAND FLASH总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。