打印
[应用相关]

AT32F435的qspi和spi的测试对比,发现速度相差无几?

[复制链接]
1333|43
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
li460135301|  楼主 | 2023-5-30 00:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 li460135301 于 2023-5-30 00:37 编辑

最近打算用AT32F435外挂一篇spi flash做存储,因为看到AT32F435本身支持qspi,想着qspi支持四线制读写,速度和效率肯定高很多。但是测试下来差别基本不大?

我用AT32F435的spi和qspi各挂载了一片w25q64(8MB)。也就是一片用spi驱动,一片用qspi驱动。

测试环境用rt-thread studio,基于SFUD,这里需要说明一下:SFUD的QSPI写入模式目前好像不支持4线写入,所以写入数据也是采用单线写入的。另外,由于AT32F435的rt-thread的BSP中,qspi没有支持dma模式(如果能增加就最好不过了,用户我们自己修改的话太麻烦了),而spi可以开启dma模式。所以这里测试了一下,spi在不开启dma和开启dma模式于qspi的对比。所以该测试并不全面?另外,有不合理的地方,可以讨论,或者雅特力的技术人员有没有更好的提升qspi的速度的方式。谢谢。
另外,qspi(qspi1)的速度采用默认设置50MHZ,实际速度应该是48Mhz,spi(spi2)的速度位AT32F435的spi最大速度36MHZ。

