大家好,我根据原子大大的 STM32F7 CORE核心板 自己制作了一版PCB, 我设计了两片SDRAM,接线图如下:
SDRAM型号:与原子大大的核心板一样,W9825G6DH-6
第一个 W9825G6DH 与 第二个 W9825G6DH 的 地址线A0-A12 ,BA0-BA1,数据线D0-D15 , 时钟 SDCLK, NBL0 NBL1 , SDNWE, SDNCAS, SDNRAS, 全部共用。
第一个 W9825G6DH 与 第二个 W9825G6DH 的 SDNE 与 SDCKE 分别独立连接 (第一个SDRAM 用 SDNE0 SDCKE0,第二个SDRAM 用 SDNE1 SDCKE1), NE0 和NE1 分别独立连接上拉电阻10K
然后,上板子开始调试 :
首先单独测试 BANK5 SDRAM (也就是 SDNE0 SDCKE0 的SDRAM),跑108MHZ 没压力,也用RGB屏测试了。
然后,我在 SDRAM寄存器版本测试例程中,模仿 原子大大的写法,在SDRAM_INIT 初始化中,加入对 BANK6的初始化,如下:
在sdram.H 中加入 #define Bank6_SDRAM_ADDR ((u32)(0XD0000000))
在sdram.C中 加入
//使能H 管脚,定义 H6 H7,(也就是 SDNE1 SDCKE1)
RCC->AHB1ENR|=1<<7;
GPIO_Set(GPIOH,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);
GPIO_AF_Set(GPIOH,6,12);
GPIO_AF_Set(GPIOH,7,12);
// 因为两个SDRAM是同一型号,则设置相同参数
FMC_Bank5_6->SDCR[1]=sdctrlreg;
FMC_Bank5_6->SDTR[1]=sdtimereg;
// CMD指令,设置BANK5的同时也设置BANK6
SDRAM_Send_Cmd(0,1,0,0);
SDRAM_Send_Cmd(1,1,0,0);
delay_us(500);
SDRAM_Send_Cmd(0,2,0,0);
SDRAM_Send_Cmd(1,2,0,0);
SDRAM_Send_Cmd(0,3,8,0);
SDRAM_Send_Cmd(1,3,8,0);
mregval|=3<<0;
mregval|=0<<3;
mregval|=3<<4;
mregval|=0<<7;
mregval|=1<<9;
SDRAM_Send_Cmd(0,4,0,mregval);
SDRAM_Send_Cmd(1,4,0,mregval);
FMC_Bank5_6->SDRTR=824<<1;
至此, SDRAM初始化完成。
然后,我再主程序中用FOR循环 验证数据,发现,*(vu8*)(Bank5_SDRAM_ADDR+i) BANK5 的SDRAM工作没问题,怎么测试都对(所有地址都进行读写测试了)。 但是 *(vu8*)(Bank6_SDRAM_ADDR+i) 却是错误,怎么弄也不对。
请问大家,同时挂载两个SDRAM的话,我这样的初始化是不是有问题呢?
谢谢大家!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
嗯 我也准备放弃。整了很长时间了。目前我看了很多论坛,都没有看到使用2片SDRAM的先例,都有点怀疑第2片可能没有实际被应用过了^_^ 我的第2片做了等长处理也没有效果。看来只有把这个片子作为低端产品用用了,否则浪费了,唉。
嗯嗯,确实官方也没有给出例子,不好参考。
能看看你的4块电路图吗?
一周热门 更多>