欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13118|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Nand flash頁(yè)編程(寫(xiě)操作)和讀操作詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
頁(yè)編程(寫(xiě)操作)
Nand flash的寫(xiě)操作叫做編程Program,編程,一般情況下,是以頁(yè)為單位的。
有的Nand Flash,比如AFND1G08U3,支持部分頁(yè)編程,但是有一些限制:在同一個(gè)頁(yè)內(nèi)的,連續(xù)的部分頁(yè)的編程,不能超過(guò)4次。一般情況下,很少使用到部分頁(yè)編程,都是以頁(yè)為單位進(jìn)行編程操作的。
一個(gè)操作,用兩個(gè)命令去實(shí)現(xiàn),看起來(lái)是多余,效率不高,但是實(shí)際上,有其特殊考慮,
至少對(duì)于塊擦除來(lái)說(shuō),開(kāi)始的命令0x60是擦除設(shè)置命令(erase setup comman),然后傳入要擦除的塊地址,然后再傳入擦除確認(rèn)命令(erase confirm command)0xD0,以開(kāi)始擦除的操作。
這種,分兩步:開(kāi)始設(shè)置,最后確認(rèn)的命令方式,是為了避免由于外部由于無(wú)意的/未預(yù)料而產(chǎn)生的噪音,即使被nand flash誤認(rèn)為是擦除操作,但是沒(méi)有之后的確認(rèn)操作0xD0,nand flash就不會(huì)去擦除數(shù)據(jù),這樣使得數(shù)據(jù)更安全,不會(huì)由于噪音而誤操作。
讀(read)操作過(guò)程詳解
以最簡(jiǎn)單的read操作為例,解釋如何理解時(shí)序圖,以及將時(shí)序圖中的要求,轉(zhuǎn)化為代碼。
解釋時(shí)序圖之前,讓我們先要搞清楚,我們要做的事情:那就是,要從nand flash的某個(gè)頁(yè)里面,讀取我們要的數(shù)據(jù)。
要實(shí)現(xiàn)此功能,會(huì)涉及到幾部分的知識(shí),至少很容易想到的就是:需要用到哪些命令,怎么發(fā)這些命令,怎么計(jì)算所需要的地址,怎么讀取我們要的數(shù)據(jù)等等。
下面,就一步步的解釋,需要做什么,以及如何去做:
1.需要使用何種命令
首先,是要了解,對(duì)于讀取數(shù)據(jù),要用什么命令。
下面是datasheet中的命令集合:
5.Nand Flash  AFND1G08U3的命令集合
很容易看出,我們要讀取數(shù)據(jù),要用到Read命令,該命令需要2個(gè)周期,第一個(gè)周期發(fā)0x00,第二個(gè)周期發(fā)0x30。
2.發(fā)送命令前的準(zhǔn)備工作以及時(shí)序圖各個(gè)信號(hào)的具體含義
知道了用何命令后,再去了解如何發(fā)送這些命令。
6.Nand Flash數(shù)據(jù)讀取操作的時(shí)序圖
注:此圖來(lái)自ATO的型號(hào)AFND1G08U3nand flash的數(shù)據(jù)手冊(cè)(datasheet)。
我們來(lái)一起看看,我在圖6中的特意標(biāo)注的①邊上的黃色豎線。
黃色豎線所處的時(shí)刻,是在發(fā)送讀操作的第一個(gè)周期的命令0x00之前的那一刻。
讓我們看看,在那一刻,其所穿過(guò)好幾行都對(duì)應(yīng)什么值,以及進(jìn)一步理解,為何要那個(gè)值。
1)黃色豎線穿過(guò)的第一行,是CLE。還記得前面介紹命令所存使能(CLE)那個(gè)引腳吧?CLE,將CLE置1,就說(shuō)明你將要通過(guò)I/O復(fù)用端口發(fā)送進(jìn)入Nand Flash的,是命令,而不是地址或者其他類型的數(shù)據(jù)。只有這樣將CLE置1,使其有效,才能去通知了內(nèi)部硬件邏輯,你接下來(lái)將收到的是命令,內(nèi)部硬件邏輯,才會(huì)將受到的命令,放到命令寄存器中,才能實(shí)現(xiàn)后面正確的操作,否則,不去將CLE置1使其有效,硬件會(huì)無(wú)所適從,不知道你傳入的到底是數(shù)據(jù)還是命令了。
2)而第二行,是CE#,那一刻的值是0。這個(gè)道理很簡(jiǎn)單,你既然要向Nand Flash發(fā)命令,那么先要選中它,所以,要保證CE#為低電平,使其有效,也就是片選有效。
3)第三行是WE#,意思是寫(xiě)使能。因?yàn)榻酉聛?lái)是往nand Flash里面寫(xiě)命令,所以,要使得WE#有效,所以設(shè)為低電平。
4)第四行,是ALE是低電平,而ALE是高電平有效,此時(shí)意思就是使其無(wú)效。而對(duì)應(yīng)地,前面介紹的,使CLE有效,因?yàn)閷⒁獢?shù)據(jù)的是命令,而不是地址。如果在其他某些場(chǎng)合,比如接下來(lái)的要輸入地址的時(shí)候,就要使其有效,而使CLE無(wú)效了。
5)第五行,RE#,此時(shí)是高電平,無(wú)效。可以看到,知道后面低6階段,才變成低電平,才有效,因?yàn)槟菚r(shí)候,要發(fā)生讀取命令,去讀取數(shù)據(jù)。
6)第六行,就是我們重點(diǎn)要介紹的,復(fù)用的輸入輸出I/O端口了,此刻,還沒(méi)有輸入數(shù)據(jù),接下來(lái),在不同的階段,會(huì)輸入或輸出不同的數(shù)據(jù)/地址。
7)第七行,R/B#,高電平,表示R(Ready)/就緒,因?yàn)榈搅撕竺娴牡?階段,硬件內(nèi)部,在第四階段,接受了外界的讀取命令后,把該頁(yè)的數(shù)據(jù)一點(diǎn)點(diǎn)送到頁(yè)寄存器中,這段時(shí)間,屬于系統(tǒng)在忙著干活,屬于忙的階段,所以,R/B#才變成低,表示Busy忙的狀態(tài)的。
介紹了時(shí)刻①的各個(gè)信號(hào)的值,以及為何是這個(gè)值之后,相信,后面的各個(gè)時(shí)刻,對(duì)應(yīng)的不同信號(hào)的各個(gè)值,大家就會(huì)自己慢慢分析了,也就容易理解具體的操作順序和原理了。
3.如何計(jì)算出,我們要傳入的地址
在介紹具體讀取數(shù)據(jù)的詳細(xì)流程之前,還要做一件事,那就是,先要搞懂我們要訪問(wèn)的地址,以及這些地址,如何分解后,一點(diǎn)點(diǎn)傳入進(jìn)去,使得硬件能識(shí)別才行。
此處還是以AFND1G08U3為例,此nand flash,一共有1024個(gè)塊,每個(gè)塊內(nèi)有64頁(yè),每個(gè)頁(yè)是2K+64 Bytes,假設(shè),我們要訪問(wèn)其中的第1000個(gè)塊中的第25頁(yè)中的1208字節(jié)處的地址,此時(shí),我們就要先把具體的地址算出來(lái):
物理地址=塊大小×塊號(hào)+頁(yè)大小×頁(yè)號(hào)+頁(yè)內(nèi)地址=1000×(64×(2K+64))+25×(2K+64)+1208=0x80F52F8,接下來(lái),我們就看看,怎么才能把這個(gè)實(shí)際的物理地址,轉(zhuǎn)化為nand Flash所要求的格式。
在解釋地址組成之前,先要來(lái)看看其datasheet中關(guān)于地址周期的介紹:

