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

QSPI N25Q256 读取 ID ??

[复制链接]
hpdell 提问时间:2016-11-5 14:44 /
悬赏2ST金币未解决
本帖最后由 hpdell 于 2016-11-5 15:34 编辑

QSPI N25Q256 读取 ID 貌似跟资料介绍的不一致??

资料介绍

1.jpg


实际读取到的 ID

2.jpg

对 这个芯片的 数据读写,4k擦除 完全正常,但是还有芯片擦除 还是不行


/* Identification Operations */
#define QSPI_READ_ID_CMD                          0x9E


#define QSPI_READ_ID_CMD2                         0x9F
#define QSPI_MULTIPLE_IO_READ_ID_CMD              0xAF
#define QSPI_READ_SERIAL_FLASH_DISCO_PARAM_CMD    0x5A

读取函数如下:

QSPI_StaticTypeDef QSPI_Read_ID(uint8_t ReadID, uint8_t * _pIdBuf, uint8_t ReadIdNum)
{

        QSPI_CommandTypeDef sCommand;
        __IO uint32_t cc;

  //Initialize the read command
  sCommand.InstructionMode   = QSPI_INSTRUCTION_1_LINE;     //指令模式
  sCommand.AddressSize       = QSPI_ADDRESS_24_BITS;        //地址长度
  sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;   //无交替字节
  sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;       //关闭DDR模式
  sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
  sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;

  sCommand.Instruction        = ReadID;                            //指令

  sCommand.DummyCycles        = 1;                                  //设置空指令周期数
//    sCommand.Address            = address;                          //地址
  sCommand.NbData             = ReadIdNum;          // 需要读取的字节数

  if(ReadID == QSPI_MULTIPLE_IO_READ_ID_CMD)
  {
    sCommand.AddressMode        = QSPI_ADDRESS_4_LINES;                //地址模式
    sCommand.DataMode           = QSPI_DATA_4_LINES;                  //数据模式     
  }
  else
  {
    sCommand.AddressMode        = QSPI_ADDRESS_1_LINE;                //地址模式
    sCommand.DataMode           = QSPI_DATA_1_LINE;                  //数据模式  
  }

  if (HAL_QSPI_Command(&hqspi, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    return QSPI_ERROR;
  }

  RxCplt = 0;     // 接收标志清0
  if (HAL_QSPI_Receive_IT(&hqspi, _pIdBuf) != HAL_OK)
  {
    return QSPI_ERROR;
  }

  cc = 0;
  do{

    cc ++;

  } while( (RxCplt == 0) && (cc < QSPI_WAIT_MAX_TIME));

  if(cc >= (QSPI_WAIT_MAX_TIME - 1 ))
    return QSPI_ERROR;

        return QSPI_OK;
}



main{

  .........................

  QSPI_Read_ID( QSPI_READ_ID_CMD2, (uint8_t*) &uart_rx_buff[0], 20);
  uart_rx_buff[18] = 0xff;    // 特意赋值为 0xff
  for(cc=0;cc<20;cc++)
    printf("ID = %#x, %d\r\n", uart_rx_buff[cc], cc);

}









收藏 1 评论13 发布时间:2016-11-5 14:44

举报

13个回答
衔胆栖冰 回答时间:2016-11-5 17:18:21
首先,你的这样贴代码,谁看谁累。
然后,“对 这个芯片的 数据读写,4k擦除 完全正常,但是还有芯片擦除 还是不行”,你的ID都读不对,你怎么确定4K擦除和读写完全正常?
还有,你的命令码,手册上的没有贴上来,自己确认一下没错。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

衔胆栖冰 回答时间:2016-11-5 17:19:09
还有初始化的代码,都没贴,净贴些没用的。
hpdell 回答时间:2016-11-5 17:29:33
衔胆栖冰 发表于 2016-11-5 17:18
首先,你的这样贴代码,谁看谁累。
然后,“对 这个芯片的 数据读写,4k擦除 完全正常,但是还有芯片擦除  ...

我使用 4k 扇区擦除,写入,再读出,最后数据对比都完全正确,

现在 就是ID 读取不正确,还有 擦除整个芯片不正常,
wdshuang09 回答时间:2016-11-5 18:25:23
衔胆栖冰 发表于 2016-11-5 17:18
首先,你的这样贴代码,谁看谁累。
然后,“对 这个芯片的 数据读写,4k擦除 完全正常,但是还有芯片擦除  ...

同意二楼的说法
衔胆栖冰 回答时间:2016-11-5 22:37:20
hpdell 发表于 2016-11-5 17:29
我使用 4k 扇区擦除,写入,再读出,最后数据对比都完全正确,

现在 就是ID 读取不正确,还有 擦除整个 ...

你的flash是不是有4K的缓冲区?你的数据并没有写进flash里,只是写到了缓存区,然后再从缓冲区读出来,然后对比都一样
peter001 回答时间:2016-11-6 00:21:15
断电重新上电,校验一下数据写入对不

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

asssdz-382474 回答时间:2016-11-6 04:23:34
:)
hpdell 回答时间:2016-11-6 13:03:48
本帖最后由 hpdell 于 2016-11-6 13:05 编辑
衔胆栖冰 发表于 2016-11-5 22:37
你的flash是不是有4K的缓冲区?你的数据并没有写进flash里,只是写到了缓存区,然后再从缓冲区读出来,然 ...

哟一次写入的是 8192 字节啊,读出也是8192 进行对比的,
还有我整片擦除,写入,后再整片读出,数据对比也是对的
liu553824989 回答时间:2016-11-7 12:42:40

还有初始化的代码,都没贴,净贴些没用的。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版