Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263285
  • 博文数量: 69
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-07 16:35
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(68)

我的朋友

分类: LINUX

2010-09-03 22:34:12

在系统中主要用作程序的运行空间,数据及堆栈区。当系统启动时,处理器首先从复位地址起始处开始读取启动代码,在完成系统的初始化后,程序代码一般应调入SDRAM中运行,以提高系统的运行速度,同时,系统堆栈、用户堆栈以及运行数据也都放在SDRAM中。
1  SDRAM原理分析
本节先介绍了SDRAM的基本原理,然后介绍了一个具体SDRAM芯片HY57V641620HG的特性和引脚描述。
1.1  SDRAM介绍
DRAM是动态存储器Dynamic RAM的缩写,SDRAM是Synchronous DRAM的缩写,中文就是同步动态存储器的意思。从技术角度上讲,同步动态存储器(SDRAM)是在现有的标准动态存储器中加入同步控制逻辑(一个状态机),利用一个单一的系统时钟同步所有的地址数据和控制信号。使用SDRAM不但能提高系统表现,还能简化设计、提供高速的数据传输。在功能上,它类似常规的DRAM,且也需时钟进行刷新。可以说,SDRAM是一种改善了结构的增强型DRAM。SDRAM 的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电)。由此可见,要在系统中使用SDRAM,就要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路。SDRAM是多个Bank结构的,一般是一个Bank正在使用,其他Bank处于预充电状态,这样轮流读写和充电就不需要等待了,大大提高了存储器的访问速度。但是要实现这个功能,还必须增加对多个Bank的管理模块,控制Bank来进行预充电,所以在在多个Bank的SDRAM中,会有多根Bank的选择引脚。
1.2  HY57V641620HG的结构
HY57V641620HG是一个8MB的CMOS同步DRAM,尤其适合大容量存储和高带宽的存储场合。HY57V641620HG分为4个Bank,每个Bank大小为2MB。它所有的输入和输出是和时钟输入上升沿同步的,且电平与LVTTL相兼容。内部数据通道提高了带宽。特性如下:
l         单电源供电,电压3.0V~3.6V
l         54引脚TSOP II封装
l         所有引脚与LVTTL接口兼容
l         所有输入输出参考系统时钟
l         具有UDQM或LDQM数据屏蔽功能
l         可编程脉冲宽度和脉冲类型
l         可编程CAS#反应时间
l         自动刷新和自我刷新功能
l         64ms 内4096个自动刷新周期
 

1  引脚分配图
引脚描述如表所示。
表                            RAM引脚描述
引脚
 引脚名
 描述
 
CLK
 时钟
 系统时钟输入
 
CKE
 时钟使能
 内部时钟控制信号
 
CS#
 片选
 禁止/使能除CLK、CKE和DQM的所有输入
 
BA0、BA1
 Bank地址
 选择某个Bank,00~11分别对应Bank0~Bank1
 
RAS#
 行地址选择
 RAS#为行地址选择,当为低电平时行地址单元
使能
 
CAS#
 列地址选择
 CAS#为行地址选择,当为低电平时行地址单元使能
 
WE#
 写使能
 WE#为低时,允许写操作
 
LDQM/UDQM
 数据输入/输出屏蔽
 
 
DQ0~DQ15
 数据输入/输出
 输入和输出数据
 
VDD/VSS
 电源/地
 内部电路和输入缓冲电源供电
 
VDDQ/VSSQ
 数据输出电源/地
 输出缓冲电源供电
 
NC
 未连接
 不使用,悬空即可
 
2  接口电路与程序设计
本节讲述了HY57V641620HG SDRAM与S3C44B0X的电路连接方式和S3C44B0X上存储器控制器寄存器的设置,对于SDRAM的读写操作只需一对读写宏就能完成,最后由在一个Main函数中测试了读写操作宏的正确性。
2.1  电路连接
要在系统中使用SDRAM,要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路。S3C44B0X及其他一些ARM芯片在片内具有独立的SDRAM刷新控制逻辑,可方便地与SDRAM相连接。
SDRAM连接电路图如2所示,它接在Bank6上。HY57V641620HG分成4个Bank;每个Bank的容量为1M×16位。Bank的地址由BA1和BA0决定,00对应Bank0、01对应Bankl、10对应Bank2、 11对应Bank3。在每个Bank中,分别用行地址脉冲选通RAS和列地址脉冲选通CAS进行寻址。HY57V641620HG的行地址取地址线A0~A11位,即RA0~RA11;列地址取地址线低8位,即CA0~CA7。SDRAM由S3C44B0X专用SDRAM片选信号nSCS0/nGCS6选通,地址空间为0x0C000000~0x0C7FFFFF。
 
 

