Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3403982
  • 博文数量: 754
  • 博客积分: 10132
  • 博客等级: 上将
  • 技术积分: 7780
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-14 23:36
文章分类

全部博文(754)

文章存档

2012年(3)

2011年(39)

2010年(66)

2009年(167)

2008年(479)

我的朋友

分类: LINUX

2009-04-29 16:01:56

1.S3C44B0X地址空间划分
     其分为8个BANK,每一BANK最多有32MB空间。为什么?S3C44B0X的地址总线范围为ADDR【24:0】,那就是说一共有25根地址线咯,这里的寻址范围就达到了32MB空间,再加上S3C它自身有的片选信号线NGCS[7:0],那就是一共32MB*8=256MB空间。
2.S3C44B0X存储控制器功能
     大小端模式的选择:ENDIAN INPUT。我们实验箱为小端模式。Bank0总线宽度设置:主要还是取决于OM0和OM1,在我们实验箱的电路设计中已经固定好是1:0模式,即BANK0的总线宽度为16位。本实验箱中的SDRAM的地址范围是存在于第7个BANK中。
3. S3C44B0X存储控制器寄存器
     BWSCON寄存器:决定每个BANK的总线宽度,决定每个BANK的等待时间,以及小端和大端模式选择。
     BANKCON[5:0]寄存器:主要功能为时钟等待的选择。需要特别注意BANKCON6和BANKCON7,他们的16.15位决定了存储器类型,
     REFRESH寄存器:决定是否启动自动重刷以及重刷时钟。
     BANKSIZE寄存器:决定BANK6/7的大小。
     MRSRB寄存器:决定SDRAM的模式。
4.S3C44B0X存储控制器寄存器初始化
     其对存储器的初始化时在文件“44binit.s”文件中,这是不是就是传说中的BOOTLOADER呢?探究中?
看了看它对存储器初始化这一部分代码:

设置寄存器
#****************************************************
    #*    Set memory control registers                    *    
    #****************************************************
    ldr        r0,=SMRDATA
    ldmia   r0,{r1-r13}
    ldr        r0,=0x01c80000     /* BWSCON Address */
    stmia   r0,{r1-r13}
设置每个BANK的使用
#bank0    16bit BOOT ROM
#bank1    NandFlash(8bit)/IDE/USB/rtl8019as/LCD
#bank2    No use
#bank3    Keyboard
#bank4    No use
#bank5    No use
#bank6    16bit SDRAM
#bank7    No use

.ifeq BUSWIDTH-16
    .long 0x11110102        /* Bank0=16bit BootRom(AT29C010A*2) :0x0 */
.else
       .long 0x22222220        /* Bank0=OM[1:0], Bank1~Bank7=32bit     */
