嵌入式linux學習筆記--20200224--SDRAM的介紹與使用 基於JZ2440V3 S3C2440

在寫這篇文章之前 參閱了很多大佬的博客,發現自己距離大佬的差距是那麼的遙遠。不過我還是要寫這篇,這是我自己的感悟以及理解。

以下幾個鏈接是我參考比較多的  寫的非常棒的。

高手進階,終極內存技術指南。   https://blog.csdn.net/qq_16748819/article/details/83037781 

https://blog.csdn.net/weixin_42547860/article/details/88998037

SDRAM   同步動態隨機存儲器,原理是電容充電的原理,相較於SRAM 價格便宜,但是速度比較慢。電腦中常用的4G 8G 16G 的內存都是這個的加強版本  本質其實都是動態內存。  動態內存 的動態主要體現在爲了維持數據 需要不斷的去進行數據的刷新。

SRAM(Static Random-Access Memory,SRAM) 和SDRAM 相比較沒有 dynamic 這個特性,不需要去對電容進行充電讀寫更快,一般用來做CPU內部的cache 。SRAM的實現是利用數字邏輯電路去實現的,集成度達不到DRAM那麼高,所以價格相對較貴。

這是一個 SDRAM 的datesheet,  JZ2440 選用的是-6G版本  從特性來看 我們可以知道 這個芯片的容量是32MB (256Mbit),內部分成了四個bank 芯片的極限速度是166MHz  旁邊還有些具體的 時間參數,暫時先不分析。

存儲容量的計算  4M word * 4bank = 16M word = 32M byte  ,這裏比較繞,  因爲是16位的位寬所以一個地址上面就是一個16bit的 1 word  換算成byte 就是2byte

芯片支持brust 讀取 1/2/4/8 、whole page  可以一次性連續讀取1個(16bit) 2個(16bit *2 )、、、

後面開啓了 mmu 之後  mmu  應該會有整頁搬到內部cache裏面的動作。 這樣可以提高效率。

根據上面表格的地址線的數量我們可以知道 這個芯片的 內部 col = 2^9 = 512 個  row = 2^13

col * row *bank = 2^9  *   2^13  *  2^2   = 2^24 = 16M(word)   = 32M byte = 256M bit

 

因爲我們使用的 S3C2440  帶有SDRAM的 控制單元,所以具體的 硬件時序 我們就不去分析了,  我們只去關心幾個關鍵的參數。

 

在S3C2440 的技術手冊的第五章是關於內存控制的介紹  

在概述部分介紹了  S3C2440 的內存控制單元的特性。

每個內存單元可尋址範圍是128Mbyte   除了bank0 之外的內存接口芯片都可以編程控制使用8/16/32位帶寬的芯片(bank0 是因爲是啓動地址,而且bank0 的位寬選擇是由硬件決定的,通過選擇啓動方式自動選擇對應的位寬)。

這裏面還特別提到了SDRAM的 專門的bank    也就是我們即將使用的bank6  bank7

接下來就是配置這兩個bank 的分析  第一步就是配置  bank 的位寬 

根據開發板的原理圖 我們可以看出來  開發板上的設計是把倆個芯片並在一起當成  32bit 位寬的一個芯片使用 

表格中的bit 27 是byte_enable    用來屏蔽指定的byte,因爲S3C2440內部有內存控制器可以去實現  byte 的分離  所以就不需要在設置了。

接下來就是 BANKCON6 寄存器

這一部分的設置是 BANK的 控制寄存器,對速度暫時不去追求,所以就用默認的速度就可以了(最慢的速度)

col的值去9bit  這個是前面提到的 地址線推算出來的

這個寄存器是 SDRAM 的自動刷新控制寄存器 Trp 時間根據芯片手冊我們可以查到

我們取最小值 2個clock = 20ns = (Trp =2clock)

Tsrc  我們可以根據公式

Trc=Tsrc+Trp

 反推出來  。已知 Trp = 2clk

trc = 6 clk  所以算出來 tsrc = 4clk 

bit [19:18] = 00

最後得到這個 counter 值的計算是 根據 SDRAM 的刷新時間和 HCLK 的頻率計算的

刷新時間的信息在SDRAM的技術手冊上面,  period = 64ms/8192 =

剛好就滿足手冊上面的那個公式  

所以我們可以計算出來 

REFRESH = 0x8404f5

接下來的寄存器是 banksize

 這部分主要是內存的大小的設置

 

芯片手冊上面提示的 CL可以是2 或者是3.  剛剛的寄存器其實是給 SOC內部設置的數據,SOC會將數據轉存到 SDRAM的寄存器中。

最後我們的初始化程序的參數就是這樣算出來了。  BWSCON 應該是等於 0x02000000 但是0x22000000 也是對的。

 

 

 

 

 

 

 

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