OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4572|回复: 5

QSPI N25Q256 读取 ID ??

[复制链接]

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
发表于 2016-11-5 14:42:10 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 hpdell 于 2016-11-5 15:36 编辑

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);

}









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-6 19:39:18 | 显示全部楼层
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-12-21
在线时间
5 小时
发表于 2016-11-10 17:07:21 | 显示全部楼层
我用示波器看输出波形和芯片手册上是一致的,但是receive函数读取的和你是一致的。正在找原因。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-12-21
在线时间
5 小时
发表于 2016-11-10 22:26:15 | 显示全部楼层
這個讀ID的指令和正常的讀寫數據的時序不同,後面沒有地址,你後邊跟了24位的地址就將ID的前幾位錯過其了。前幾位是0X20BA1810.而且你又加了一個dummy,使數據又讀錯位了,所以讀的不對。
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-12-21
在线时间
5 小时
发表于 2016-11-10 22:29:17 | 显示全部楼层
本帖最后由 sundali66 于 2016-11-10 22:30 编辑


請教一下。這個讀取和存儲速度快嗎?你做過測試嗎?
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2016-11-11 09:41:59 | 显示全部楼层
sundali66 发表于 2016-11-10 22:29
請教一下。這個讀取和存儲速度快嗎?你做過測試嗎?

还在捣鼓中啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 00:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表