關於單片機XBYTE和NAND FLASH地址問題綜述

在一般的讀寫外部RAM的程序中,經常看到這樣的句子:

   XBYTE[address]=data   寫數據

   data=XBYTE[address]   讀數據

採用XBYTE後,就不用顧及其時序,就是說,讀寫數據的時候,WR和RD怎麼都不用用程序去控制。

讀寫外部RAM的程序,不需關注WR和RD端口的控制。

#define W_DATA XBYTE[0x1000]

W_DATA=0X55;

上面語句轉爲彙編表示如下:

mov  dptr,#1000h

mov  a,#55h

movx @dptr,a

因爲對於單片機僅僅MOVX指令(16位指令)才能訪問外部數據存儲器,又因爲單片機P0口已經作爲數據口與單片機相連,因此只能使用擁有高8位地址的P2口,且P2口僅僅在16位地址操作中才有用,因此編址採用16位形式,用不到的補零。

而對於Nandflash訪存操作XBYTE[1000]中的地址是由硬件電路的連線所決定的,一般來說flash的操作分爲命令、地址、數據,而這三個操作是由ALE、CLE信號(引腳)來區別的,一般這兩個引腳會與單片機P2口相連接。ALE、CLE信號如下:(0,1)寫命令、(1,0)寫地址、(0,0)寫數據,因此ALE、CLE與P2口連接情況決定了Nand的命令端口、地址端口和數據端口。

例如若ALE與P2.7,CLE與P2.6,WP與P2.5相連,且由於P2口對應XBYTE的高位,因此可知Nand的命令端口地址爲:0x6000(01100000),地址端口地址爲:0xA000(10100000),數據端口地址爲:0x2000(00100000)。

 

Nandflash 的存儲結構如下(不同的flash的行、列數不同):
(上傳不了圖片。。)

 

Flash共分位64K個行(頁),2K+64個列。其中每頁含2K+64個字節,每列1個字節。下圖Flash容量爲64K*(2112)= 132MB。

其訪存時的4個地址序列中,A0-A11(2048)個地址確定列,A12-A27(65536)確定頁也就是行,這樣就能確定所要訪問的字節地址了。

例如,若想訪問第3頁的第1列的數據,則4個地址序列分別爲:0x80(A0-A7),0x00(A8-A11),0xc0,0x00

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