打印
[ZLG-ARM]

请教LPC2103外扩SPI Flash的问题

[复制链接]
1592|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mullife|  楼主 | 2007-9-13 12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周工,你好。请教你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();

}

谢谢了,麻烦你帮我看一下。

相关帖子

沙发
mullife|  楼主 | 2007-9-13 14:03 | 只看该作者

第一个问题我已经能够知道答案了。

使用特权

评论回复
板凳
mullife|  楼主 | 2007-9-14 12:14 | 只看该作者

我已经知道答案了。

我知道问题问的很白。

难道真的一个人都不知道吗??

使用特权

评论回复
地板
wangshujun| | 2007-9-14 21:30 | 只看该作者

读数据时随便写就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

20

帖子

0

粉丝