问题比较长,占用您宝贵的时间,深表感谢。
我画了一个ARM最小系统的PCB板子,用于航天空间纠错编码译码的硬件实现的平台, 板子上有ARM(samsung 3c44b0x),SDRAM(hy57v641620),FLASH(sst39vf160) 还有SRAM(cy7c1041cv33-10,4-Mbit (256K x 16) ). 最快存储时间为10ns.
FLASH 接到bank0,片选为nGCS0, SDRAM 接到ARM的 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的信号不正常呢?
我觉得我的硬件原理图应该没有错误, 我怀疑是初始化程序代码设置错误, 我不知道错在哪儿? 企盼答复,谢谢。

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

