打印

求助:用模拟SPI程序读SPI FLASH

[复制链接]
3465|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thx02334|  楼主 | 2010-12-9 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,我想问下,用模拟SPI程序读SPI FLASH,如果时序不对,读FLASH时,读出来的数据是乱码,还是FLASH 数据输出数据的那个管脚就没反应啊?我试着读,但数据输出的管脚DO始终没变化,我想问的就是,是因为我模拟的时序不对的原因,还是别的原因,导致数据输出管脚DO一直没有变化,急寻解答。谢谢。

相关帖子

沙发
liang7143| | 2010-12-9 13:03 | 只看该作者
应该是时序不对

使用特权

评论回复
板凳
airwill| | 2010-12-9 17:57 | 只看该作者
通常 FLASH 接口电路不能识别你的命令, 就不会有反应了

使用特权

评论回复
地板
thx02334|  楼主 | 2010-12-10 13:35 | 只看该作者
#define W25X_WriteEnable                0x06
#define W25X_ReadData                        0x03
#define W25X_PageProgram                0x02

#define  W25X_DO                     GPIO_PIN_2
#define  W25X_CLK                     GPIO_PIN_3
#define  W25X_DI                     GPIO_PIN_4
#define  W25X_CS                      GPIO_PIN_5

void SPI_RW(unsigned char byte)
{
  
    GPIOPinWrite(GPIO_PORTA,W25X_CS, 0x00);       
    unsigned char bit_ctr,a;
    for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
    {
            if(0X80 == (byte & 0x80))
              GPIOPinWrite(GPIO_PORTA,W25X_DI, 0xff);
            else
              {
             GPIOPinWrite(GPIO_PORTA,W25X_DI, 0x00);
              }
            byte = (byte << 1);           // shift next bit into MSB..
            GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0xFF);
            GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0x00);             // ..then set SCK low again
    }
}


unsigned char SPI_RE()
{
     GPIOPinWrite(GPIO_PORTA,W25X_CS, 0x00);       
     unsigned char bit_ctr,a;
     for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
     {  
        GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0xff);
        if((0X10 & GPIOPinRead(GPIO_PORTA_BASE , 0xff))==0X10)
             a |=1;
        else
             a&=~1;
        GPIOPinWrite(GPIO_PORTA,W25X_CLK, 0x00);
         a = (a << 1);
     }
     return (a);      
}  


int main(void)
{
    uchar a;
    jtagWait();                                             //  防止JTAG失效,重要!
    clockInit();                                            //  时钟初始化:晶振,6MH
    SysCtlPeriEnable(GPIOA);
    GPIOPinTypeOut(GPIO_PORTA, W25X_CS);
    GPIOPinTypeOut(GPIO_PORTA, W25X_CLK);
    GPIOPinTypeIn(GPIO_PORTA,  W25X_DO);
    GPIOPinTypeOut(GPIO_PORTA,  W25X_DI);
   
    while(1)
    {
         SPI_RW(0x06);               //写使能命令
         SPI_RW(0x02);               //写命令
         SPI_RW(0x00);               //地址23-16位
         SPI_RW(0x01);               //地址15-8位
         SPI_RW(0x00);               //地址7-0位
         SPI_RW(0xa5);               //待发数据
         SPI_RW(0x03);                //读使能
         SPI_RW(0x00);                //地址
         SPI_RW(0x01);
         SPI_RW(0x00);
         a=SPI_RE();                //读出数据    这个地方总是没有数据输出??????
    }
}  

麻烦各位大侠帮忙看看, 别人的程序我也看过了,也是这样模拟的,但我的就是不行。
望指点,十分感谢!

使用特权

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

本版积分规则

30

主题

72

帖子

0

粉丝