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