娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年03月23日(星期日)

正在發(fā)生

2020年03月23日 | 第012課 內(nèi)存控制器與SDRAM

發(fā)布者:森綠企鵝 來源: eefocus關(guān)鍵字:內(nèi)存控制器  SDRAM 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

第001節(jié)輔線1硬件知識(shí)_內(nèi)存接口概念

首先來分析下操作GPIO控制器和操作UART控制器兩者的區(qū)別。


如圖是S3C2440是個(gè)片上系統(tǒng),有GPIO控制器(接有GPIO管腳),有串口控制器 (接有TXD RXD引腳)。

這里寫圖片描述

配置GPIO控制器相應(yīng)的寄存器,即可讓引腳輸出高低電平;配置UART控制器相應(yīng)的寄存器,即可讓引腳輸出波形。前者相對(duì)簡(jiǎn)單,類似門電路,后者相對(duì)復(fù)雜,屬于協(xié)議類接口。類似的協(xié)議類接口還有iic、iis、spi等。 

對(duì)于CPU是不管什么接口的,它只寫相應(yīng)的寄存器,由控制器根據(jù)寄存器的配置去控制具體的引腳。


那么CPU是如何訪問各個(gè)不同的寄存器的呢?


CPU只管發(fā)出一個(gè)地址,內(nèi)存控制器根據(jù)該地址選擇不同的模塊,然后從模塊中得到數(shù)據(jù)或者發(fā)送數(shù)據(jù)到模塊中。


前面的GPIO/門電路接口、協(xié)議類接口,都不會(huì)把地址輸出到外部,接下來的內(nèi)存類接口,會(huì)把地址輸出到外部,比如Nor Flash、網(wǎng)卡、SDRAM。


如圖,SDRAM、DM9000網(wǎng)卡、Nor Flash都接在JZ2440的數(shù)據(jù)總線和地址總線上,CPU把數(shù)據(jù)和地址發(fā)送出去,然后內(nèi)存控制器根據(jù)片選信號(hào)選擇相應(yīng)的設(shè)備接收地址和數(shù)據(jù)信號(hào),互不干擾。

這里寫圖片描述

片選信號(hào)和地址的關(guān)系怎么確定?


這個(gè)是由2440芯片特性決定的。

這里寫圖片描述

當(dāng)選擇Nor Flash啟動(dòng)時(shí),CPU發(fā)出的指令的地址范圍處于0x0000000 - 0x06000000,內(nèi)存控制器就會(huì)使nGCS0處于低電平(片選引腳被選中),Nor Flash被選中。


當(dāng)CPU發(fā)出的指令的地址范圍處于0x20000000 - 0x26000000,內(nèi)存控制器就會(huì)使nGCS4處于低電平(片選引腳被選中),網(wǎng)卡被選中。


當(dāng)CPU發(fā)出的指令的地址范圍處于0x30000000 - 0x36000000,內(nèi)存控制器就會(huì)使nGCS6處于低電平(片選引腳被選中),SDRAM被選中。 


內(nèi)存控制器根據(jù)不同的地址地址范圍,發(fā)出不同的片選引腳,只有被片選引腳選中的芯片才能正常工作,不被選中的芯片就像不存在一樣,不工作。


GPIO/門電路接口、協(xié)議類接口、內(nèi)存類接口都屬于CPU的統(tǒng)一編址。對(duì)于Nand Flash,在原理圖上它的地址線并沒有連接到CPU,因此它不參與CPU的統(tǒng)一編址。但它的數(shù)據(jù)線也接到了數(shù)據(jù)總線上,為了防止干擾,它也有一個(gè)片選信號(hào)(CE)。當(dāng)CPU訪問Nand Flash時(shí),Nand Flash控制器才會(huì)片選Nand Flash,讓其接收數(shù)據(jù)總線上的數(shù)據(jù)。

這里寫圖片描述

再來看下Nor Flash的空間,0x00000000 * 0x06000000,為128M,即每一個(gè)片選信號(hào)可以選擇的空間是128M=2^27,也就需要A0、A1……A26,共27根地址線。CPU發(fā)出的32位地址線,內(nèi)存控制器根據(jù)地址范圍,片選上相應(yīng)的bank,并將地址轉(zhuǎn)化為27位。

這里寫圖片描述

