新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 44b0存儲器擴展徹底研究——nWE, nWBE, nBE三者關系

44b0存儲器擴展徹底研究——nWE, nWBE, nBE三者關系

作者: 時間:2016-11-20 來源:網絡 收藏
1.存儲器擴展地址、數據線的連接方法重點參見2440手冊,主要涉及地址對齊問題,較容易理解,此處不作論述。

2. nWE, nWBE, nBE三者之間的關系

本文引用地址:http://m.butianyuan.cn/article/201611/318888.htm

(1)nWE為寫使能信號。

(2)nWBE為“寫字節(jié)使能(write byte enable)”信號,而nBE 為高/低字節(jié)選擇信號。nWBE與nBE共用引腳,可以通過對相關寄存器設置來進行功能選擇。

(3)什么時候需要nWBE而不是nWE?

nWE和nWBE都帶有寫使能的功能。但既然有nWE,為什么還需要nWBE?這是因為,當使用幾片儲存芯片進行數據位擴展時,有時需要對芯片分開寫數據,此時可使用nWBE。

在圖5-4中,僅有一片8bit的ROM,因此僅需要nWE,而不需要nWBE。而在圖5-5中,用了2片8bit的ROM,如果不使用nWBE,則寫操作是對2片ROM同時進行的,這樣,當執(zhí)行寫字節(jié)指令時可能會破壞另一芯片中的數據。(注意nWBE的信號是自動產生的。)從這個角度來說,nWBE有字節(jié)數據屏蔽的功能。

后面我們也會看到,SDRAM中有DQM信號也是用來進行數據屏蔽作用的,那么它們之間區(qū)別何在?

(4)nWBE, nBE有什么區(qū)別?什么時候應該配置成nBE?

根據手冊描述“nBE[3:0] is the AND signal nWBE[3:0] and nOE”,即nBE是nWBE和nOE的“與”信號,這句話給了我們非常重要的啟示,應該說深刻揭示出了nWBE, nBE之間的本質、內涵。

首先看一下真值表:

nWBE

nOE

nBE

說明

1

1

1

nWBE, nOE均無效(低電平有效),于是nBE無效

0

0

0

nWBE, nOE任意一個有效(低電平有效),則nBE有效

1

0

0

0

1

0

注意到nWBE[3:0],nOE僅一根信號線。由此可見,nBE就是字節(jié)選通信號(讀、寫選通)。讀的時候,多片均選通,寫的時候,分片進行選通。其實質,nBE可看作字節(jié)片選信號。

那么,能不能把上圖5-5中nWBE換成nBE?

如果這樣連接,我們思考一下有什么問題:注意表格陰影行,當nWBE無效而nOE有效,nBE有效,這會使存儲器的nWE有效,致使讀寫信號混亂,顯然不行。

事實上,到底用什么,應該根據存儲器芯片來決定。

究竟什么時候需要nBE呢?手冊上給出的SRAM連接圖5-8,5-9給出了示例。同樣我們要問,圖5-8中能不能把SRAM的nWE接nWBE?

如果這樣接,芯片的nBE信號就無法解決,因為nBE和nWBE不能同時工作,這樣就無法單獨操控片內的高字節(jié)與低字節(jié)讀寫。這里的nBEx就像是片內的高字節(jié)與低字節(jié)的片選信號。

再問,能否將圖5-8中nBE信號換成nWBE信號(硬件連接不變,寄存器配置改變)?

當按字節(jié)寫芯片,沒有問題,這時候可以產生有效的nWBE信號,以選擇U/L字節(jié);而當需要按字節(jié)讀芯片時,nWBE無效,無法提供正確的nUB/nLB選擇信號,就無法讀出數據,可見行不通。注意,似乎無法真正做到按字節(jié)讀芯片,因為只要nOE有效,nBE一定有效,這樣勢必造成nBE0,nBE1同時有效。即便如此,應該不會有什么麻煩,大不了將不需要的字節(jié)數據丟棄即可。

3. 下面附上手冊中所給出的其它存儲器擴展圖。

(1)ROM

(2)SDRAM

注意nSCS[1:0]就是nGSC[7:6],參看三星官方評估板電路圖。

這里重點關注DQM[3:0]。經查2440手冊,DQM與nWBE引腳是復用的。參考友善之臂提供的mini2440手冊中所提供的SDRAM電路(同三星官方):

可見,DQM正是連接到了nWBE。又參考SDRAM的數據手冊,對DQM的描述:“Controls output buffers in read mode and masks input data in write mode(即:在讀模式下控制輸出緩沖;在寫模式下屏蔽輸入數據。)”。

我們的問題是:為什么DQM連的是nWBE而不是nBE?能不能為nBE?

下圖是SDRAM的數據手冊中截取的真值表,從中可以發(fā)現,讀寫控制和DQM毫無關系。DQM主要在讀、寫時起屏蔽作用。讀-寫是通過nWE的電平狀態(tài)來控制的。

倘若DQM連nBE,需要寫字節(jié)屏蔽信號,則與nWBE沒有分別;讀的時候,若nWBE無效,nBE是否有效取決于2440的nOE——如果nOE無效,那么nBE完全與nWBE一致,而此處確實不需要nOE,所以我個人的結論認為它連nBE也是可行的(未知對否?需通過寫程序驗證)。

另外還有個問題:nWBE是什么時候有效的?讀SDRAM時,需要控制的只是使nWE為高,但這時候nWBE會自動有效嗎?需要程序控制嗎?(較容易設想的是nWE為低時nWBE自動根據讀寫字寬確定是否有效)。這個問題看看2440的時序圖就了然了。

附2440時序圖(早沒發(fā)現它;早發(fā)現它早清楚了J):

另外,ROM/SRAM的時序圖:

附網友帖子(講得太膚淺):

這個一點也不復雜。 內存的這種接法,使它可以以8位訪問,也可以16位訪問,也可以32位訪問 那4個信號nWBE3~0,正是字節(jié)選通控制。 按8位訪問,也就是代碼中若有: *(unsigned char *) 0x30000000 = 0x78; 就是一個字節(jié)寫,這時只有nBWE0信號有效 如果是0x30000001,則只有nBWE1有效(低),其它無效(高)。 再舉個例,如果是按16位訪問呢? 如果是16位訪問,代碼一般就是: *(unsigned short *)0x30000000 = 0x1978; 這是一個16位寫。但此時要注意,最低位必須是0,而不能是1,比如地址0x30000001就會使CPU異常,因為必須16位對齊! dat16 = *(unsigned short *)0x30000002; 這是一個16位讀 在16位訪問時,0x30000000地址寫操作中,nWBE1, 0 = 低,nWBE3, 2 = 高。當0x30000002時,則是nWBE3,2為低,nWBE1,0為高(無效) 32位時則是4字節(jié)對齊,也就是最低的兩個地址位A1,A0必須為0,即對于32位訪問,0x30000001, 0x30000002, 0x30000003都會導致異常(出錯) 對于32位訪問,0x30000000的下一個地址是0x30000004,因為這個地址是字節(jié)地址,但一下子就訪問了0x30000000~0x30000003四個字節(jié),也就是nWBE3~0四個信號一起反應!??! 不同的CPU訪問的機制是不一樣的,這要具體看手冊了,是分開片選的


評論


技術專區(qū)

關閉