005_mini2440裸机读写sdram

6 篇文章 0 订阅
6 篇文章 0 订阅

1、查看sdram原理图

由上图我们看出使用了两片16位数据宽度sdram芯片构成了一个32位数据宽度,读写数据都是以32位来操作。从上图中我们还可以恶获取到sdram的片选信号nSCS连接在nGCS6,即对应着bank 6。

2、sdram寄存器配置

1)BUS WIDTH & WAIT CONTROL REGISTER (BWSCON)

该寄存器用于配置内存的位宽,和是否使能wait信号。此处我们的sdram是挂载在bank 6下面的,故只需要配置ST6、WS6、DW6即可,其它位保持默认为0。

2)BANK CONTROL REGISTER (BANKCONn: nGCS6-nGCS7)

该寄存器配置我们在bank 6下外挂的存储器的类型,我们此处使用的是SDRAM故配置MT为11,再根据SDRAM数据手册配置Trcd和SCAN。此处我配置Trcd=01,SCAN=01。

3)REFRESH CONTROL REGISTER

配置刷新控制寄存器REFEN=1使能自动刷新,TREFMD=0设置自动刷新,Trp=00配置为两个时钟,Tsrc=00配置为四个时钟,Refresh Counter=1269。

4)BANKSIZE REGISTER

配置BURST_EN=1,SCKE_EN=1,SCLK_EN=1,BK76MAP=001。

5)SDRAM MODE REGISTER SET REGISTER (MRSR)

配置CL=010。

3、sdram初始化

void sdram_init(void)
{
	BWSCON   = 0x02000000;	//配置bank6外接SDRAM的数据位宽为32位
	BANKCON6 = 0x00018005;  //配置RAS# to CAS# delay为3个时钟
	REFRESH  = 0x009004f5;  //配置SDRAM为自动刷新并设置自动刷新计数器
	BANKSIZE = 0x000000b1;  //配置SDRAM的突发模式和掉电模式
	MRSRB6   = 0x00000020;  //配置SDRAM输出数据延迟两个时钟
}

3、sdram读写测试

int sdram_test(void)
{
	volatile unsigned char *p = (volatile unsigned char *)0x30000000;
	
	int i;

	// write sdram
	for (i = 0; i < 1000; i++)
		p[i] = 0x25;

	// read sdram
	for (i = 0; i < 1000; i++)
		if (p[i] != 0x25)
			return -1;

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Da Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值