首先,spi默认不开启DMA,进行sf bench测试,结果如下:
msh />sf probe qspi10
[I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
[I/SFUD] sf_cmd flash device is initialize success.
[I/SFUD] Probe SPI flash sf_cmd by SPI device qspi10 success.
8 MB sf_cmd is current selected device.
msh />sf bench yes
Erasing the sf_cmd 8388608 bytes data, waiting...
Erase benchmark success, total time: 17.340S.
Writing the sf_cmd 8388608 bytes data, waiting...
Write benchmark success, total time: 32.768S.
Reading the sf_cmd 8388608 bytes data, waiting...
Read benchmark success, total time: 2.060S.
msh />sf probe spi20
[I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
[I/SFUD] sf_cmd flash device is initialize success.
[I/SFUD] Probe SPI flash sf_cmd by SPI device spi20 success.
8 MB sf_cmd is current selected device.
msh />sf bench yes
Erasing the sf_cmd 8388608 bytes data, waiting...
Erase benchmark success, total time: 16.881S.
Writing the sf_cmd 8388608 bytes data, waiting...
Write benchmark success, total time: 32.769S.
Reading the sf_cmd 8388608 bytes data, waiting...
Read benchmark success, total time: 8.165S.
   可以看到擦除和写入速度几乎一样,而读取速度,qspi的速度位spi的4倍左右,也就是qspi读取一片8MB的SPI flash 要2秒钟。

然后我们开启spi的dma,结果如下:
msh />sf probe qspi10
[I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
[I/SFUD] sf_cmd flash device is initialize success.
[I/SFUD] Probe SPI flash sf_cmd by SPI device qspi10 success.
8 MB sf_cmd is current selected device.
msh />sf bench yes
Erasing the sf_cmd 8388608 bytes data, waiting...
Erase benchmark success, total time: 16.439S.
Writing the sf_cmd 8388608 bytes data, waiting...
Write benchmark success, total time: 32.768S.
Reading the sf_cmd 8388608 bytes data, waiting...
Read benchmark success, total time: 2.060S.
msh />sf probe spi20
[I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
[I/SFUD] sf_cmd flash device is initialize success.
[I/SFUD] Probe SPI flash sf_cmd by SPI device spi20 success.
8 MB sf_cmd is current selected device.
msh />sf bench yes
Erasing the sf_cmd 8388608 bytes data, waiting...
Erase benchmark success, total time: 16.642S.
Writing the sf_cmd 8388608 bytes data, waiting...
Write benchmark success, total time: 32.768S.
Reading the sf_cmd 8388608 bytes data, waiting...
Read benchmark success, total time: 2.920S.
我们发现,再开启的DMA模式之后,spi读取一片8MB的flash需要2.92s,仅仅比qspi慢了0.9s不到,这个还是再qspi速度比spi高12M的情况下。所以我感觉不合理啊?
不知道是不是我测试的方法问题。还请请教?否则用qspi的意义就不大了,qspi还比spi多占用了两个io。

附件是我测试的工程代码,基于rt-thread studio。
另外,AT32的rt-thread studio的pack最新版本0.1.4的串口有bug,中断函数都采用UART1_IRQHandler(实际应该是USART1_IRQHandler,串口1,2,3,6都是这样),否则串口只能打印不能输入,这个疏忽就很尬尴,每次创建工程,需要自己修改drv_usart.c文件。

QSPI_AT32F435.rar

9.69 MB

使用特权

评论回复
沙发
sheltonyu| | 2023-5-30 09:57 | 只看该作者
您好,感谢您的问题反馈。
由您的测试结果来看,此部分的差异大概率是由qspi驱动目前不支持DMA方式有关。
后续有计划将qspi驱动的DMA方式完善,谢谢

使用特权

评论回复
板凳
imdx| | 2023-6-2 09:14 | 只看该作者
SPI使用DMA和不用DMA,速度差非常多,自己用示波器或者逻辑分析看一下SCK信号就明白为什么了。
QSPI或者QPI如果不支持DMA,可用性大打折扣,基本失去存在价值。

使用特权

评论回复
地板
muyichuan2012| | 2023-6-2 12:35 | 只看该作者
AT32 QSPI外设本身是支持DMA的,目前RT Studio那边还没来得及去做应用支持而已。

使用特权

评论回复
5
li460135301|  楼主 | 2023-6-2 16:01 | 只看该作者
imdx 发表于 2023-6-2 09:14
SPI使用DMA和不用DMA,速度差非常多,自己用示波器或者逻辑分析看一下SCK信号就明白为什么了。
QSPI或者QPI ...

ok,理解了,主要是AT32的QSPI的DMA模式在RTT上没有做应用支持,需要自己匹配!

使用特权

评论回复
评论
imdx 2023-6-3 08:13 回复TA
这种底层驱动自己写就好了,代码量不大,也不用支持几十上百种芯片,自己写不用太考虑通用性,效率高很多。 
6
li460135301|  楼主 | 2023-6-2 16:04 | 只看该作者
muyichuan2012 发表于 2023-6-2 12:35
AT32 QSPI外设本身是支持DMA的,目前RT Studio那边还没来得及去做应用支持而已。 ...

好的,有空自己去修改以下代码试试!而且SFUD的写入目前没有做4线写入模式(在SFUD的作者说:考虑到擦除的时间较长,所以提升写入意义不大)导致实际上写入比擦除的时间还要长!

使用特权

评论回复
7
li460135301|  楼主 | 2023-6-2 17:09 | 只看该作者
sheltonyu 发表于 2023-5-30 09:57
您好,感谢您的问题反馈。
由您的测试结果来看,此部分的差异大概率是由qspi驱动目前不支持DMA方式有关。
...

在RTT中,增加qspi驱动的DMA方式有在计划的schedule中吗?

使用特权

评论回复
评论
muyichuan2012 2023-6-5 13:01 回复TA
会加 
8
tpgf| | 2023-6-8 17:13 | 只看该作者
SPI的协议分了很多种,包括:Standard SPI(标准SPI)、Dual SPI(双线 SPI)和Quad SPI(四线 SPI) 等

使用特权

评论回复
9
木木guainv| | 2023-6-9 08:40 | 只看该作者
CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效

使用特权

评论回复
10
磨砂| | 2023-6-9 09:23 | 只看该作者
本来我觉得他们的速度就应该没有什么差别吧  毕竟就是一个四线制spi的事情

使用特权

评论回复
11
晓伍| | 2023-6-9 09:50 | 只看该作者
磨砂 发表于 2023-6-9 09:23
本来我觉得他们的速度就应该没有什么差别吧  毕竟就是一个四线制spi的事情 ...

Quad SPI(四线 SPI) ,为四线半双工,增加了两个数据引脚线IO2、IO3,此时IO0、IO1、IO2、IO3 引脚被用于向同一个方向传输数据,单次 可传输 4bit

使用特权

评论回复
12
八层楼| | 2023-6-9 10:31 | 只看该作者
QPI 与 QUAD SPI 基本差不多,但是在使用数据线传输指令和数据时,各自的用法略有差异

使用特权

评论回复
13
观海| | 2023-6-9 10:47 | 只看该作者
QSPI Flash默认的操作模式是标准单线SPI模式,所以在每次进行4线SPI操作的时候一定要先把状态寄存器2的QE位(倒数第2位)置1,然后才能进行QSPI操作

使用特权

评论回复
14
albertaabbot| | 2023-7-5 20:39 | 只看该作者
哪种接口适合应用需求              

使用特权

评论回复
15
uytyu| | 2023-7-5 20:59 | 只看该作者
SPI的数据传输速率比SPI快

使用特权

评论回复
16
adolphcocker| | 2023-7-5 21:09 | 只看该作者
QSPI外设同样支持单线模式(兼容普通spi),只是相比普通的spi少了一些特性。

使用特权

评论回复
17
hearstnorman323| | 2023-7-5 21:21 | 只看该作者
测试在QSPI和SPI上同时连接多个设备时的性能和可靠性吧

使用特权

评论回复
18
averyleigh| | 2023-7-5 21:29 | 只看该作者
SPI的传输延迟较高,因为它是半双工通信,每次传输都需要进行切换。相比之下,QSPI的全双工通信可以更快地传输数据并减少延迟。

使用特权

评论回复
19
houjiakai| | 2023-7-5 21:35 | 只看该作者
QSPI通常比SPI更快。               

使用特权

评论回复
20
macpherson| | 2023-7-5 21:41 | 只看该作者
SPI通常是单线程的,而QSPI支持四线程并行传输,因此具有更高的数据传输速度。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:风沙星辰,永远相伴......

7

主题

18

帖子

1

粉丝