第002節(jié)輔線1硬件知識(shí)_不同位寬設(shè)備的連接

參考2440芯片手冊(cè),可以看到內(nèi)存接口與8-bit ROM連接時(shí),2440的A0與外部芯片的A0相連。

這里寫圖片描述

當(dāng)與兩個(gè)8-bit ROM拼接成的一個(gè)16-bit ROM連接時(shí),2440的A1與外部芯片的A0相連。

這里寫圖片描述

當(dāng)與四個(gè)8-bit ROM拼接成的一個(gè)32-bit ROM連接時(shí),2440的A2與外部芯片的A0相連。

這里寫圖片描述

當(dāng)與一個(gè)16-bit ROM連接時(shí),2440的A1與外部芯片的A0相連。

這里寫圖片描述

可以看出外接芯片的位寬有變化時(shí),地址線的接法也會(huì)有變化。那這個(gè)變化有什么規(guī)律呢?


假設(shè)CUP執(zhí)行:


MOV R0, #3 @去地址為3的內(nèi)存上 

LDRB R1, [R0] @ 從內(nèi)存為3的地址上,讀出一個(gè)字節(jié)


如圖有8bitROM、16bitROM、32bitROM。

這里寫圖片描述

8個(gè)bit組成一個(gè)字節(jié),字節(jié)是計(jì)算機(jī)的最小的存儲(chǔ)單位,因此我們讀取數(shù)據(jù)肯定都是8bit的倍數(shù)。 


* 對(duì)于8bitROM ,8bit是一次讀寫的最小單位,即0地址是第一個(gè)8bit,1地址是第二個(gè)8bit;CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為1,8bitROM的A0和A1收到的也都是1,于是找到了ROM上地址為3的8bit數(shù)據(jù),包含了我們需要的數(shù)據(jù)。 


* 對(duì)于16bitROM ,16bit是一次讀寫的最小單位,即0地址是第一個(gè)16bit,里面有兩個(gè)8bit數(shù)據(jù);CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為1,16bitROM的A0和A1分別收到的是1和0,于是找到了ROM上地址為1的16bit數(shù)據(jù),包含了我們需要的數(shù)據(jù),最后內(nèi)存控制器再幫我們挑選出所需的8bit數(shù)據(jù)。 


* 對(duì)于32bitROM ,32bit是一次讀寫的最小單位,即0地址是第一個(gè)32bit,里面有四個(gè)8bit數(shù)據(jù);CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為0,32bitROM的A0和A1收到的都是0,于是找到了ROM上地址為0的32bit數(shù)據(jù),包含了我們需要的數(shù)據(jù),最后內(nèi)存控制器再幫我們挑選出所需的8bit數(shù)據(jù)。

image.png

接到芯片上的引腳用來確定讀取芯片上的哪一個(gè)單元的數(shù)據(jù),把這個(gè)單元的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會(huì)根據(jù)沒有連接芯片的引腳,來確定返回哪一個(gè)單元的數(shù)據(jù)給CPU,


再舉一個(gè)例子: 

假如傳遞一個(gè)32位的數(shù)據(jù)時(shí)


MOV R0, #4 

LDR R1, [R0] @去地址4,讀取4字節(jié)數(shù)據(jù)


執(zhí)行過程如下:


8bitROM: 當(dāng)CPU發(fā)出地址(000100),內(nèi)存控制器會(huì)把000100,000101,000110,000111處的地址轉(zhuǎn)發(fā)給ROM,ROM會(huì)把得到的地址000100,000101,000110,000111,上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會(huì)把得到的4個(gè)8bit的數(shù)據(jù)組裝成一個(gè)32位的數(shù)據(jù)返回給CPU。


16bitROM: 當(dāng)CPU發(fā)出地址(000100),內(nèi)存控制器會(huì)把00010,00011處的地址轉(zhuǎn)發(fā)給ROM,ROM會(huì)把得到的地址00010,00011,上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會(huì)把得到的2個(gè)16bit的數(shù)據(jù)組裝成一個(gè)32位的數(shù)據(jù)返回給CPU。


32bitROM: 當(dāng)CPU發(fā)出地址(000100),內(nèi)存控制器會(huì)把0001處的地址發(fā)送給ROM,ROM會(huì)把得到的地址0001上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會(huì)把得到的1個(gè)32bit數(shù)據(jù)返回給CPU。