.endif
    .long ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))    /* GCS0 */
    .long ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))    /* GCS1 */
    .long ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))    /* GCS2 */
    .long ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))    /* GCS3 */
    .long ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))    /* GCS4 */
    .long ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))    /* GCS5 */
    .ifc "DRAM",BDRAMTYPE
        .long ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN))    /* GCS6 check the MT value in parameter.a */
        .long ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN))    /* GCS7                                   */
    .else
        .long ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    /* GCS6 */
        .long ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    /* GCS7 */
    .endif
    .long ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    /* REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019 */
    .long 0x10                /* SCLK power down mode, BANKSIZE 32M/32M */
    .long 0x20                /* MRSR6 CL=2clk                          */
    .long 0x20                /* MRSR7     

虽然说的那么简单,认真看看上面的汇编还是不懂它每一行是什么意思。说到了SDRAM,它就搞了我一个下午的时间,虽然有很多时候我在看其他文章,但是也学到了不少东东,看看网上转载的关于SDRAM的:

百度百科:
SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存取存储器,同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的 刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。
SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.(显卡上的DDR已经发展到DDR5)
第一代与第二代SDRAM均采用单端(Single-Ended)时钟信号,第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。
SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如pc100,pc133则表明时钟信号为100或133MHz,数据读写速率也为100或133MHz。
之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上表示其DDR代数的符号,PC-即DDR,PC2=DDR2,PC3=DDR3。如 PC2700是DDR333,其工作频率是333/2=166MHz,2700表示带宽为2.7G。
DDR的读写频率从DDR200到DDR400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1666。
很多人将SDRAM错误的理解为第一代也就是 SDR SDRAM,并且作为名词解释,皆属误导。
SDR不等于SDRAM。
Pin:模组或芯片与外部电路电路连接用的金属引脚,而模组的pin就是常说的“金手指”。
SIMM:Single In-line Memory Module,单列内存模组。内存模组就是我们常说的内存条,所谓单列是指模组电路板与主板插槽的接口只有一列引脚(虽然两侧都有金手指)。
DIMM:Double In-line Memory Module,双列内存模组。是我们常见的模组类型,所谓双列是指模组电路板与主板插槽的接口有两列引脚,模组电路板两侧的金手指对应一列引脚。
RIMM:registered DIMM,带寄存器的双线内存模块,这种内存槽只能插DDR或Rambus内存。
SO-DIMM:笔记本常用的内存模组。
工作电压:
SDR:3.3V
DDR:2.5V
DDR2:1.8V
DDR3:1.5V
SDRAM内存条的金手指通常是168线,而DDR SDRAM内存条的金手指通常是184线的。
几代产品金手指的缺口数及缺口位置也不同有效防止反插与错插,SDRAM有两个缺口,DDR只有一个缺口。

他人博客上:

SDRAM的工作原理

内容摘抄于中国科学院西安光学精密机械研究。

                                              SDRAM的工作原理

在信息处理中,特别是实时视频图像处理中,需要对视频信息进行缓存,这就必须设计大容量的存储器。同步动态随机存储器SDRAM虽然有价格优廉、容量大等 优点,但因为SDRAM控制复杂,常用的做法是设计SDRAM通用控制器。所以,很多人不得不使用价格更为昂贵的SRAM。现在有一种做法是利用FPGA控制数据存储的顺序来实现对数字视频图像的旋转,截取,平移等实时处理。SDRAM的控制原理图如下所示:



   SDRAM的结构特点:

       存储器的结构最初为线性结构,在任何时刻,地址线 只能有一位有效,也就是说,如果有N根地址线,那么可寻址的范围为0-(2N-1).当容量增大的时候,地址线的数目必然增加。利用地址译码器可以减少地 址线的数目,但是,这种存储器的长宽比太大,在工业上是无法实现的。同时,由于连线的延时和连线的长度成正比,如果这样的设计,会使,存储器的速度变得异 常缓慢。现在常用的做法是讲存储器设计成阵列。使得其长宽比接近1:1,这样,存储器就必须多设计一个列地址译码器,才能选择正确的存储单元。因此,存储 器的地址线被分成行地址线和列地址线。行地址线选择所要读取的单元所处的行,列地址线选择所要读取的单元所处的列。这样就可以确定所要读取的单元所处的真 正位置。

      SDRAM的行地址线和列地址线是分时复用的,即地址要分两次送出,先送出行地址,再送出列地址。这样,可以大幅度减少地址线的数目。提高器件的性能。 但寻址过程也会因此而变得复杂。新型SDRAM的存储容量一般比较大,如果采取简单的阵列结构,就会使存储器的字线和位线的长度、内部寄生电容和寄生电阻 都变得很大,从而使整个存储器的存取速度变慢。实际上,现在的SDRAM一般都以BANK(存储块)为组织,将存储器分成很多独立的小块。由BANK地址 线BA控制BANK间的选择,行地址线和列地址线贯穿所有的BANK,每个BANK的数据的宽度和整个存储器的宽度相同,这样,可以降低字线和位线的长 度。从而加快数据的存储速度。同时,BA还可以使未被选中的BANK工作于低功耗的模式下,从而降低器件的功耗。

      为减少器件的MOS管的数量,降低功耗,提高器件的集成度和存储容量,SDRAM是利用其内部的电容来存储数据。由于电容的放电,因此必须每隔一段时间 就对内部电容进行充电,从而确保存储在电容中的数据不丢失。这就是刷新。刷新机制,使得SDRAM的控制过程变得更加的复杂。从而给应用带来难度。

SDRAM的基本信号

      SDRAM的基本信号可以分成以下几类:

      (1)控制信号:包括片选(CS),同步时钟(CLK),时钟有效信号(CKE),写允许信号(WE),数据有效信号(DQM);

          (2) 地址选择信号:行地址选择(RAS)、列地址选择(CAS)、行/列地址线(A0-A12)、BANK地址线(BA0-BA1);

          (3) 数据信号:包括双向数据端口(DQ0-DQ15)、数据有效信号DQM等,DQM为低时,写入/读出有效;

SDRAM的基本命令

         要正确对SDRAM进行操作,就必须 输入多种命令,包括:模式寄存器设置、预充电、   突发停止及空操作等。 SDRAM的内部状态会根据下表的命令进行转移。其中,命令COM={CS#,RAS#,CAS#,WE#},也就是说,在这四条线上传输命令。



模式寄存器的规定

      模式寄存器可以通过装载模式寄存器命令进行编程,这组信息会一直保持在模式寄存器中,直到再次编程或者掉电为止。 它规定了SDRAM的操作模式,包括突发长度,突发类型,CAS延迟时间,运行模式及写突发模式。

SDRAM的初始化操作

       在上电后,必须对SDRAM进行初始化操作后,才能进行其它操作,初始化操作的步骤如下:

       (1)SDRAM上电后至少需要等待100-200us,等待时间结束后还至少要执行一条空操作命令。

      (2) SDRAM执行一条预充电命令后,要执行一条空操作命令,这两个操作会使所有的存储单元进行一次预充电,从而使所有阵列中的器件处于待机状态。

      (3) SDRAM要执行两条自刷新命令,每一条刷新命令之后,都需要执行一条空操作命令。这些操作会使SDRAM内部的刷新及计数器进入正常运行状态,以便为SDRAM模式寄存器编程做好准备。

      (4) 执行加载模式寄存器命令。上述4步完成后,SDRAM就进入正常工作状态。

SDRAM基本的读写操作

       SDRAM的读操作需要地址线和数据线配合并发出一系列的命令来完成。SDRAM的读操作只有突发模式,而写操作则有突发模式和非突发模式。具体如下:

   带预充电的突发读写模式,能够最大访问的列地址最大数目为1,2,4,8;

   不带有机充电的全页读写模式,可以任意控制一次操作的列地址的最大数。
阅读(2318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~