7 Nand Flash的地址周期組成
結(jié)合圖7和圖5中的2,3階段,我們可以看出,此nand flash地址周期共有5個(gè),2個(gè)列(Column)周期,2個(gè)行(Row)周期。
而對(duì)于對(duì)應(yīng)地,我們可以看出,實(shí)際上,
列地址A0~A10,就是頁(yè)內(nèi)地址,地址范圍是從0到2047,而多出的A11,理論上可以表示2048~4095,但是實(shí)際上,我們最多也只用到了2048~2112,用于表示頁(yè)內(nèi)的oob區(qū)域,其大小是64字節(jié)。
A12~A27,稱作頁(yè)號(hào),頁(yè)的號(hào)碼,可以定位到具體是哪一個(gè)頁(yè)。
而其中,A18~A27,表示對(duì)應(yīng)的塊號(hào),即屬于哪個(gè)塊。
// 可見(jiàn):地址的傳輸順序是是 頁(yè)內(nèi)地址,頁(yè)號(hào),塊號(hào)。 從小到大。
簡(jiǎn)單解釋完了地址組成,那么就很容易分析上面例子中的地址了:
0x80F52F8 = 1000 0000 1111 0101 0010 1111 1000,分別分配到4個(gè)地址周期就是:
1st 周期,A7~A0 :1111 1000 = 0xF8
2nd周期,A11~A8 :0000 0010 = 0x02
3rd周期,A19~A12 :1111 0101 = 0xF5
4th周期,A27~A20 :1000 0000 = 0x80
注意,與圖7中對(duì)應(yīng)的,*L,意思是低電平,由于未用到那些位,datasheet中強(qiáng)制要求設(shè)為0,所以,才有上面的2nd周期中的高4位是0000。
因此,接下來(lái)要介紹的,我們要訪問(wèn)第1000個(gè)塊中的第25頁(yè)中的1208字節(jié)處的話,所要傳入的地址就是分4個(gè)周期,分別傳入兩個(gè)列地址的:0xF80x02,然后再傳2個(gè)行地址的:0xF50x80,這樣硬件才能識(shí)別。
4.讀操作過(guò)程的解釋
準(zhǔn)備工作終于完了,下面就可以開(kāi)始解釋說(shuō)明,對(duì)于讀操作的,上面圖中標(biāo)出來(lái)的,1-6個(gè)階段,具體是什么含義。
1) 操作準(zhǔn)備階段:此處是讀(Read)操作,所以,先發(fā)一個(gè)圖5中讀命令的第一個(gè)階段的0x00,表示,讓硬件先準(zhǔn)備一下,接下來(lái)的操作是讀。
2) 發(fā)送兩個(gè)周期的列地址。也就是頁(yè)內(nèi)地址,表示,我要從一個(gè)頁(yè)的什么位置開(kāi)始讀取數(shù)據(jù)。
3) 接下來(lái)再傳入兩個(gè)行地址。對(duì)應(yīng)的也就是頁(yè)號(hào)。
4) 然后再發(fā)一個(gè)讀操作的第二個(gè)周期的命令0x30。接下來(lái),就是硬件內(nèi)部自己的事情了。
5) Nand Flash內(nèi)部硬件邏輯,負(fù)責(zé)去按照你的要求,根據(jù)傳入的地址,找到哪個(gè)塊中的哪個(gè)頁(yè),然后把整個(gè)這一頁(yè)的數(shù)據(jù),都一點(diǎn)點(diǎn)搬運(yùn)到頁(yè)緩存中去。而在此期間,你所能做的事,也就只需要去讀取狀態(tài)寄存器,看看對(duì)應(yīng)的位的值,也就是R/B#那一位,是1還是0,0的話就表示,系統(tǒng)是busy,仍在”忙“(著讀取數(shù)據(jù)),如果是1,就說(shuō)系統(tǒng)活干完了,忙清了,已經(jīng)把整個(gè)頁(yè)的數(shù)據(jù)都搬運(yùn)到頁(yè)緩存里去了,你可以接下來(lái)讀取你要的數(shù)據(jù)了。
對(duì)于這里。估計(jì)有人會(huì)問(wèn)了,這一個(gè)頁(yè)一共2048+64字節(jié),如果我傳入的頁(yè)內(nèi)地址,就像上面給的1028一類的值,只是想讀取1028到2011這部分?jǐn)?shù)據(jù),而不是頁(yè)開(kāi)始的0地址整個(gè)頁(yè)的數(shù)據(jù),那么內(nèi)部硬件卻讀取整個(gè)頁(yè)的數(shù)據(jù)出來(lái),豈不是很浪費(fèi)嗎?答案是,的確很浪費(fèi),效率看起來(lái)不高,但是實(shí)際就是這么做的,而且本身讀取整個(gè)頁(yè)的數(shù)據(jù),相對(duì)時(shí)間并不長(zhǎng),而且讀出來(lái)之后,內(nèi)部數(shù)據(jù)指針會(huì)定位到你剛才所制定的1208的那個(gè)位置。
6) 接下來(lái),就是你“竊取“系統(tǒng)忙了半天之后的勞動(dòng)成果的時(shí)候了,呵呵。通過(guò)先去Nand Flash的控制器中的數(shù)據(jù)寄存器中寫(xiě)入你要讀取多少個(gè)字節(jié)(byte)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一點(diǎn)點(diǎn)讀取你要的數(shù)據(jù)了。
至此,整個(gè)Nand Flash的讀操作就完成了。
對(duì)于其他操作,可以根據(jù)我上面的分析,一點(diǎn)點(diǎn)自己去看datasheet,根據(jù)里面的時(shí)序圖去分析具體的操作過(guò)程,然后對(duì)照代碼,會(huì)更加清楚具體是如何實(shí)現(xiàn)的。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:315942 發(fā)表于 2020-2-13 18:23 | 只看該作者
這是我見(jiàn)過(guò)講解的最好的文章,謝謝!專門(mén)登陸上來(lái)評(píng)論一下!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表