wupeimm 发表于 2014-6-11 09:06:07

spi 驱动gd25q40b芯片读写失败

 驱动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)

wupeimm 发表于 2014-6-11 09:08:53

回复:spi 驱动gd25q40b芯片读写失败

在线等,比较急,请大家帮帮忙,我是新手,另外驱动代码如下
void Init_Spi_Flash(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDef   SPI_InitStructure;
/*!< sEE_CS_GPIO, sEE_MOSI_GPIO, sEE_MISO_GPIO and sEE_SCK_GPIO
       Periph clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
/*!< sEE Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
/*!< Configure SCK pins: SCK */
GPIO_InitStructure.GPIO_Pin = SPI_CLK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP;
GPIO_Init(SPI_PORT, &GPIO_InitStructure);
/*!< Configure SPI pins: MISO */
GPIO_InitStructure.GPIO_Pin = SPI_MISO_PIN;
GPIO_Init(SPI_PORT, &GPIO_InitStructure);
/*!< Configure SPI pins: MOSI */
GPIO_InitStructure.GPIO_Pin = SPI_MOSI_PIN;
GPIO_Init(SPI_PORT, &GPIO_InitStructure);
/*!< Configure SPI_CS_PIN pin: sEE_SPI Card CS pin */
GPIO_InitStructure.GPIO_Pin = SPI_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(SPI_PORT, &GPIO_InitStructure);
/* Connect PXx to SPI_SCK */
GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource13,GPIO_AF_1);
/* Connect PXx to sEE_SPI_MISO */
GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource14,GPIO_AF_1);
/* Connect PXx to sEE_SPI_MOSI */
GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource15,GPIO_AF_1);

/*!< sEE SPI Config */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE); /*!< sEE_SPI enable */

GPIO_SetBits(SPI_PORT,SPI_CS_PIN);
}

发表于 2014-6-11 11:08:11

RE:spi 驱动gd25q40b芯片读写失败

Temp = SPIx_ReadWriteByte(0xFF);
Temp = Temp

wupeimm 发表于 2014-6-11 13:07:40

回复:spi 驱动gd25q40b芯片读写失败

已经解决了,是我spi配置的时候没有注意,stm32f0有个fifo,配置一下这个就可以了,谢谢楼上的

有缘于你 发表于 2014-6-11 16:32:46

RE:spi 驱动gd25q40b芯片读写失败

你发送的是8位数据,接收的是16位?也会只收到8位的

发表于 2014-6-11 23:02:07

RE:spi 驱动gd25q40b芯片读写失败

这种外部flash直接使用野火历程就好啦。我也用这个做汉字库

feiante-155820 发表于 2014-6-12 08:20:04

RE:spi 驱动gd25q40b芯片读写失败

呵呵, F1好像没有FIFO,F0增加了FIFO,以前学习F0例子时也在这出问题。

深秋独影 发表于 2014-6-15 10:54:38

RE:spi 驱动gd25q40b芯片读写失败

一些外设的程序不能照搬f1的

Eagleson 发表于 2014-6-17 09:01:25

RE:spi 驱动gd25q40b芯片读写失败

http://www.eeboard.com/tutorials/stm32f051系列教程第12课-spi读写串行flash/   这个是f0的SPI 讲的很详细

Eagleson 发表于 2014-6-17 09:31:38

RE:spi 驱动gd25q40b芯片读写失败

f0函数库手册 651页有说明FRXTH 的作用 也就是这个函数SPI_RxFIFOThresholdConfig
页: [1]
查看完整版本: spi 驱动gd25q40b芯片读写失败