怎樣確定芯片的訪問地址: 

1.根據(jù)片選信號(hào)確定基地址, 

2.根據(jù)芯片所接地址線確定范圍


實(shí)例: 

Nor Flash 使用的是片選0(nGCS0),基地址為0,用到A20,A19……A1,A0共21條地址線,所以地址范圍為0x00000000 ~ 0x1FFFFF也就是2M的空間大小。 


網(wǎng)卡(Net)使用的是片選4(nGCS4),基地址為0x20000000,用到A2,A0共2根地址線,所以地址范圍為0x20000000 ~ 0x20000005。 


SDRAM使用的是片選6(nGCS6),基地址為0x30000000。

image.png

第003節(jié)輔線1硬件知識(shí)_時(shí)序圖分析示例

這節(jié)我們分析一下我們了解時(shí)序圖,信號(hào)之間是怎樣一起工作的,以Nor Flash 為例。


2440和Nor Flash 之間有地址線,數(shù)據(jù)線,還有各種數(shù)據(jù)線連接。

這里寫圖片描述

以Nor Flash為例,分析下如何設(shè)置它的時(shí)序。


如圖是S3C2440的Nor Flash控制器的讀時(shí)序圖,里面很多參數(shù)都需要根據(jù)外接芯片的性能進(jìn)行設(shè)置,有的芯片性能好、響應(yīng)時(shí)間快,就可以把參數(shù)時(shí)間設(shè)置小一點(diǎn),釋放更好的性能。

這里寫圖片描述

如圖是Nor Flash芯片的讀時(shí)序。

這里寫圖片描述

我們需要做的就是設(shè)置S3C2440的Nor Flash控制器時(shí)序去滿足Nor Flash芯片的時(shí)序。每個(gè)參數(shù)的參考范圍可以通過AC CHARACTERISTICS得到。

這里寫圖片描述

結(jié)合Nor Flash芯片的兩張圖,可以得到如下信息:


發(fā)出地址數(shù)據(jù)(Addresses)后,要等待Taa(要求大于等于70ns)時(shí)間,地址數(shù)據(jù)才有效;

