OpenEdv-开源电子网

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

QSPI PK SPI 读写速度 ??

[复制链接]

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

各位大神们,最近在捣鼓 QSPI 的读写

发现 QSPI 的读写速度 比 SPI 的读写速度 貌似差不多,

同样都是读写 8192*2个字节的数据

SPI Write 8192 * 2  End   ... ... 514ms
SPI Read  8192 * 2  End   ... ... 10ms
SPI Data Read Write Auto Erase Sector OK ..  SWS  


QSPI Write 8192 * 2  End   ... ... 523ms
QSPI Read  8192 * 2  End   ... ... 4ms
QSPI Data Read Write Auto Erase Sector OK ... DD

在读取上要稍微快点,但是我的 SPI 的时钟 也只有 27MHz, 如果提高 SPI 的时钟频率,那么有可能 这个 SPI 的读写速度还会超过 QSPI 的吧,

spi 的芯片:w25q128fvsg
qspi芯片: w25q256fvfg         

大神们看看 是什么歌情况 ???

spi的读取函数
_SPI_FLASH_TATUS_T SPI_FlashReadBuffer(uint8_t * _pBuf, uint32_t _uiReadAddr, uint32_t _uiSize)
{        
        /* 如果读取的数据长度为0或者超出串行Flash地址空间,则直接返回 */
        if ((_uiReadAddr + _uiSize) > g_tFlash.TotalSize)
        {
                return SPI_FLASH_OUT_SIZE;
        }  

        if (_uiSize == 0)
        {
                return SPI_FLASH_OUT_SIZE;
        }   
        SPI_FLASH_CS_L;        


#if  1
  // 芯片 W25Q256, 512 是 32bit地址
  if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID)                //如果是W25Q256的话地址为4字节的,要发送最高8位
  {
    uint8_t TxAddr[5] ;

    TxAddr[0] = W25Q_ReadData;
    TxAddr[1] = (uint8_t)((_uiReadAddr)>>24);
    TxAddr[2] = (uint8_t)((_uiReadAddr)>>16);
    TxAddr[3] = (uint8_t)((_uiReadAddr)>>8);
    TxAddr[4] = (uint8_t)((_uiReadAddr)>>0);

    HAL_SPI_Transmit(&hspi2, &TxAddr[0], 5, 0x1fff);
  }

  else
  {
    uint8_t TxAddr[5] ;

    TxAddr[0] = W25Q_ReadData;
    TxAddr[1] = (uint8_t)((_uiReadAddr)>>16);
    TxAddr[2] = (uint8_t)((_uiReadAddr)>>8);
    TxAddr[3] = (uint8_t)((_uiReadAddr)>>0);

    HAL_SPI_Transmit(&hspi2, &TxAddr[0], 4, 0x1fff);  
  }


  HAL_SPI_Receive( &hspi2, (uint8_t *)_pBuf, _uiSize, 0x3fffff);    // 采用此方法接收数据速度至少快4倍或以上

#else

  SPI_ReadWriteByte(W25Q_ReadData);

  // 芯片 W25Q256, 512 是 32bit地址
  if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID)                //如果是W25Q256的话地址为4字节的,要发送最高8位
  {
    SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>24));
  }

  SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>16));    // 发送 24 bit 地址
  SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>8));
  SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>0));

  /*   这段读取速度太慢了,所以屏蔽了
  while (_uiSize--)
  {
    *_pBuf++ = SPI_ReadWriteByte(0XFF);    // 读一个字节并存储到pBuf,读完后指针自加1
  }
  */

  HAL_SPI_Receive( &hspi2, (uint8_t *)_pBuf, _uiSize, 0x3fffff);    // 采用此方法接收数据速度至少快4倍或以上
#endif
        SPI_FLASH_CS_H;

  return SPI_FLASH_OK;
}

















最佳答案

查看完整内容[请看2#楼]

现在终于发现原来还是 spi 芯片的问题,擦除一个扇区差不多需要等待 240ms 左右,这么慢的flash 芯片,哎,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2016-11-13 17:48:44 | 显示全部楼层
cl17726 发表于 2017-3-21 09:27
写入速度跟芯片自身有关系的,就像TF卡读取都可以很快,写入就不理想了
.

现在终于发现原来还是 spi 芯片的问题,擦除一个扇区差不多需要等待 240ms 左右,这么慢的flash 芯片,哎,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-13 18:59:12 | 显示全部楼层
应该是快4倍以上,除非你的QSPI是单线模式,不是4位模式,你可以用我们开发板测试一下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2016-11-13 20:12:00 | 显示全部楼层
正点原子 发表于 2016-11-13 18:59
应该是快4倍以上,除非你的QSPI是单线模式,不是4位模式,你可以用我们开发板测试一下

你好,应该是开启了 QPI 模式的
开启了qpi 模式 后,读取的 ID 值是 0xEF6019, 如果没有开启的话,读取的ID 值是 0xEF4018
2222.png


而且传输数据、地址也都是设置的为 4bit 模式进行的


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-13 22:36:32 | 显示全部楼层
hpdell 发表于 2016-11-13 20:12
你好,应该是开启了 QPI 模式的
开启了qpi 模式 后,读取的 ID 值是 0xEF6019, 如果没有开启的话,读取 ...

那就奇怪了。。。。
你看看相关IO口的波形正常不吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2016-11-14 09:21:13 | 显示全部楼层
正点原子 发表于 2016-11-13 22:36
那就奇怪了。。。。
你看看相关IO口的波形正常不吧。

io口的波形貌似是正常的
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-11-14 09:58:08 | 显示全部楼层
楼主再找找原因,从原理上讲QSPI肯定会快些。
活到老,学到老。
回复

使用道具 举报

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-7-24
在线时间
29 小时
发表于 2016-11-14 10:51:29 | 显示全部楼层
我用杜邦线接的QSPI flash结果发现能正确写数据,但是读数据却一直读错!
回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2016-11-14 19:08:48 | 显示全部楼层
晓枫VS枯叶 发表于 2016-11-14 10:51
我用杜邦线接的QSPI flash结果发现能正确写数据,但是读数据却一直读错!

不知道你的读函数是怎么写的
回复

使用道具 举报

30

主题

104

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
456476
金钱
456476
注册时间
2014-8-23
在线时间
59 小时
发表于 2017-3-21 09:27:49 | 显示全部楼层
写入速度跟芯片自身有关系的,就像TF卡读取都可以很快,写入就不理想了
.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 01:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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