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

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

查看全部评分

assssdz 回答时间: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 进行对比的,
还有我整片擦除,写入,后再整片读出,数据对比也是对的
仙景 回答时间:2016-11-7 12:42:40

还有初始化的代码,都没贴,净贴些没用的。
高二毛 回答时间:2016-11-7 14:02:21
关注。。。
春眠不觉晓 回答时间:2016-12-7 22:12:02
很好奇这是什么问题,没有过程和结果?
zbber 回答时间:2016-12-7 23:43:19
,感恩无私的分享与奉献
liuxy236@tom.co 回答时间:2016-12-7 23:49:13
                          

所属标签

相似问题

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