2  SDRAM连接电路图
2.2  硬件和寄存器设置
由于HY57V641620HG接在Bank6上,首先应当设置BWCON寄存器的第27位~第24位,即ST6、WS6和DW6。ST6决定Bank6上的SRAM是否采用UB/LB,默认为不采用,本实例默认即可,WS6决定Bank6的等待是否使能,默认为禁止等待,本实例也默认即可。DW6时决定Bank6的数据总线宽度。根据HY57V641620HG,本实例将其配置为16位的数据总线宽度,即DW6 = 01。
BANKCON寄存器中的MT位在第四章已经介绍过,将其配置为SDRAM,即MT = 11。Trcd位设置为00,即RAS#信号到CAS#信号的延迟时间为2个时间周期。SCAN位根据HY57V641620HG芯片需设置为8位列地址线。这里还要根据处理器主频来计算刷新计数器REFRESH[10:0]位。计算公式见第四章表4-8。
BANKSIZE寄存器中的SCLKEN位可以取默认值0,也可以为1,在这取1,即减少功耗。BK76MAP位取默认值000刚好满足要求,即32MB/32MB。各寄存器参数设置如下:
;BANKCON6寄存器参数
B6_MT          EQU       0x3         ;SDRAM
B6_Trcd         EQU       0x0         ;2个时钟周期
B6_SCAN       EQU       0x0         ;8bit
;REFRESH寄存器参数
REFEN          EQU       0x1         ;刷新使能
TREFMD       EQU       0x0         ;CBR/自动刷新
Trp                EQU       0x0         ;2个时钟周期
Trc                EQU       0x1         ;5个时钟周期
Tchr                     EQU       0x2         ;3个时钟周期
;REFCNT = 2048 + 1 - MCLK(MHz) * 16
REFCNT               EQU       1049       ;刷新周期为16us, MCLK=64MHz 根据系统时钟计算
           ;SDRAM的刷新数率
;BANKSIZE寄存器参数
SCLKEN        EQU       0x1         ;减少功耗
BK67MAP      EQU       0x000     ;Bank6和Bank7映射关系为32MB/32MB
;MRSR寄存器参数
B6_WBL        EQU       0x0     ;写脉冲长度为0
B6_TM          EQU       0x00       ;模式寄存器设置
B6_CL           EQU       0x010     ;CAS#延迟时间为2个时间周期
B6_BT           EQU       0x0         ;序列脉冲
B6_BL            EQU       0x0         ;脉冲长度为1
2.3  程序的编写
ARM处理器能自动产生刷新、读写SDRAM的时序,所以本程序比较简单,只要将字符“a”写入0x0cf00000起始的10个地址空间的RAM中,再读取出来校验即可。注意0x0c000000为SDRAM的起始地址,为保护靠近0x0c000000的运行的程序,实例进行读写的空间要取大一些,这里取0x0cf00000。程序主体如下:
#define  WriteSdram(address,data)     *((volatile U8 *)(address))=(U8)data   //写SDRAM宏
#define  ReadSdram(address)             *((volatile U8 *)(address))                   //读SDRAM宏
void Main(void)
{
       ……
       UartPrintf("\n输入回车开始SDRAM读写操作");
       if(UartGetch()=='\r')
       {
              UartPrintf("\n正在SDRAM写操作…");
              j=0x0cf00000;
              for(i=0;i<10;i++)                       //从0x0cf00000开始,写入10个‘a’
              {
                  WriteSdram(j,'a');
                  j++;
             }
              j=0x0cf00000;
          UartPrintf("\n写操作完毕,正在SDRAM读操作…");
              for(i=0;i<10;i++)
              {
                     ReadData = ReadSdram(j);    //从0x0cf00000开始,读取10个‘a’
                     UartPrintf("\n地址%8x处读取的数据是%c", j, ReadData);
                     j++;
           }
           UartPrintf("\n操作完毕!");
       }
}
2.4 程序运行结果
3  小结
介绍HY57V641620HG SRAM的操作,不像对Flash Rom操作,还需要写入命令字,对RAM的读写操作比较简单,只要在相应的地址进行普通读写就行。使用SDRAM不但能提高系统表现,还能简化设计、提供高速的数据传输。嵌入式一般需要或大或小的RAM空间来保证程序的运行需要。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hyalbert8084/archive/2007/09/05/1773365.aspx
阅读(2058) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-07 08:49:46

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com