發(fā)出片選信號(hào)(CE#)后,要等待Tce(要求大于等于70ns)時(shí)間,片選信號(hào)才有效;

發(fā)出讀信號(hào)(OE#)后要等待Toe(要求大于等于30ns)時(shí)間,讀信號(hào)才有效;

為了簡(jiǎn)單我們把地址數(shù)據(jù)(Addresses),片選信號(hào)(CE#),讀信號(hào)(OE#),同時(shí)發(fā)出,然后讓它們都等待70ns(等待信號(hào)有效)。對(duì)應(yīng)S3C2440的Nor Flash控制器的讀時(shí)序圖,需要讓地址信號(hào)A[24:0]、片選信號(hào)nGCS、讀信號(hào)nOE同時(shí)發(fā)出,保持Tacc大于等于70ns。


查閱S3C2240的參考手冊(cè),Nor Flash是接在BANKCON0上的,因此只需要設(shè)置BANKCON0即可。

這里寫圖片描述

可以看到Tacc上電初始值是111,對(duì)應(yīng)14個(gè)clocks。系統(tǒng)上電采用12MHz的晶振,HCLK=12MHz,Tacc=(1000/12*14)≈1166ns,這個(gè)值很大,幾乎可以滿足所有Nor Flash的要求。


啟動(dòng)后,將HCLK設(shè)置為100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此設(shè)置Tacc等于101,8個(gè)clocks即可。


在前面uart實(shí)驗(yàn)的源碼基礎(chǔ)上,新建init.c和init.h兩個(gè)文件。


在init.c里面只需要設(shè)置BANKCON0寄存器即可。


#include "s3c2440_soc.h"

void bank0_tacc_set(int val)

{

    BANKCON0 = val << 8;

}


init.h進(jìn)行函數(shù)聲明。


#ifndef _INIT_H

#define _INIT_H

void bank0_tacc_set(int val);

#endif


最后在主函數(shù)里面,通過串口獲取輸入的值,傳入bank0_tacc_set()函數(shù)里,設(shè)置Tacc,然后再讀取Nor Flash上的閃燈程序。


#include "s3c2440_soc.h"

#include "uart.h"

#include "init.h"


int main(void)

{

    unsigned char c;


    uart0_init();

    puts("Enter the Tacc val: nr");


    while(1)

    {

        c = getchar();

        putchar(c);

        if (c >= '0' && c <= '7')

        {

            bank0_tacc_set(c - '0');

            led_test();

        }

        else

        {

            puts("Error, val should between 0~7nr");

            puts("Enter the Tacc val: nr");

        }

    }

    return 0;

}


實(shí)驗(yàn)效果:


輸入0~4,Tacc小于70ns,無法讀取Nor Flash上數(shù)據(jù),LED不能閃爍。


輸入4~7,Tacc大于70ns,可以讀取Nor Flash上數(shù)據(jù),LED不斷閃爍,且值越小越快(區(qū)別不明顯)。


第004節(jié)輔線1硬件知識(shí)_SDRAM的設(shè)置

本節(jié)將講解如何設(shè)置SDRAM,如果想對(duì)內(nèi)存有更多的了解,可以在網(wǎng)上搜索看下這篇文檔“高手進(jìn)階_終極內(nèi)存技術(shù)指南——完整/進(jìn)階版”。


在JZ2440上接有64M的SDRAM,如果想要使用SDRAM,需要對(duì)內(nèi)存控制器做一些設(shè)置。 

在前面第一節(jié)講到,CPU將數(shù)據(jù)或地址發(fā)給內(nèi)存控制器,內(nèi)存控制器再去訪問外部的SDRAM,因此設(shè)置內(nèi)存控制器就說本節(jié)的核心。


如圖是SDRAM存儲(chǔ)結(jié)構(gòu)邏輯圖:

這里寫圖片描述

SDRAM總共有4個(gè)塊(Banks),可以認(rèn)為每個(gè)塊就是一個(gè)表格,里面的每個(gè)格子表示的是16bit數(shù)據(jù)。


問題1:怎樣訪問里面的某個(gè)格子呢?


首先發(fā)出一個(gè)片選信號(hào),選中整個(gè)芯片;


發(fā)出Bank地址,選擇是哪一個(gè)Bank(塊,即表格);


發(fā)出行地址;


最后發(fā)出列地址,才能選中是個(gè)格子;


問題2:那么多的信號(hào)有誰發(fā)出呢?


由內(nèi)存控制器發(fā)出,所以我們需要設(shè)置內(nèi)存控制器,CPU只是簡(jiǎn)單的執(zhí)行讀寫內(nèi)存的命令,其他的都交給內(nèi)存控制起來處理。 

例如


LDR R0,=0x30000000 

LDR R1,[R0]


CPU把0x30000000這個(gè)地址發(fā)給內(nèi)存控制器,內(nèi)存控制器根據(jù)這個(gè)地址,判斷屬于哪個(gè)范圍,然后發(fā)出相應(yīng)的片選信號(hào)。


根據(jù)類型(比如SDRAM)拆分成三部分:發(fā)出Bank地址、發(fā)出行地址、發(fā)出列地址。


對(duì)于上面的三個(gè),怎樣拆分呢?


行地址線有幾條,列地址線有幾條,都要設(shè)置內(nèi)存控制器里面相關(guān)寄存器。


讀數(shù)據(jù)

綜上所述:對(duì)SDRAM的訪問可以分為如下步:


CPU發(fā)出的片選信號(hào)nSCS6有效,它選中SDRAM芯片。


SDRAM中有4個(gè)L-Bank,需要兩根地址信號(hào)來選中其中之一,根據(jù)原理圖,可知使用ADDR24,ADDR25作為L(zhǎng)-Bank的選擇信號(hào)。


對(duì)被選中的芯片進(jìn)行統(tǒng)一的行/列(存儲(chǔ)單元)尋址。


根據(jù)SDRAM芯片的列地址線數(shù)目設(shè)置CPU的相關(guān)寄存器后,CPU就會(huì)從32位的地址中自動(dòng)分出L_Bank片選信號(hào),行地址信號(hào),列地址信號(hào),然后先后發(fā)出行地址信號(hào),列地址信號(hào)。L_Bank選擇信號(hào)在發(fā)出行地址信號(hào)的同時(shí)發(fā)出,并維持到列地址信號(hào)結(jié)束。


根據(jù)原理圖可知:


地址、列地址共用地線ADDR2—ADDRI4(BANK6位寬為32,ADDRO/I沒有使用),使用nSRAS、nSCAS兩個(gè)信號(hào)來區(qū)分它們。


比如本開發(fā)板中,使用兩根地址線ADDR24、ADDR25作為L(zhǎng)-Bank的選擇信號(hào):SDRAM芯片K4s5m632的行地址數(shù)為13,列地址數(shù)為9,所以當(dāng)nSRAS信號(hào)有時(shí),ADDR2—ADDR14上發(fā)出是行地址信號(hào),它對(duì)應(yīng)32位地址空間的b可23m]:當(dāng)nSCAS信號(hào)有效時(shí),ADDR2—ADDR10上發(fā)出的是列地址信號(hào),它對(duì)應(yīng)32位地址空間的bit[0:2];由于BANK6以32位的寬度外接DRAM,ADDR0、ADDR1恒為0,不參與譯碼。


找到了存儲(chǔ)單元后,被選中的芯片就要進(jìn)行統(tǒng)一的數(shù)據(jù)傳輸了。


開發(fā)板中使用兩片16位的SDRAM芯片并聯(lián)組成32位的位寬,與CPU的32根數(shù)據(jù)線(DATA0—DATA31)相連。 


BANK6的起始地址為0x30000000,所以SDRAM的訪問地址為0x30000000~低0x33FFFFFF,共64MB。


2440內(nèi)存控制器設(shè)置:


內(nèi)存控制器共有13個(gè)寄存器,


BANK0–BANK5只需要設(shè)置BWSCON和BANKCONx(x為0~5)兩個(gè)寄存器;


BANK6、BANK7外接SDRAM時(shí),除BWSCON和BANKCONx(x為6、7)外,還要設(shè)置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4個(gè)寄存器。


下面分類說明各個(gè)寄存起的設(shè)置。


1.位寬和等待控制寄存器BWSCON(BUSWIDTH&WAITCONTROLREGISTER)

這里寫圖片描述

BWSCON中每4位控制一個(gè)BANK,最高4位對(duì)應(yīng)BANK7(沒有使用)、接下來4位對(duì)應(yīng)BANK6。


(1)ST6[27]: 啟動(dòng)/禁止SDRAM的數(shù)據(jù)掩碼引腳,對(duì)于SDRAM,此位為0:對(duì)于SRAM此位為1。


(2)WS6[26]:是否使用存儲(chǔ)器的WAIT信號(hào),通常設(shè)為0。


(3)DW6[25:24]:使用兩位來設(shè)置相應(yīng)BANK的位寬,0b00對(duì)應(yīng)8位,0b01對(duì)應(yīng)16位,0b10對(duì)應(yīng)32位(開發(fā)板用的就是32位的),0b11表示保留。


因此BWSCON寄存器的值為:0x22000000。


2.BANK控制寄存器BANKCON6(BANKCONTROLREGISTER) 

在8個(gè)BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM。

這里寫圖片描述

(1)MT[16:15]:用于設(shè)置本BANK外接的是ROM/SRAM還是SDRAM,SRAM:0b00,SDRAM:0b11(開發(fā)板使用的是SDRAM)。


當(dāng)MT[16:15]設(shè)置為00時(shí),此寄存器與BANKC0N0、BANKCON5類似,不再贅述。


當(dāng)MT[16:15]設(shè)置為11時(shí),此寄存器其他值如下設(shè)置。

這里寫圖片描述

(2)Trcd[3:2]:行地址和列地址間隔多長(zhǎng)時(shí)間,看芯片手冊(cè)時(shí)間間隔是20ns,本來開發(fā)板的HCLK是100MHZ,clocks為10ns,所以設(shè)置為推薦值0b00(2clocks)。


(3)SCAN[1:0]:SDRAM的列地址位數(shù),對(duì)于本開發(fā)板使用的SDRAMK4S561632。列地址位數(shù)為9,所以SCAN=0b010如果使用其他型號(hào)的SDRAM,需要查看其數(shù)據(jù)手冊(cè)。來決定SCAN的取值。0b00表示8位,0b01表示9位,0b10表示10位。


綜上所述,本開發(fā)板中BANKCON6設(shè)為0x017001。


3.刷新控制寄存器REFRESH(REFRESHCONTROLREGISTER)

這里寫圖片描述

(1)REFEN[23]:0=禁止SDRAM的刷新功能,1:開啟SDRAM的刷新功能(設(shè)置開啟SDRAM的刷新功能)。


(2)TREFMD[22]:SDRAM的刷新模式,0=CBR/AutoRefresh,1=SelfRefresh(一般在系統(tǒng)休眠時(shí)使用),我們?cè)O(shè)置默認(rèn)值。


(3)Trp[21:20):根據(jù)芯片手冊(cè)設(shè)為0即可。


(4)Tsrc[19:18]:根據(jù)芯片手冊(cè)設(shè)為默認(rèn)值0b01即可。


(5)RefreshCounter[10:0]:即R_CNT


R_CNT可如下汁算(SDRAM時(shí)鐘頻率就是HCLK): 

R_CNT=2^11+1-SDRAM時(shí)鐘頻率(MZ)*SDRAM刷新周期(us)


SDRAM的刷新周期在SDRAM的數(shù)據(jù)手冊(cè)上有標(biāo)明,在本開發(fā)板使用的SDRAM:K4S561632的數(shù)據(jù)手冊(cè)上,可看見這么一行“64msrefreshpenod(8KCycle)所以,刷新周期=64ms/8192=7.8125us。 

Refreshcount=2^11+1-100x7.8=1269=0x4F5。


因此,本開發(fā)板中REFRESH設(shè)為0x8404F5。


4.BANKSIZE寄存器REFRESH(BANKSIZEREG ISTER)

這里寫圖片描述

(1)BURST_EN[7]:0=ARM核禁上突發(fā)傳輸,1=ARM核支持突發(fā)傳輸(推薦);


(2)SCKEEN[5]:0=不使用SCKE信號(hào)令SDRAM進(jìn)入省電模式,1=使用SCKE信號(hào)令SDRAM進(jìn)入省電模式(推薦);


(3)SCLK-EN[4]:0=時(shí)刻發(fā)出SCLK信號(hào),1=僅在訪問SDRAM期間發(fā)出SCLK信號(hào)(推薦);


(4)BK76MAP[2:0]:設(shè)置BANK6的大小。本開發(fā)板BANK6外接64MB的SDRAM,令[2:0]=b001(64M/64M),表示BANK6/7的容量都是64MB,雖然BANK7沒有使用。


因此,本開發(fā)板中BANKSIZE設(shè)為0xB1。


5.SDRAM模式設(shè)置寄存器MRSRBx6(SDRAM MODE REGISTER SET REGISTER)

這里寫圖片描述

能修改的只有位CL[6:4],這是SDRAM時(shí)序的一個(gè)時(shí)間參數(shù),表示發(fā)出行、列地址后,等多久才返回收到數(shù)據(jù), 

CL可以取值為0b0l0(2 clocks)或0b011(3 clocks)。


本開發(fā)板取最保守的值0b010,所以MRSRB6的值為0x20。


下面開始寫程序: 

在init.c里面進(jìn)行對(duì)內(nèi)存控制器的寄存器依次進(jìn)行設(shè)置:


void sdram_init(void)

{

    BWSCON = 0x22000000;

    BANKCON6 = 0x17001;

    BANKCON7 = 0x17001;

    REFRESH  = 0x8404f5;

    BANKSIZE = 0xb1;

    MRSRB6   = 0x20;

    MRSRB7   = 0x20;

}


再寫一個(gè)測(cè)試函數(shù),向SDRAM里面連續(xù)寫1000個(gè)數(shù),再讀出數(shù)據(jù)對(duì)比是否是設(shè)置的數(shù),返回對(duì)比結(jié)果:


int sdram_test(void)

{

    volatile unsigned char *p = (volatile unsigned char *)0x30000000;

    int i;


    // write sdram

    for (i = 0; i < 1000; i++)

        p[i] = 0x55;


    // read sdram

    for (i = 0; i < 1000; i++)

        if (p[i] != 0x55)

            return -1;


    return 0;

}


在主函數(shù)里調(diào)用sdram_test()測(cè)試函數(shù),如果測(cè)試成功,LED閃爍:


int main(void)

{

    uart0_init();


    sdram_init();


    if (sdram_test() == 0)

        led_test();


    return 0;

}


實(shí)驗(yàn)結(jié)果:


LED按預(yù)期閃爍,屏蔽掉sdram_init()后,LED不閃爍。

關(guān)鍵字:內(nèi)存控制器  SDRAM 引用地址:第012課 內(nèi)存控制器與SDRAM

上一篇:第011課 Jz2400串口(UART)的使用
下一篇:第013課 S3c2440代碼重定位詳解

推薦閱讀

搭載高通(Qualcomm)Snapdragon處理器的Always Connected Windows PC即將上市,專家以華碩即將發(fā)售的NovaGo筆記型電腦(NB)進(jìn)行評(píng)估,結(jié)果雖然令人驚艷,但仍有一些值得改善的地方。?采用Snapdragon的Windows 10電腦不僅能夠永遠(yuǎn)連網(wǎng),降低對(duì)Wi-Fi的依賴,為了支持原本應(yīng)用于智能手機(jī)的Snapdragon,Windows核心架構(gòu)也做了徹底的改版,特別吸引人的功能...
蛇形機(jī)器人一直是卡內(nèi)基梅隆大學(xué)(CMU)機(jī)器人實(shí)驗(yàn)室最引人注目的項(xiàng)目之一,早在十年前,CMU的仿生機(jī)器人實(shí)驗(yàn)室就開始了該項(xiàng)目的工作,并在兩年后研發(fā)出了第一臺(tái)可自主移動(dòng)的蛇形機(jī)器人。這款機(jī)器人依據(jù)仿生學(xué)原理設(shè)計(jì),體型瘦而長(zhǎng),頭部裝有相機(jī),適合在狹小空間作業(yè),如進(jìn)入人類無法到達(dá)的區(qū)域進(jìn)行搜索和救援。盡管機(jī)器人的商業(yè)轉(zhuǎn)型非常成功,但CMU的研究...
在一般情況下stm32內(nèi)部sram是足夠使用的 MDK配置如下 但是有些時(shí)候內(nèi)存是不夠用的,比如用到ucgui的時(shí)候或者做大項(xiàng)目時(shí)就需要外擴(kuò)sram,倘若你要把外部sram作為運(yùn)行內(nèi)存則可以做如下配置: 另外一種方法就是自己寫malloc函數(shù),正點(diǎn)原子的內(nèi)存管理函數(shù)可以借鑒一下:__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); ...
1、建立好文件夾,文件夾中有相應(yīng)的庫函數(shù)和頭文件等等以上通過我的G盤里面的建立工程模板解壓即可得到2、通過keil創(chuàng)建test_creat.uvproj到以目錄選擇完芯片以后,彈出窗口一定要選擇“否”3、添加文件,只用添加C文件進(jìn)去添加完成以后會(huì)看到:4、頭文件路徑的添加stm32f10x_it.h,stm32f10x.h,stm32f10x_conf.h,core_cm3.h,system_stm32f10x.h主要添加以上...

