问题比较长,占用您宝贵的时间,深表感谢。
我画了一个ARM最小系统的PCB板子,用于航天空间纠错编码译码的硬件实现的平台, 板子上有ARM(samsung 3c44b0x),SDRAM(hy57v641620),FLASH(sst39vf160) 还有SRAM(cy7c1041cv33-10,4-Mbit (256K x 16) ). 最快存储时间为10ns.
FLASH 接到3c44b0x 的memory bank0,片选为nGCS0, SDRAM 接到3c44b0x的memory bank6,片选为nGCS6, SRAM 接到bank5,片选为nGCS5,地址范围为:0x0a000000-0x0c000000 由于SRAM的数据位有16bit,故ARM的地址线A1接SRAM的地址线A0, SRAM包括如下信号: nCS(片选),nWE(写使能),nOE(读使能),nBE1(高字节有效),nBE0(低字节有效),address(17 downto 0),data(15 downto 0).均与ARM的相应信号连接。
可以通过JTAG,将Bootloader下载到FLASH,然后通过PC机超级终端来控制ARM, 可以通过串口下载应用程序到SDRAM的地址0x0c008000运行,也能通过网卡下载ucLinux到SDRAM运行。 通过 SDT2.51,编写程序(修改的网站上下载的源代码)设定MCLK为40Mhz, 即一个时钟周期为25ns
现在的问题是,我不能对SRAM进行正确的读写。 在SDT2.51的应用程序中,对于寄存器bankcon5的设置如下: Bank 5 parameter B5_Tacs EQU 0x3 ;4clk B5_Tcos EQU 0x3 ;4clk B5_Tacc EQU 0x7 ;14clk B5_Tcoh EQU 0x3 ;4clk B5_Tah EQU 0x3 ;4clk B5_Tacp EQU 0x3 ;6clk B5_PMC EQU 0x0 ;normal(1data) 对于寄存器BWSCON(Bus Width & Wait Status Control) 设置为:0x11911110. 将寄存器PCONB的对应nGCS5设置为函数功能口,而不是GPIO口。 (请问:对SRAM的所有操作,只需要设置这三项吗?)
在ARM的应用程序中,定义一个16位的指针, Unsigned short * P = (Unsigned short *)0x0a000200 ; 这个指针指向的地址初始化为0x0a000200,地址范围位于bank 5,对该地址的读写也就是对SRAM的读写。 指令:* P = 0xF0F0; //将对该地址执行一次写操作, 指令:Unsigned short L; L = * P; //将对该地址执行一次读操作,
由于在初始化时,将Tacc(Access cycle)的时间设置为14个clk,也就是350 ns, 这样在SRAM写周期时候,nWE和nBE1,nBE0为低电平有效的时间也大致为Tacc,即350 ns, 通过示波器,能看到读写时候nGCS5,读的时候nOE信号均正常。
但是,我却看到nWE只是一个很窄的负脉冲,只有几十ns,这个负脉冲不是方波,有点像三角波, 所以,数据无法写入到SRAM中。
为什么nWE的信号不正常呢?
我觉得我的硬件原理图应该没有错误, 我怀疑是初始化程序代码设置错误, 我不知道错在哪儿? 企盼答复,谢谢。
我的邮箱:guoj02@mails.tsinghua.edu.cn