查看完整版本: 怎样控制sdram的存取呀?

liyf 发表于 2014-10-5 14:06:11

怎样控制sdram的存取呀?

怎样控制sdram的存取呀?

因为贪图大容量,我要把数据存放在SDRAM里面,但我不知道用什么东西来控制好,单片机的地址线只有16位,而要控制的SDRAM应该都是24位或32位,怎么做呀?用串口转换行不行?请各位大虾指点一下。另外16m~64m的SDRAM芯片有哪些型号?

1、控制SDRAM的地址不需要24位,它是行地址,列地址分开的,一般只需12位~16位。

2、一般是外接一片CPLD作SDRAM控制器。sdram的控制用hdl写的话就是状态机,sdram有7个状态转移,网上有很多例子

3、我认为可以使用多i/o的高速单片机直接控制,如C8051F020,甚至可以直接控制普通内存条。www.elpida.com上有一篇“How to use SDRAM”,介绍得比较详细。
单片机控制sdram占用大量的资源,就算你控制了sdram,你还能干什么?
外接几片373即可解决占用I/O口多的问题;平时不存取sdram的时候可以
让它工作在自刷新状态,不影响你干其他事情;占不了多少代码空间,成
本也低,只是MCU的速度得快一点。


使用经验:

为什么对SDRAM控制时要Precharge(预冲),我现在正在用FPGA写SDRAM接口,但不明白为什么读完,写完后要“预冲”?至于读之前应该是可以理解的!我希望了解在何处需要Precharge(预冲),否则不采用Brust方式会很慢的,

我看了SDRAM的资料,好像说读之前必须把“字线”置1,就当它是预冲吧,只是我看到的SDRAM的DATASHEET中,好像读完,写完后一般也预冲的,我就不太明白了,本来吧,我加一条Precharge指令是没问题的,但是预冲完后必须保持一段时间才能继续“读写”。由于其他技术的要求,我用Burst方式又不太方便

precharge好象是把SDRAM从ACTIVE状态转换到IDLE状态,具体为什么偶也不知道,不过按我的理解,如果对同一行(不同列)操作,可以直接读写不必PRECHARGE。但是如果读写完后需要对其进行刷新,则一定要对其PRECHARGE方可施加刷新指令。

根据datasheet一般每64ms需要对某行刷新(或访问)一次,所以如果SDRAM行数比较多的话最好加入刷新指令,不过我试过几百ms刷新一次(或不刷新)也没有遇到什么问题。

近来Altera公司的SDRAM控制器IP已经开放,可到他们网上获得,其中有一种为双速的看来更适合大家,它获得数据一种速度,输出数据为另一种速度,可用于如高速的A/D和低速的单片机缓冲。

李小路 发表于 2021-7-11 20:25:30

谢谢分享!:D
页: [1]
查看完整版本: 怎样控制sdram的存取呀?