史海拾趣

問答坊 | AI 解惑

一種基于CPLD的曼徹斯特編解碼器設(shè)計(jì)

引言 雖然計(jì)算機(jī)通信的方法和手段多種多樣,但都必須依靠數(shù)據(jù)通信技術(shù)。數(shù)據(jù)通信就是將數(shù)據(jù)信號(hào)加到數(shù)據(jù)傳輸信道上進(jìn)行傳輸,并在接收點(diǎn)將原始發(fā)送的數(shù)據(jù)正確地恢復(fù)過來。由于計(jì)算機(jī)產(chǎn)生的一般都是數(shù)字信號(hào),因此計(jì)算機(jī)之間的通信實(shí)際上都屬于數(shù) ...…

查看全部問答∨

求NE5534的MULTISIM元件

本帖最后由 paulhyde 于 2014-9-15 09:04 編輯 我求求大哥些了~~救救我這個(gè)新手吧~~~我痛苦啊~~~  …

查看全部問答∨

關(guān)天wince6.0 media player的問題

我在定制內(nèi)核時(shí)加入了windows media player 播放影片時(shí),出現(xiàn)半透明播放(可以看得見windows背景) 請(qǐng)各位大俠指點(diǎn)下! …

查看全部問答∨

VB中MSCOMM控件實(shí)現(xiàn)串行通信的問題

