采用的SRAM是 BSI的 62LV1600EIP70
硬件连接
A0-A20 = FSMC_A0-FSMC_A20
D0-D7 = FSMC_D0-D7 由于是8bit的sram 所以 FSMC_D8- D15没有连接
CE1(低有效) == FSMC_NCE3 (bank1_S3)
CE2(高有效) 悬空
OE= FSMC_OE
WE=FSMC_WE
_________________________________________________
程序修改自原子的 寄存器 外界SRAM例程 主要是修改了8位模式 后来出问题又把 数据保持时间之类的改大了(现象无变化)
main程序如下(或见附件)
。。。。。各种初始化
while(1)
{
delay_ms(1000);
for (i=0;i<10;i++) //地址0-10 写0x80
{
fsmc_sram_test_write(i,0x80);
}
fsmc_sram_test_write(6000,0xf6); //地址6000 写0xf6
for (i=0;i<30;i++) //把前30个地址的数据 从串口发出来
{
send_232(fsmc_sram_test_read(i));
}
}
程序运行后 串口出来的数据是
F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6
经过试验 无论你怎么写 或者 读那个地址的数 读出来的数据肯定是你最后一个写入的数据。看FSMC_A0-A20 地址数据是会变化的
后来又做了个试验 上述程序修改为
while(1)
{
delay_ms(1000);
for (i=0;i<30;i++) //把前30个地址的数据 从串口发出来
{
send_232(fsmc_sram_test_read(i));
}
}
//读出来全部是 0xff 但是我用示波器看 FSMC的D0--D7 是全低的 OE有脉冲 CE有脉冲
——————————————————————————
再来
while(1)
{
for (i=0;i<10;i++) //地址0-10 写0x80
{
fsmc_sram_test_write(i,0xAA);
}
}
用示波器看 FSMC_D0-D7输出数据正常
——————————————————————————————————
疑问:
是读出问题? 读出来FF 用示波器看引脚却全部都是低 没有数据出来???
写不进 读不出??
用示波器看连续写的地址情况 例如写地址 0xffff
地址线会长期高。。。。
如果读地址0xffff 发现地址线是 低 然后突然高一下 很快又是低.....然后又高一下 这样 。不像写那样长期高 不知道正常不
已更换过芯片 不是芯片质量问题。
求高手帮我看看 无限感谢!
|