首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

问个内存电路接口以及访问有关问题

2012-02-26 
问个内存电路接口以及访问问题昨天看了一下电路图,发现内存(SDRAM)和2440接口有点不可思议,后来仔细对比。

问个内存电路接口以及访问问题
昨天看了一下电路图,发现内存(SDRAM)和2440接口有点不可思议,后来仔细对比。
发现问题在LDQM,UDQM这两个引脚,他们接到2440的四个nWBE引脚。内存资料是这么说的:Data Input/Output Mask Controls output buffers in read mode and masks input data in write mode 一些中文文档是这么说的:在读模式下控制输出缓冲;在写模式下屏蔽输入数据。按照这种接法(2片内存都是错位2位,并且时钟分开)我觉得内存是分开高16位和低16位分别访问的(以前有人使用同一个时钟驱动导致失败就证明了这点),但是让我纳闷的是2440是怎么控制四个nWBE引脚来完成任务的?并且,我看访问内存的时候都是直接访问32位地址的。真的迷茫了,不知道2440是如何实现的。请高手指点一下。谢谢。

下图是内存连接图,关键部分我都大了红圈。
http://p.blog.csdn.net/images/p_blog_csdn_net/gooogleman/EntryImages/20081113/2-32M SDRAM.jpg



[解决办法]
实际上,它把两片 16 位的内存组合成 32 位来用了,这两片内存都接在了控制芯片同一个 BANK 地址上,利用 地址线 数据线 SCLK LDQM UDQM 这 3 个引脚来控制 32 位数据的读写。
[解决办法]
访问控制信号:为了实现ARM存储器访问指令LDR/STR字节、半字和字访问的三种方式,在S3C2440的存储器组中,除了Bank0以外的所有地址空间都可以通过编程设置为8位、16位或32位对准访问,Bank0可以设置为16位或32位。引脚nWBE[3:0](写字节使能)实现8bit ROM芯片组的三种访问方式,或者SRAM不使用UB/LB(在BWSCON中设置)的情况下,与UB/LB连接。引脚nBE[3:0](在使用SRAM情况下的字节允许信号)在SRAM使用UB/LB(是否使用可在BWSCON中设置)的情况下与UB/LB连接。DQM[3:0](SDRAM数据屏蔽信号)引脚实现对SDRAM的三种访问。还有nWAIT、nXBREQ/nXBACK引脚。
[解决办法]
这个一点也不复杂。
内存的这种接法,使它可以以8位访问,也可以16位访问,也可以32位访问
那4个信号nWBE3~0,正是字节选通控制。

按8位访问,也就是代码中若有:
 *(unsigned char *) 0x30000000 = 0x78;
就是一个字节写,这时只有nBWE0信号有效

如果是0x30000001,则只有nBWE1有效(低),其它无效(高)。

再举个例,如果是按16位访问呢?
如果是16位访问,代码一般就是:
*(unsigned short *)0x30000000 = 0x1978;
这是一个16位写。但此时要注意,最低位必须是0,而不能是1,比如地址0x30000001就会使CPU异常,因为必须16位对齐!
dat16 = *(unsigned short *)0x30000002;
这是一个16位读

在16位访问时,0x30000000地址写操作中,nWBE1, 0 = 低,nWBE3, 2 = 高。当0x30000002时,则是nWBE3,2为低,nWBE1,0为高(无效)

32位时则是4字节对齐,也就是最低的两个地址位A1,A0必须为0,即对于32位访问,0x30000001, 0x30000002, 0x30000003都会导致异常(出错)

对于32位访问,0x30000000的下一个地址是0x30000004,因为这个地址是字节地址,但一下子就访问了0x30000000~0x30000003四个字节,也就是nWBE3~0四个信号一起反应!!!


不同的CPU访问的机制是不一样的,这要具体看手册了,是分开片选的
[解决办法]
只能按8位的整倍数访问,如果不是的话,就会出错。因为sdram 的存储是以8位为单位的(物理的)
而总线是32位所以 错开两位 左移2位 

至于两块sdram 的并联,我的理解如下

c U1 U2
0 0123456701234567 0123456701234567
1 0123456701234567 0123456701234567
2 0123456701234567 0123456701234567
3 0123456701234567 0123456701234567

两个16位的拼成一个32位的

cpu读 0那行的时候,通过nBWEx 控制UDQM, LDQM选择高低 半字 ,然后传数据到数据线上

虽然地址线共享,但数据线没有共享,所以我猜 他是同时的,只是通过nBWEx的控制对高低 半字分开读取,再传到相应的数据线上。


分时(或同时,具体也不清楚,只是个人猜测)



不知道大家能否看懂我的意思,表达力太差劲了

热点排行