PC機(jī)與單片機(jī)串行通信。我遇到的問題:發(fā)數(shù)據(jù)少于8個(gè),能正確接收,漢字少于4個(gè),能正確接收;若發(fā)多了,只能收到8個(gè)數(shù),漢字只能收4到個(gè),而且接收區(qū)不能連續(xù)顯示。用串口調(diào)試工具驗(yàn)證單片機(jī)中程序沒錯(cuò),我用的是VB企業(yè)版中的MSCOMM控件,程序代碼 ...…

查看全部問答∨

Source Insight 中怎么才能讓中文注釋之間沒有空格呢?

如題: 用Source Install寫代碼的時(shí)候,中文注釋的每個(gè)漢字間都會(huì)有一個(gè)空格,請(qǐng)問這個(gè)空格怎么才能去掉呢,在選項(xiàng)里面能改嗎? 還有一個(gè)問題: 我發(fā)現(xiàn)這個(gè)軟件即使你沒有包含在它的工程里面的文件也是能看到的,但是我還發(fā)現(xiàn)用結(jié)構(gòu)體名定義的結(jié)構(gòu)變量 ...…

查看全部問答∨

LED與熒光粉知識(shí)

led用LED芯片上涂敷熒光粉而實(shí)現(xiàn)白光發(fā)射。 LED采用熒光粉實(shí)現(xiàn)白光主要有三種方法,但它們并沒有完全成熟,由此嚴(yán)重地影響白光LED在照明領(lǐng)域的應(yīng)用。具體來說,第一種方法是在藍(lán)色LED芯片 上涂敷能被藍(lán)光激發(fā)的黃色熒光粉,芯片發(fā)出的藍(lán)光與熒光粉 ...…

