ARM开发步步深入之SDRAM编程示例
实验目的:改变“点灯大法”的执行地点,从NandFlash的Steppingstone转到SDRAM中执行,借此掌握存储控制器的使用。
实 验环境及说明:恒颐S3C2410开发板H2410。H2410核心板扩展有64MB的SDRAM,用于设置程序堆栈和存放各种变量。SDRAM选用了两 片三星公司的K4S561632(4M*16bit*4BANK),两片拼成32位数据宽度的SDRAM存储系统,并映射到S3C2410的 SROM/SDRAM的BANK6,地址范围是0x30000000~0x33FFFFFF。
实 验思路:开发板上电启动后,自动将NandFlash开始的4K数据复制到SRAM中,然后跳转到0地址开始执行,然后初始化存储控制器,把程序本身从 SRAM中复制到SDRAM中,最后跳转到SDRAM中运行。故问题的关键是SDRAM的初始化,根据S3C2410的Datasheet,要使用 SDRAM,就需配置存储控制器的13个寄存器。
知识掌握:SDRAM和13个存储控制器的寄存器。
一、SDRAM:
CPU 提供了一组用于SDRAM的信号:SDRAM时钟有效信号SCKE;SDRAM时钟信号SCLK0/SCLK1;数据掩码信号DQM0/DQM1 /DQM2/DQM3;SDRAM片选信号nGCS0(与nGCS6是同一引脚的两个功能);SDRAM行地址选通脉冲信号nSRAS;SDRAM列地址 选通脉冲信号nSCAS;写允许信号nWE(不是SDRAM专用的);
★SDRAM结构:SDRAM的内部是一个存储阵列,检索时先指定一个行,再指定一个列,就可以准确地找到所需要的单元格,这就是SDRAM寻址的基本原理;单元格被称为存储单元,表格就是逻辑BANK,SDRAM一般含有4个逻辑BANK。
★SDRAM 的访问:SDRAM片选信号nGCS0有效;逻辑BANK选择;对选中的芯片进行统一的行/列寻址;CPU会从32位的地址中自动分出 逻辑BANK选择信号、行地址信号、列地址信号,然后先后发出行地址信号、列地址信号,逻辑BANK选择信号在发出行地址信号的同时发出,并维持到列地址 信号结束;找到了存储单元后,被选中的芯片就要进行统一的数据传输了。
二、存储控制器的寄存器:
★BWSCON(Bus width & wait status control register,总线位宽和等待状态控制寄存器):此寄存器用于配置BANK0~BANK7的位宽和状态控制,每个BANK用4位来配置,分别是:
● ST(启动/禁止SDRAM的数据掩码引脚。对于SDRAM,此位置0;对于SRAM,此位置1)
● WS(是否使用存储器的WAIT信号,通常置0为不使用)
● DW(两位,设置位宽。此板子的SDRAM是32位,故将DW6设为10)
特 殊的是bit[2:1],即DW0,设置BANK0的位宽,由板上的跳线决定,只读的。其实只需将BANK6对应的4位设为0010即可,在此处 BWSCON先设置为0x02000000。SDRAM接BANK6对应的[27:24]位,同时注意BANK0比较特殊,如下图所示:
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_39515ea9d909f2c.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_39515ea9d909f2c.jpg');" border="0" width="700">
'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_03cf877c1a65f25.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_03cf877c1a65f25.jpg');" border="0" width="700">
★BANKCON0~BANKCON7: 用来分别配置8个BANK的时序等参数。SDRAM是映射到BANK6和BANK7上的(内存只能映射到这两个BANK,具体映射多大的空间,可用 BANKSIZE寄存器设置),所以只需参照SDRAM芯片的Datasheet配置好BANK6和BANK7,BANKCON0~BANKCON5使用 默认值0x00000700即可。对于BANKCON6和BANKCON7中的各个位的描述:
●MT(bit[16:15]):设置本BANK映射的物理内存是SRAM还是SDRAM,后面的低位就根据此MT的选择而分开设置。本板子应置0b11,所以只需要再设置下面两个参数
●Trcd(bit[3:2]):RAS to CAS delay(00=2 clocks,01=3 clocks,10=4 clocks),推2410手册上的荐值是0b01。我们PC的BIOS里也可以调节的,应该玩过吧。
●SCAN(bit[1:0]):Column address number(0
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)