[攻克存儲] SRAM地址線的連接

在嵌入式系統設計過程中,由於主控芯片(如ARM、PPC、MIPS等)片上的存儲空間不夠大,經常需要外接存儲器芯片(如ROM、SRAM、SDRAM、DDR2、Nand Flash等),因此,弄清楚主控芯片與外界存儲芯片的引腳連接原理至關重要,由於Nand Flash的引腳連接比較簡單,不涉及地址線的連接,而SDRAM和DDR2訪問原理與ROM和SRAM有一些不同,故以後再專門講述,這裏我將主要介紹ARM與ROM、SRAM這兩種存儲芯片的連接。

     首先,我們看一個電路圖。

    這個電路圖爲三星公司的ARM芯片s3c2440與1片128KB的SRAM芯片的連接原理圖。其中,SRAM芯片的引腳與圖中芯片方框圖中所標示,而ARM芯片的引腳則爲導線上的標號。
 
    初學者可能會有幾個疑問,爲什麼SRAM芯片的A0地址引腳連接的是ARM芯片的A1引腳呢?那什麼情況下SRAM芯片的A0連接ARM芯片的A0引腳呢?
 
    首先,我們分析一下圖中的 SRAM芯片,該芯片有A0~A15一共16根地址線,有D0~D15一共16根數據線,故其存儲空間爲 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB
 
    我們知道,要尋址 128KB 需要 17 根地址線(128 = 2^17 ),然而SRAM芯片的地址引腳卻只有16根,ARM端該如何給地址線呢?
 
    由圖可以看出,SRAM芯片的數據總線是16位寬,即一次傳輸2個字節的數據。因此,我們可以這樣理解,即一個地址空間其實對應着2個字節的數據,實際上真正的尋址空間只有64KB而已,16根地址線足夠。這樣ARM端並不需要將17根地址線全部連接到SRAM芯片上,只需要給出高16位地址(A1~A16),然後,SRAM芯片即根據這16根地址找到對應的地址空間,將該地址空間的2個字節發送到數據總線上,然後ARM端根據未連接到SRAM芯片的A0的電平,來決定具體是取高字節,還是低字節。
 
     由這些分析可以推出一個規律,即 ARM端的地址線到底是 A0 、A1 還是 A2 連接 存儲芯片的 A0,取決於存儲系統的數據總線位寬,如果是 8位則A0->A0,如果是16位則A1->A0,如果是32位則A2->A0。
 
     大致搞清楚了上面的原理後,ARM與存儲芯片的連接方法也就很清晰了,下面給幾張分別描述了各種情況下的ARM與存儲芯片的連接示意圖(截取自s3c2440的datasheet)。

   

【說明】:上圖的ROM爲 2^16 x 8 bit = 64KB ,由於數據總線爲8位寬,故一個地址空間對應着1個字節,故ARM端的A0連接ROM的A0

【說明】:上圖中,由兩片8位寬64KB的ROM構成了一個16位寬的存儲系統。

【說明】:上圖中,由四片8位寬的ROM構成了一個32位寬的存儲系統。

   那麼,留一個小問題供大家思考,如果將ARM的A0~A15引腳連接一個16位寬的SRAM的A0~A15引腳,會發生什麼現象?
 
   注,本文討論的ARM芯片是沒有類似SDRAM Controller這樣的存儲器控制器的ARM芯片,對於有類似SDRAM Controller模塊的ARM芯片,它會根據寄存器配置的外接DDR芯片數據位寬,在硬件上將ARM的地址線引腳進行的左移操作,例如當數據位寬爲16位時,硬件上將ARM的A1腳的電平移至A0,依次類推。所以,這樣的ARM芯片不需要根據本文的方法連接,而直接將ARM端的A0~Ax 連接到存儲器的 A0~Ax 即可。
 
   後記:最近研究了一下嵌入式存儲系統,包括SRAM,SDRAM,DDR2等,準備寫幾篇總結的文章,本文爲第一篇,簡單講述了一下SRAM和ROM芯片與ARM的地址線連接,如果有寫得不清楚或者不正確的地方,希望各位不吝賜教,留言或者發送郵件到[email protected]探討。
 

本文出自 “對影成三人” 博客,非常感謝他, 原文出處http://ticktick.blog.51cto.com/823160/686049

發佈了22 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章