查看全部問答∨

格式化開發(fā)板是大面積扇區(qū)壞的問題?

我用的是友善之臂的MicroS3C2440開發(fā)板,想運(yùn)行一個(gè)Linux系統(tǒng),但是在第一步格式化NandFlah的時(shí)候卻出現(xiàn)大面積分區(qū)壞的問題,不知如何解決? [ 本帖最后由 zhangle0922 于 2011-5-12 12:37 編輯 ]…

查看全部問答∨

簡(jiǎn)易433MHz單芯天線疑問

用單芯線來做簡(jiǎn)易的433MHz天線,除了接口阻抗匹配外,天線直徑大小對(duì)發(fā)射功率大小有何影響呢?比如0.6mm,0.8mm,1.0mm…

查看全部問答∨

公開征集DIY數(shù)控電源相關(guān)器件的供貨信息

為了實(shí)現(xiàn)DIY數(shù)控電源更好的可用性及美化美觀,現(xiàn)公開征集以下器件的供應(yīng)商,也歡迎網(wǎng)友們提供相關(guān)信息:   1、單鍵飛梭成品 注塑件、結(jié)構(gòu)件、電氣件齊全,可以直接裝機(jī)使用 2、光電旋鈕/編碼器 作為單鍵飛梭的替代,帶塑膠旋鈕和緊固件 ...…

查看全部問答∨

轉(zhuǎn):TI轉(zhuǎn)投嵌入領(lǐng)域:移動(dòng)芯片成寡頭游戲

  面對(duì)快速增長(zhǎng)的智能手機(jī)芯片領(lǐng)域,德州儀器為何要抽身而退?  德儀中國區(qū)相關(guān)人士對(duì)筆者稱,去年11月,德儀就宣布將削減成本,把對(duì)無線業(yè)務(wù)的投資集中于嵌入式市場(chǎng),因?yàn)榍度胧绞袌?chǎng)具有更持久的發(fā)展?jié)摿Α! ∽咭苿?dòng)領(lǐng)域  2007年以前,德 ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 枝江市| 郁南县| 若尔盖县| 保定市| 高淳县| 汉中市| 乐平市| 阿克苏市| 射阳县| 大竹县| 财经| 驻马店市| 定西市| 武宣县| 同仁县| 青浦区| 屏山县| 双江| 新沂市| 安溪县| 资阳市| 印江| 顺平县| 宁海县| 白银市| 德保县| 城固县| 黎平县| 和田县| 西昌市| 大荔县| 江油市| 册亨县| 高碑店市| 独山县| 海门市| 凌源市| 谷城县| 广元市| 庄河市| 冕宁县|