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)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
TOPCB
1楼-- · 2019-07-15 01:28
Temp = SPIx_ReadWriteByte(0xFF);  
Temp = Temp
nhonglan
2楼-- · 2019-07-15 02:07
已经解决了,是我spi配置的时候没有注意,stm32f0有个fifo,配置一下这个就可以了,谢谢楼上的
Sabrina_cc
3楼-- · 2019-07-15 06:41
你发送的是8位数据,接收的是16位?也会只收到8位的
60user147
4楼-- · 2019-07-15 08:06
这种外部flash直接使用野火历程就好啦。我也用这个做汉字库
爱雪爱雪
5楼-- · 2019-07-15 09:31
 精彩回答 2  元偷偷看……
水木清华pretty
6楼-- · 2019-07-15 13:44
一些外设的程序不能照搬f1的

一周热门 更多>