打印

LPC2368读SPI FLASH芯片W25X40的问题

[复制链接]
3280|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heng1386|  楼主 | 2012-6-5 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LPC2368读SPI FLASH芯片W25X40的状态寄存器的时候,LPC2368 SPI读到的数据都为0XFF,用示波器可以看到W25X40的管脚SCK、MOSI、CS上都有波形,但是W25X40的MISO脚却没有波形;读ID也不行,SPI读到的数据也为0XFF。请教各位为什么会这样,我也换过了W25X40 这个芯片,也不行。
W25X40的WP和HOLD都是经一个电阻上拉到3.3V。

下面的是LPC2368 SPI的初始化和发送数据程序;

DWORD SPIInit( void )
{
   unsigned int tt=0;
  PCONP |= (1 << 8); /* by default, it's enabled already, for safety reason */
  S0SPCR = 0x00;
  /* Port 0.15 SPI SCK, port0.16 uses GPIO SPI_SEL,
  port0.17 MISO, port0.18 MOSI */
  PINSEL0 |= 0xC0000000;
  PINSEL1 |= 0x0000003C;

   GPIOSetDir(0,16,1);   GPIOSetValue(0,16,1);

S0SPCR  = (1 << 5) |  // 设置为主机模式     //
      (0 << 2) |  // 每帧数据为8位     //
    (0 << 7) |       // 中断被禁能         //
    (0 << 6) |   // 高位在前
    (0 << 3) |   // 第二个时钟沿采样//
    (0 << 4);    // 时钟高有效         //

  tt = S0SPSR;
   __nop();
  return( TRUE );
}
unsigned int  SPISend1( unsigned int dat )
{
   unsigned int state=0;
  BYTE Dummy=0;
  state  = S0SPSR;
   __nop();
  GPIOSetValue(0,16,0); //CS
   __nop();  __nop();
  S0SPDR = dat;
    while ((S0SPSR & 0x80) == 0);
__nop();
     GPIOSetValue(0,16,1);  //CS
  __nop();  __nop();
Dummy = S0SPDR;  // Flush the RxFIFO //
   __nop();

return Dummy;
}

相关帖子

沙发
heng1386|  楼主 | 2012-6-6 21:59 | 只看该作者
本帖最后由 heng1386 于 2012-6-6 22:01 编辑

搞定了,原来是不能在SPI发送函数进行W25X40的芯片片选动作,因为有还没有完全完成传输就取消片选了。
不过不知为什么用90h命令读出的MANUFACTURER ID( M7-M0) 为0x12, 而不是 0xEF;9Fh 命令读出来的是0x001212,手册上的指出应该是0xEF3013。 三个读ID的命令中只有ABh命令读出来的Device ID (ID7-ID0)是对的,其它2个命令读出来的数据不正确。不知为什么,

使用特权

评论回复
板凳
单车骑士| | 2012-8-6 10:07 | 只看该作者
我把片选一直置0,读出来的数据还是0xff

使用特权

评论回复
地板
cherished| | 2012-12-14 16:15 | 只看该作者
楼主,我的W25X40是接5V单片机,中间接的限流电阻
不知道你怎么接线的?
请假

使用特权

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

本版积分规则

4

主题

125

帖子

2

粉丝