qspi n25q512a读取数据错误

2019-07-14 15:54发布



大侠们好,现在折腾 N25Q512 这个芯片,现在能够正常读取 芯片 ID 号了,而且也是正确的

芯片工作模式设置为 QUAD 与 4字节模式,读取标志寄存器查看是否设置成功,结果设置是正确的
读取到的芯片 ID 号:



资料介绍的 芯片ID 号:



读取到的id号与资料介绍的是完全一致的

现在就是读取数据错误,全部都为 0x88



测试读数据前先把读取的一个扇区已经擦除了,再直接读取数据全部都为 0x88,正常来说应该是0xff才对

测试擦除一个扇区大概需要240ms左右,这个擦除时间应该算是正常的了,现在问题就出在数据读取上了

有哪位知道请指点指点几下啊 ????????!!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
7vyydyfwef
2019-07-15 12:44
TOPCB 发表于 2018-11-20 21:02
楼主读取ID和其他数据的代码发一下。

本帖最后由 hpdell 于 2016-12-16 14:29 编辑

你好,我现在把 N25Q512的程序全部上传,包括进入 QUAD 及4字节模式











但是没有找到他们之间的对应关系具体该如何设置 ??

下面的这个图片对应的是 MX25L51245G 这个芯片的,别人的貌似写得的比较详细,一看就明白了





// 读写测试函数
void QSPI_ReadWriteDemo(void)
{
  static uint8_t qspi_tx_buff[256], qspi_rx_buff[256];
  uint32_t RWDataSize = 256;
//  uint8_t  * qspi_tx_buff =  (uint8_t  *)mymalloc(SRAMEX, RWDataSize );        
//  uint8_t  * qspi_rx_buff =  (uint8_t  *)mymalloc(SRAMEX, RWDataSize );        

  uint8_t i = 0;

  uint32_t cc = 0;
  uint32_t  QspiAddr_RW;  
  uint32_t TimeBegin, TimeEnd;

//  if(( !qspi_tx_buff) || ( !qspi_rx_buff ))       // 内存申请失败
//    printf("QSPI SDRAM mymalloc Error ... ... ");   

  for(cc=0;cc < ( RWDataSize );cc++)
  {
    qspi_tx_buff[cc] = i * 1 ;
    qspi_rx_buff[cc] = 0 ;
    i ++;
  }

  {
    TimeBegin = HAL_GetTick();
    if(QSPI_EraseSector(0) !=  QSPI_OK)   //擦除这个扇区
      return ;  
    TimeEnd = HAL_GetTick();
    printf("QSPI QSPI Erase Sector   ... ... %dms, %d " ,  TimeEnd - TimeBegin, cc);     // 擦除一个扇区大概是240ms左右
  }

  QspiAddr_RW = (0 * 4096) + 0;

  QSPI_ReadBuff( &qspi_rx_buff[0],  (uint32_t)(QspiAddr_RW ), RWDataSize);   // 擦除完成后就直接读取,但是读回来的数据全部都是 0x88 ???


  TimeBegin = HAL_GetTick();

  QSPI_WritePageByte( &qspi_tx_buff[0],  (uint32_t)(QspiAddr_RW ), RWDataSize);


  TimeEnd = HAL_GetTick();
  printf("QSPI Write 8192 * 4  End   ... ... %dms " ,  TimeEnd - TimeBegin);


  TimeBegin = HAL_GetTick();
  QSPI_ReadBuff( &qspi_rx_buff[0],  (uint32_t)(QspiAddr_RW ), RWDataSize);
  TimeEnd = HAL_GetTick();
  printf("QSPI Read  8192 * 4  End   ... ... %dms " ,  TimeEnd - TimeBegin);


  if( Buffercmp_8(&qspi_tx_buff[0], &qspi_rx_buff[0], RWDataSize) == 0)
    printf("QSPI Data Read Write 8192 * 4 Test OK    ... DD ");
  else
    printf("QSPI Data Read Write 8192 * 4 Test Error ... EE ");

//  myfree(SRAMEX, qspi_tx_buff);
//  myfree(SRAMEX, qspi_rx_buff);  


}

一周热门 更多>