来看看我写的M25P40 的程序有什么问题么? 就是读不到FLASH 的ID ,郁闷死了

dongyun197   2007-11-2 14:22 楼主
我的程序是在LPC2146 上的弄的, 通过示波器也看了,MOSI出的命令,时序,片选都没问题,就是 MISO不回东西来,
发程序上来帮看看哪里出了问题

#define   m25p40_CS       (1 << 25)      // P1.25口为 m25p40 的片选
#define RDID        0x9f


void  MSPI_Init(void)
{  
    PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ;
       S0SPCCR = 0x52;                    // 设置SPI时钟分频
     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  MSPI_SendData(uint8 data)
{      
    S0SPDR = data;
    while( 0 == (S0SPSR & 0x80));        // 等待SPIF置位,即等待数据发送完毕
    return(S0SPDR);
}

uint8 CMD_RDID(void)
{
    volatile uint8 i;
    uint16 j;
    for (j=0;j<50000;j++);  
    IO1CLR = m25p40_CS;                    // 片选m25p40
   
    i = MSPI_SendData(RDID);
   
    ID[0]=MSPI_SendData(0xff);
    ID[1]=MSPI_SendData(0xff);
    ID[2]=MSPI_SendData(0xff);
    //ID数组里保存flash的产品ID,正确应该回的是 0x20 0x20 0x13
    IO1SET = m25p40_CS;

    return (i);
}

main()
{
    uint8 flashId;
    MSPI_Init();   
        
        flashId= CMD_RDID();
        DelayNS(100);                            // 延时
    }

回复评论 (3)

哪位顶下

我结帖子
点赞  2007-11-5 12:44
我想揭贴,都没人顶
点赞  2007-11-9 13:16
我接分
点赞  2007-11-9 21:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复