你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

spi 驱动gd25q40b芯片读写失败

[复制链接]
轻叹流年 提问时间:2014-6-11 09:06 /
 驱动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)
收藏 评论9 发布时间:2014-6-11 09:06

举报

9个回答
轻叹流年 回答时间:2014-6-11 09:08:53

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

在线等,比较急,请大家帮帮忙,我是新手,另外驱动代码如下
void Init_Spi_Flash(void)
{
  GPIO_InitTypeDef  GPIO_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
轻叹流年 回答时间: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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版