周工,你好。请教你LPC2103外扩SPI Flash的问题。SPI Flash的型号是AT25FS040,电路接法如下图。<br />我的问题有:1、我把LPC2103设置成主机,不用P0.7/SSEL0可以吗?<br />2、我发送命令给Flash后,Flash会有1个byte返回,如果我要接收返回的数据是不是还要向S0SPDR写数据啊?按照说明书上说的,只有向S0SPDR写数据,才有SCK。<br />3、CPOL = 0 SCK为高有效,是不是说下降沿有效啊?<br />4、不知道哪里出问题了,读不回来数据。我用示波器看了,发送的时候有波形。<br />部分程序如下:<br />//初始化SPIFlash<br />void SPIFlashInit(void)<br />{<br /> PINSEL0 |= 0x00001500; //P0.4 P0.5 P0.6 连接到第二功能<br /> IODIR |= pWP | pHold; //WP HOLD 输出<br /> IOSET |= pWP | pHold; //WP HOLD 输出为高电平<br /> S0SPCCR |= 0x52; <br /> S0SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样<br /> (0 << 4) | // CPOL = 0, SCK 为低有效<br /> (1 << 5) | // MSTR = 1, SPI 处于主模式<br /> (0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先<br /> (0 << 7); // SPIE = 0, SPI 中断被禁止 <br />}<br />//写使能<br />uint8 WRStaRegister(uint8 WRData)<br />{<br /> S0SPDR = WRData;<br /> while(0 == (S0SPSR & 0x80));// 等待SPIF置位,即等待数据发送完毕 <br /> return(S0SPDR);<br />}<br />//读FLash的寄存器<br />void RDStaRegister(void)<br />{ <br /> S0SPDR = 0x05;<br /> while(0 == (S0SPSR & 0x80));// 等待SPIF置位,即等待数据发送完毕<br /> RSPIData = S0SPDR;<br /> }<br />//主函数<br />void main(void)<br />{ PLL_Init();<br /> SPIFlashInit();<br /> WRStaRegister(0x06);<br /> RDStaRegister();<br /><br />}<br /><br />谢谢了,麻烦你帮我看一下。 |
|