在一般的讀寫外部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