M7 QSPI 异常

2019-07-20 11:28发布

今天试了下M7的QSPI,在初始化的这里就卡住了,用示波器卡QSPI_BK1_CLK信号都不正常(看图片).程序配置和原子大神的一样
u32 tempreg=0;
RCC->AHB1ENR|=1<<1;      //使能PORTB时钟   
RCC->AHB1ENR|=1<<5;      //使能PORTF时钟   
RCC->AHB3ENR|=1<<1;     //QSPI时钟使能
GPIO_Set(GPIOB,1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB2复用功能输出
GPIO_Set(GPIOB,1<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB6复用功能输出
GPIO_Set(GPIOF,0XF<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PF6~9复用功能输出
  GPIO_AF_Set(GPIOB,2,9);  //PB2,AF9
  GPIO_AF_Set(GPIOB,6,10); //PB6,AF10
  GPIO_AF_Set(GPIOF,6,9);  //PF6,AF9
  GPIO_AF_Set(GPIOF,7,9);  //PF7,AF9
  GPIO_AF_Set(GPIOF,8,10); //PF8,AF10
  GPIO_AF_Set(GPIOF,9,10); //PF9,AF10

RCC->AHB3RSTR|=1<<1;  //复位QSPI
RCC->AHB3RSTR&=~(1<<1);  //停止复位QSPI
if(QSPI_Wait_Flag(1<<5,0,0XFFFF)==0)//等待BUSY空闲
{
  tempreg=(3-1)<<24;  //设置QSPI时钟为AHB时钟的1/3,即216M/3=72Mhz,13.8ns
  tempreg|=(4-1)<<8;  //设置FIFO阈值为4个字节(最大为31,表示32个字节)
  tempreg|=0<<7;   //选择FLASH1
  tempreg|=0<<6;   //禁止双闪存模式
  tempreg|=1<<4;   //采样移位半个周期(DDR模式下,必须设置为0)
  QUADSPI->CR=tempreg; //设置CR寄存器
  tempreg=(23-1)<<16;  //设置FLASH大小为2^25=8MB
  tempreg|=(4-1)<<8;  //片选高电平时间为4个时钟(13.8*4=55.2ns),即手册里面的tSHSL参数
  tempreg|=1<<0;   //Mode3,空闲时CLK为高电平
  QUADSPI->DCR=tempreg; //设置DCR寄存器
  QUADSPI->CR|=1<<0;  //使能QSPI
}else return 1;
return 0;

请各位兄弟,帮帮忙看哪里问题
IC是W25Q64


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
土豆来袭
2019-07-20 12:35
正点原子 发表于 2017-10-20 01:17
代码下我们板子正常么?

下你们板子是正常的。我换了flash芯片(W25Q64)。刚开始看了这个clk波形,以为是硬件问题(QPI的clk高频下怎么是这样的波形!!!关键问题,它还工作正常,估计内部有整形电路)我的问题已经解决了,谢谢原子这么晚还在回答我的问题,辛苦了。

换了flash芯片(W25Q64),需要仔细看其数据手册,与W25Q256最大差别是:
1,只有2个状态寄存器(没有状态寄存器3,也就没有所谓的4字节地址模式,因为容量只有8M)
2,只支持一个写状态寄存器命令,它一次写2个状态寄存器,如果只修改其中一个,还得全部先读后改。

一周热门 更多>