新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/article/201611/318888.htm

        (1)nWE為寫使能信號。

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

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

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

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

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

        (4)nWBE, nBE有什么區別?什么時候應該配置成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就是字節選通信號(讀、寫選通)。讀的時候,多片均選通,寫的時候,分片進行選通。其實質,nBE可看作字節片選信號。

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

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

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

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

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

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

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

        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的數據手冊中截取的真值表,從中可以發現,讀寫控制和DQM毫無關系。DQM主要在讀、寫時起屏蔽作用。讀-寫是通過nWE的電平狀態來控制的。

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

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

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

        另外,ROM/SRAM的時序圖:

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

        這個一點也不復雜。 內存的這種接法,使它可以以8位訪問,也可以16位訪問,也可以32位訪問 那4個信號nWBE3~0,正是字節選通控制。 按8位訪問,也就是代碼中若有: *(unsigned char *) 0x30000000 = 0x78; 就是一個字節寫,這時只有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字節對齊,也就是最低的兩個地址位A1,A0必須為0,即對于32位訪問,0x30000001, 0x30000002, 0x30000003都會導致異常(出錯) 對于32位訪問,0x30000000的下一個地址是0x30000004,因為這個地址是字節地址,但一下子就訪問了0x30000000~0x30000003四個字節,也就是nWBE3~0四個信號一起反應!!! 不同的CPU訪問的機制是不一樣的,這要具體看手冊了,是分開片選的


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 龙口市| 定安县| 广平县| 青川县| 江津市| 日喀则市| 环江| 六安市| 玛曲县| 乡宁县| 凌海市| 南平市| 海安县| 犍为县| 嘉禾县| 聊城市| 电白县| 镇赉县| 平阳县| 桂东县| 抚顺市| 汤原县| 都昌县| 新河县| 泸州市| 潞城市| 大港区| 眉山市| 左云县| 衡阳县| 库车县| 法库县| 郓城县| 东丰县| 新郑市| 河源市| 绥宁县| 沙洋县| 竹溪县| 渑池县| 眉山市|