spi驱动gd25q40b芯片读写失败

2019-07-14 18:03发布

驱动gd25q40b程序是参考正点原子的w25x16,发现两个芯片差不多,但是在读id的时候发现一个问题,把原子哥的读写函数返回字节改成u16,如下
u16  SPIx_ReadWriteByte(u8 TxData)
{               
        u8 retry=0;                                         
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
                {
                retry++;
                if(retry>200)return 0;
                }                          
        SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个数据
        retry=0;

        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位
                {
                retry++;
                if(retry>200)        return 0;               
                }                                                              
        return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据                                            
}

然后把读取id函数里面的Temp作如下改动就可以读取正确的id号,但是如果不改,读出来的数,低字节的数争取,高字节的数不对。

u16 SPI_Flash_ReadID(void)
{
        u16 Temp = 0;         
        SPI_FLASH_CS=0;                                    
        SPIx_ReadWriteByte(0x90); //发送读取ID命令            
        SPIx_ReadWriteByte(0x00);            
        SPIx_ReadWriteByte(0x00);            
        SPIx_ReadWriteByte(0x00);                                    

//        Temp|=SPIx_ReadWriteByte(0xFF)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。