S3C2440記憶體控制詳解
轉載理由:文中特大號字型部分有利於理解韋東山老師所給的sdram實驗中的十三個暫存器的值的理解。
特點:
軟體可程式設計的大小端模式;
地址空間:每個BANK可定址128MB(總共8個BANK 1GB空間);
可程式設計的訪問位寬:BANK0為16或32位,其他BANK為8或16或32位;
8個儲存器BANK,其中6個用於ROM或者SRAM,2個用於ROM、SRAM或者SDRAM;
BANK0~BANK6的起始地址固定;
BANK7的起始地址和大小可程式設計;
所有儲存器BANK的訪問週期可程式設計;
外部wait訊號可延長匯流排週期;
支援SDRAM的自重新整理和掉電模式。
BANK0匯流排寬度由OM[1:0]引腳決定,當OM[1:0]=01時,booting ROM datawidth是16位,當[1:0]=10時,booting ROM datawidth是32位,當OM[1:0]=00時,從NAND FLASH啟動。在友善之臂S3C2440開發板上,OM1引腳直接接地。
依據這張表,可以查詢到SDRAM的BANK選擇引腳連線方式,比如,我們使用的SDRAM是2片HYNIX的HY57V561620(L)T,它的規格是4*4M*16bit(使用兩片是為了配置成32位的匯流排寬度),BANK大小是4M*16=64MB,匯流排寬度是32位,器件大小是4*BANK大小
上表是暫存器控制地址匯流排連線方式,我們使用2片SDRAM配置成32位的匯流排寬度,所以SDRAM上的A[12:0]接到S3C2440的A[14:2]引腳。
具體的S3C2440與兩片SDRAM接線方式如下圖所示:
SDRAM的工作時序作為ARM工程師瞭解即可,具體的讀寫控制由CPU自帶的控制暫存器完成,而作為FPGA工程師則需要詳細瞭解SDRAM工作原理與時序,在此不再贅述。作為ARM工程師,最重要的是準確配置與SDRAM相關的暫存器。
在系統使用SDRAM之前,需要對S3C2440的儲存器控制器進行初始化。其中對與SDRAM(Bank6)相關的暫存器進行了特殊的設定,以使SDRAM能夠正常工作。由於C語言程式使用的資料空間和堆疊空間都定位在SDRAM上,因此,如果沒有對SDRAM(Bank6)的正確初始化,系統就無法正確啟動。下面介紹與SDRAM相關的暫存器設定。
1、匯流排寬度&等待控制暫存器(BWSCON)0x48000000
在這個暫存器中,可以配置BANK1~BANK7的DW、WS、ST,DW決定了資料匯流排寬度;WS是等待狀態是否使能,如果此位為1,WAIT訊號可以用於延長nOE訊號的有效時間;ST決定是否使用UB/LB(與SRAM相關)。此暫存器還可以讀取(注意對Bank0只能讀取不能寫)BANK0的資料匯流排寬度。
對於SDRAM,只需要設定BANK6和BANK7的DW相關位,此處設定為32位。
BWSCON(0x48000000)=0x22xxxxxx,後面的24位設定和FLASH有關,一個例子是設定為0x22111120。
2、BANK控制暫存器(BANKCONN)
BANK0~BANK5的控制暫存器相同,復位值均為0x0700。
包括對Tacs(nGCSn前的地址建立時間)、Tcos(nOE訊號有效前的片選建立時間)、Tacc(訪問週期,當WAIT使能時,Tacc必須大於等於4個時鐘週期)、Tcoh(nOE後的片選保持時間)、Tcah(nGCSn後的地址保持時間)、Tacp(Page模式下的訪問週期)、PMC(Page模式配置)。
BANK6、BANK7的控制暫存器相同。如果儲存器型別為ROM或者SRAM,情況與BANK0~BANK5類似,如果儲存器型別為SDRAM,則需要設定Trcd(RAS到CAS的延時)和SCAN(列地址位數),
根據我們使用的SDRAM以及S3C2440的HCLK(SDRAM時鐘由系統的HCLK提供)時鐘情況,Trcd取3個時鐘,列地址位數是9,則BANKCON6(0x4800001C)=0x00018005,
BANKCON7(0x48000020)=0x00018005。
3、SDRAM重新整理控制暫存器(REFRESH)
包括REFEN位(重新整理使能位),此位一般設定為1;TREFMD位(SDRAM重新整理模式),初始值為0;Trp(SDRAM RAS預充電時間),此位需要根據時鐘HCLK與選用的SDRAM晶片決定,一般設定為2或3個時鐘;Tsrc位(SDRAM半行週期時間),由Trc-Trp得到,Trc和Trp的值由時鐘和SDRAM晶片決定;REFRESH COUNTER位(SDRAM重新整理計數值),重新整理計數值=2^11+1-HCLK*SDRAM重新整理時間(重新整理時間參考S3C2440和SDRAM技術手冊)。
4、BANK SIZE暫存器(BANKSIZE)
BURST_EN位是ARM核突發模式使能位,設為0或1均可,為了提高效率,此處可以設為1;SCKE_EN,SDRAM掉電模式使能控制,設為1;SCLK_EN,設為1,SCLK僅在訪問週期才被啟用;BK76MAP,BANK6和BANK7的記憶體對映,我們使用2片4B*4M*16bit的SDRAM組成32位256MB儲存器,而且BANK6和BANK7大小要相等,所以此處設為2,即128MB/128MB。BANKSIZE(0x48000028)=0x000000B2。
5、SDRAM模式暫存器集合暫存器(MRSR)
WBL位,突發寫長度,一般設為0,突發寫長度固定;TM位,測試模式,一般設為00,模式暫存器集合(固定);CL位,CAS延時,根據SDRAM晶片和HCLK時鐘計算;BT位,突發型別,一般設為0,連續的(固定);BL位,突發長度,一般設為000(固定的)。MRSR(0x4800002C)=0x00000030,(0x48000030)=0x00000030。
ARM9(S3C2440)的13個儲存控制暫存器
2009-04-29 21:45
記憶體控制器地址,摘自三星技術手冊: |
The S3C2410X has 117 multi-functionalinput/output port pins. The ports are:
— Port A (GPA): 23-output port
— Port B (GPB): 11-input/output port
— Port C (GPC): 16-input/output port
— Port D (GPD): 16-input/output port
— Port E (GPE): 16-input/output port
— Port F (GPF): 8-input/output port
— Port G (GPG): 16-input/output port
— Port H (GPH): 11-input/output port
---PORT A 23-output
GPACON 0x56000000
GPADAT 0x56000004
---PORT B 11-input/output
GPBCON 0x56000010
GPBDAT 0x56000014
GPBUP 0x56000018
---PORT C 16-input/output
GPCCON 0x56000020
GPCDAT 0x56000024
GPCUP 0x56000028
---PORT D 16-input/output
GPDCON 0x56000030
GPDDAT 0x56000034
GPDUP 0x56000038
---PORT E 16-input/output
GPECON 0x56000040
GPEDAT 0x56000044
GPEUP 0x56000048
---PORT F 8-input/output
GPFCON 0x56000050
GPFDAT 0x56000054
GPFUP 0x56000058
---PORT G 16-input/output
GPGCON 0x56000060
GPGDAT 0x56000064
GPGUP 0x56000068
---PORT H 11-input/output
GPHCON 0x56000070
GPHDAT 0x56000074
GPHUP 0x56000078
NAND 暫存器
2009-05-24 13:02
NFCONF 0x4E000000 R/W NAND Flash configuration NFCMD 0x4E000004 R/W NAND flash command set register NFADDR 0x4E000008 R/W NAND flash address set register NFDATA 0x4E00000C R/W NAND flash data register NFSTAT 0x4E000010 R NAND Flash operation status NFECC 0x4E000014 R NAND Flash ECC (Error Correction Code) register |
PWM Timer 暫存器
2009-05-24 16:59
PWM TIMER TCFG0 0x51000000 R/W Configures the two 8-bit prescalers TCFG0 0x51000000 R/W Configures the two 8-bit prescalers TCFG1 0x51000004 R/W 5-MUX & DMA mode selecton register TCON 0x51000008 R/W Timer control register TCNTB0 0x5100000C R/W Timer 0 count buffer register TCNTB1 0x51000018 R/W Timer 1 count buffer register TCNTB2 0x51000024 R/W Timer 2 count buffer register TCNTB3 0x51000030 R/W Timer 3 count buffer register TCNTB4 0x5100003C R/W Timer 4 count buffer register |
WATCHDOG TIMER
2009-05-24 18:35
WATCHDOG TIMER OVERVIEW t_watchdog = 1/[ PCLK / (Prescaler value + 1) / Division_factor ] Once the watchdog timer is enabled, the value of watchdog timer data (WTDAT) register cannot be automatically reloaded into the timer counter (WTCNT). In this reason, an initial value must be written to the watchdog timer count (WTCNT) register, before the watchdog timer starts. When the S3C2440A is in debug mode using Embedded ICE, the watchdog timer must not operate. The WTCON register allows the user to enable/disable the watchdog timer, select the clock signal from 4 different sources, enable/disable interrupts, and enable/disable the watchdog timer output. The Watchdog timer
is used to resume the S3C2440A restart on mal-function after its power on; if controller restart is not desired, the Watchdog timer should be disabled. WTCON 0x53000000 R/W Watchdog timer control register 0x8021 WTDAT 0x53000004 R/W Watchdog timer data register 0x8000 WTCNT 0x53000008 R/W Watchdog timer count register 0x8000 |
S3C2440 IO口暫存器地址
2009-05-10 00:26
S3C2440 IO口暫存器地址 GPACON:0x56000000,預設7FFFFF GPBCON:0x56000010,預設0x0 GPCCON 0x56000020 GPFCON 0x56000050 |
相關推薦
S3C2440記憶體控制詳解
轉載理由:文中特大號字型部分有利於理解韋東山老師所給的sdram實驗中的十三個暫存器的值的理解。 特點: 軟體可程式設計的大小端模式; 地址空間:每個BANK可定址128MB(總共8個BANK 1GB空間); 可程式設計的訪問位寬:BANK0為16或32位,其他BANK為
Nginx的兩種訪問控制詳解
添加文件 san 技術 匹配 htm 主配置文件 proc -o term nginx訪問控制的兩種方法,一種是基於Basic Auth認證,另一種是基於IP的訪問控制 Basic Auth認證基於用戶授權的訪問控制:當客戶端想要訪問相應的網站或者目錄,要求用戶輸入用戶名
Java程式碼執行記憶體溢位詳解及解決方案
記憶體溢位與資料庫鎖表的問題,可以說是開發人員的噩夢,一般的程式異常,總是可以知道在什麼時候或是在什麼操作步驟上出現了異常,而且根據堆疊資訊也很容易定位到程式中是某處出現了問題。記憶體溢位與鎖表則不然,一般現象是操作一般時間後系統越來越慢,直到宕機,但並不能明確是在什麼操作上出現的,發生的時間
程式設計師面試寶典隨筆記(一)--記憶體管理詳解
記憶體管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的效能,更大的自由,C++菜鳥的收穫則是一遍一遍的檢查程式碼和對C++的痛恨,但記憶體管理在C++中無處不在,記憶體洩漏幾乎在每個C++程式中都會發生,因此要想成為C++高手,記
Float 記憶體儲存詳解
轉自http://www.cnblogs.com/yewsky/articles/1864934.html和http://blog.csdn.net/soft200816/article/details/7569722 為何浮點數可能丟失精度浮點十進位制值通常沒有完全相同的二進位制表示形式
JAVA 記憶體洩露詳解-值得收藏的好文
非常好的文章, 轉載自:http://blog.csdn.net/anxpp/article/details/51325838 Java的一個重要特性就是通過垃圾收集器(GC)自動管理記憶體的回收,而不需要程式設計師自己來釋放記憶體。理論上Java
java基礎記憶體基礎詳解
堆區: 1.儲存的全部是物件,每個物件都包含一個與之對應的class的資訊。(class的目的是得到操作指令) 2.jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身 棧區: 1.每個執行緒包含一個棧區,棧中只儲存基礎資料型
Java虛擬機器:記憶體模型詳解
我們都知道,當虛擬機器執行Java程式碼的時候,首先要把位元組碼檔案載入到記憶體,那麼這些類的資訊都存放在記憶體中的哪個區域呢?當我們建立一個物件例項的時候,虛擬機器要為物件分配記憶體,Java虛擬機器又是如何配分記憶體的呢?這些都涉及到Java虛擬機器的記
Linux ACL訪問許可權控制詳解
在普通許可權中,Linux使用者對檔案只有三種身份,就是屬主、屬組和其他人;每種使用者身份擁有讀(read)、寫(write)和執行(execute)三種許可權。但是在實際工作中,這三種身份實在是不夠用,我們舉個例子來看看。 圖 1 ACL許可權簡介 圖 1 的根目錄中有一個 /projec
Linux 記憶體引數詳解
【檢視記憶體引數詳解】Linux free -m 詳細說明 free 命令相對於top 提供了更簡潔的檢視系統記憶體使用情況: $ free &nb
spark調優(二)-Apache Spark 記憶體管理詳解
Apache Spark 記憶體管理詳解 轉載於:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html Spark 作為一個基於記憶體的分散式計算引擎,
[Java]Java類和物件記憶體分配詳解
描述 程式碼說明: 一.當Person p1 = new Person();第一次被呼叫時需要做兩件事: 1.先判斷類載入器是否載入過Person類,如果沒有則載入到Person型別到方法區 2.在堆中開闢記憶體空間,在棧中物件名引用(指向)堆的相應記憶體空間 二. p1.name = '皓皓': 將堆中n
類(繼承)的記憶體分配詳解
1.基類與派生類的記憶體分配 派生類繼承基類 記憶體分配時,是在於基類物件不同的記憶體地址處,按基類的成員變數型別,開闢一個同樣的型別空間,但注意開闢後派生物件的空間,不是複製基類的成員的值,而是僅僅開闢那種成員型別的空間,未初始化時,裡面存在的數是不確定的
JVM記憶體結構詳解
主要內容如下: JVM啟動流程 JVM基本結構 記憶體模型 編譯和解釋執行的概念 一、JVM啟動流程: JVM啟動時,是由java命令/javaw命令來啟動的。 二、JVM基本結構: JVM基本結構圖: 《深入理解Ja
【搞定Java併發程式設計】第7篇:Java記憶體模型詳解
上一篇:ThreadLocal詳解:https://blog.csdn.net/pcwl1206/article/details/84859661 其實在Java虛擬機器的學習中,我們或多或少都已經接觸過了有關Java記憶體模型的相關概念(點選檢視),只不過在Java虛擬機器中講的不夠詳細,因此
DSP2812伺服電機控制 詳解
驅動板特性 電機供電電源 5~220VAC/DC 輸入,最大可以驅動1100W電機,最大峰值可以達25A。5VDC的控制電路電源和15VDC的IGBT驅動電源。正常工作時5VDC電流0.4A,15VDC電流0.15A 控制板的電源模組: 幾
Java基礎:由JVM記憶體模型詳解執行緒安全
1.前言 最近在研究JVM記憶體模型和Java基礎知識。主要講的是執行緒共享變數與執行緒私有變數以及如何寫出執行緒安全的程式碼。這裡列出一條規則,“類中的成員變數,也叫例項變數,也叫全域性變數,它是非執行緒安全,是所有執行緒共享的變數,定義在方法中的私有變數是執行緒安全的,是每個執行緒私
Spark2.1 記憶體管理詳解
本文中闡述的原理基於 Spark 2.1 版本,閱讀本文需要讀者有一定的 Spark 和 Java 基礎,瞭解 RDD、Shuffle、JVM 等相關概念。 在執行 Spark 的應用程式時,Spark 叢集會啟動 Driver 和 Executor 兩種 JVM 程序,前者為
unity中camera攝像頭控制詳解
在Unity的Transform中,rotation屬性對應的就是尤拉角,一共分為3個軸,x、 y和z,而每一個數值對應的是繞對應的軸旋轉的度數。 如上圖所示,表示按照座標順序旋轉,X軸旋轉30°,Y軸旋轉90°,Z軸旋轉 10°。尤拉角的優點:只需使用3個值,即三個座標軸的旋轉角度;缺點:必須 嚴格按
基於JDK8的JVM記憶體模型詳解與GC策略
JVM記憶體模型總覽 首先看一下JVM記憶體模型圖 程式計數器Program Counter Register 程式計數器是一塊較小的記憶體區,可以看做是當前執行緒所執行的位元組碼的行號指示器,如果執行緒正在執行一個JAVA方法,這個計數器記錄的是正在執行