21ic电子技术开发论坛

标题: AT32F435的qspi和spi的测试对比,发现速度相差无几? [打印本页]

作者: li460135301    时间: 2023-5-30 00:18
标题: AT32F435的qspi和spi的测试对比,发现速度相差无几?
本帖最后由 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测试,结果如下:
复制
  1. msh />sf probe qspi10
  2. [I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
  3. [I/SFUD] sf_cmd flash device is initialize success.
  4. [I/SFUD] Probe SPI flash sf_cmd by SPI device qspi10 success.
  5. 8 MB sf_cmd is current selected device.
  6. msh />sf bench yes
  7. Erasing the sf_cmd 8388608 bytes data, waiting...
  8. Erase benchmark success, total time: 17.340S.
  9. Writing the sf_cmd 8388608 bytes data, waiting...
  10. Write benchmark success, total time: 32.768S.
  11. Reading the sf_cmd 8388608 bytes data, waiting...
  12. Read benchmark success, total time: 2.060S.
  13. msh />sf probe spi20
  14. [I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
  15. [I/SFUD] sf_cmd flash device is initialize success.
  16. [I/SFUD] Probe SPI flash sf_cmd by SPI device spi20 success.
  17. 8 MB sf_cmd is current selected device.
  18. msh />sf bench yes
  19. Erasing the sf_cmd 8388608 bytes data, waiting...
  20. Erase benchmark success, total time: 16.881S.
  21. Writing the sf_cmd 8388608 bytes data, waiting...
  22. Write benchmark success, total time: 32.769S.
  23. Reading the sf_cmd 8388608 bytes data, waiting...
  24. Read benchmark success, total time: 8.165S.
   可以看到擦除和写入速度几乎一样,而读取速度,qspi的速度位spi的4倍左右,也就是qspi读取一片8MB的SPI flash 要2秒钟。

然后我们开启spi的dma,结果如下:
复制
  1. msh />sf probe qspi10
  2. [I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
  3. [I/SFUD] sf_cmd flash device is initialize success.
  4. [I/SFUD] Probe SPI flash sf_cmd by SPI device qspi10 success.
  5. 8 MB sf_cmd is current selected device.
  6. msh />sf bench yes
  7. Erasing the sf_cmd 8388608 bytes data, waiting...
  8. Erase benchmark success, total time: 16.439S.
  9. Writing the sf_cmd 8388608 bytes data, waiting...
  10. Write benchmark success, total time: 32.768S.
  11. Reading the sf_cmd 8388608 bytes data, waiting...
  12. Read benchmark success, total time: 2.060S.
  13. msh />sf probe spi20
  14. [I/SFUD] Find a Winbond flash chip. Size is 8388608 bytes.
  15. [I/SFUD] sf_cmd flash device is initialize success.
  16. [I/SFUD] Probe SPI flash sf_cmd by SPI device spi20 success.
  17. 8 MB sf_cmd is current selected device.
  18. msh />sf bench yes
  19. Erasing the sf_cmd 8388608 bytes data, waiting...
  20. Erase benchmark success, total time: 16.642S.
  21. Writing the sf_cmd 8388608 bytes data, waiting...
  22. Write benchmark success, total time: 32.768S.
  23. Reading the sf_cmd 8388608 bytes data, waiting...
  24. 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, 下载次数: 57


作者: 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那边还没来得及去做应用支持而已。
作者: li460135301    时间: 2023-6-2 16:01
imdx 发表于 2023-6-2 09:14
SPI使用DMA和不用DMA,速度差非常多,自己用示波器或者逻辑分析看一下SCK信号就明白为什么了。
QSPI或者QPI ...

ok,理解了,主要是AT32的QSPI的DMA模式在RTT上没有做应用支持,需要自己匹配!
作者: li460135301    时间: 2023-6-2 16:04
muyichuan2012 发表于 2023-6-2 12:35
AT32 QSPI外设本身是支持DMA的,目前RT Studio那边还没来得及去做应用支持而已。 ...

好的,有空自己去修改以下代码试试!而且SFUD的写入目前没有做4线写入模式(在SFUD的作者说:考虑到擦除的时间较长,所以提升写入意义不大)导致实际上写入比擦除的时间还要长!
作者: li460135301    时间: 2023-6-2 17:09
sheltonyu 发表于 2023-5-30 09:57
您好,感谢您的问题反馈。
由您的测试结果来看,此部分的差异大概率是由qspi驱动目前不支持DMA方式有关。
...

在RTT中,增加qspi驱动的DMA方式有在计划的schedule中吗?
作者: tpgf    时间: 2023-6-8 17:13
SPI的协议分了很多种,包括:Standard SPI(标准SPI)、Dual SPI(双线 SPI)和Quad SPI(四线 SPI) 等
作者: 木木guainv    时间: 2023-6-9 08:40
CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效
作者: 磨砂    时间: 2023-6-9 09:23
本来我觉得他们的速度就应该没有什么差别吧  毕竟就是一个四线制spi的事情
作者: 晓伍    时间: 2023-6-9 09:50
磨砂 发表于 2023-6-9 09:23
本来我觉得他们的速度就应该没有什么差别吧  毕竟就是一个四线制spi的事情 ...

Quad SPI(四线 SPI) ,为四线半双工,增加了两个数据引脚线IO2、IO3,此时IO0、IO1、IO2、IO3 引脚被用于向同一个方向传输数据,单次 可传输 4bit
作者: 八层楼    时间: 2023-6-9 10:31
QPI 与 QUAD SPI 基本差不多,但是在使用数据线传输指令和数据时,各自的用法略有差异
作者: 观海    时间: 2023-6-9 10:47
QSPI Flash默认的操作模式是标准单线SPI模式,所以在每次进行4线SPI操作的时候一定要先把状态寄存器2的QE位(倒数第2位)置1,然后才能进行QSPI操作
作者: albertaabbot    时间: 2023-7-5 20:39
哪种接口适合应用需求              
作者: uytyu    时间: 2023-7-5 20:59
SPI的数据传输速率比SPI快
作者: adolphcocker    时间: 2023-7-5 21:09
QSPI外设同样支持单线模式(兼容普通spi),只是相比普通的spi少了一些特性。
作者: hearstnorman323    时间: 2023-7-5 21:21
测试在QSPI和SPI上同时连接多个设备时的性能和可靠性吧


作者: averyleigh    时间: 2023-7-5 21:29
SPI的传输延迟较高,因为它是半双工通信,每次传输都需要进行切换。相比之下,QSPI的全双工通信可以更快地传输数据并减少延迟。
作者: houjiakai    时间: 2023-7-5 21:35
QSPI通常比SPI更快。               
作者: macpherson    时间: 2023-7-5 21:41
SPI通常是单线程的,而QSPI支持四线程并行传输,因此具有更高的数据传输速度。
作者: nomomy    时间: 2023-7-5 21:49
采用QSPI? 和 SPI? 比较好一些的
作者: louliana    时间: 2023-7-5 21:54
虽然QSPI相对于SPI具有一些优点,但是它也有一些缺点,如需要使用专门的QSPI外设芯片,并且不支持SPI协议中的一些特殊功能。
作者: sanfuzi    时间: 2023-7-5 22:06
SPI在大多数微控制器和外设之间都得到广泛支持
作者: pentruman    时间: 2023-7-5 22:12
建议您参考相关的微控制器和外部设备的文档和规范
作者: abotomson    时间: 2023-7-5 22:24
QSPI(Quad SPI)比SPI更快,因为它支持四线全双工通信,而SPI只支持单线半双工通信。
作者: alvpeg    时间: 2023-7-5 22:30
QSPI可以同时发送和接收数据,而SPI需要在发送和接收之间切换。
作者: caigang13    时间: 2023-7-6 08:09
RTT系统现在的适配性咋样
作者: pl202    时间: 2023-7-6 10:23
QSPI通常在一些高性能的微控制器中才得到支持,因为它需要更多的硬件资源。
作者: eefas    时间: 2023-7-6 10:39
QSPI传输速度更快,相对来说可能更多的功耗。
作者: elsaflower    时间: 2023-7-6 10:46
SPI通常支持多种时钟模式,如0模式、1模式、2模式和3模式,用于控制数据采样和传输的时钟边沿。而QSPI通常支持更多的时钟模式选项,以提供更高的灵活性。


作者: xiaoyaodz    时间: 2023-7-6 10:55
QSPI可以提供更高的数据传输率。
作者: earlmax    时间: 2023-7-6 11:28
spi需要配置哪些               
作者: mattlincoln    时间: 2023-7-6 11:34
QSPI的接口更简单,使用起来更方便,可以更快地进行外设的开发和调试。
作者: averyleigh    时间: 2023-7-6 11:48
SPI通常使用4个信号线(片选、时钟、数据输入、数据输出),而QSPI使用6个信号线(片选、时钟、数据输入、数据输出、数据线1、数据线2)。
作者: minzisc    时间: 2023-7-6 12:06
比较QSPI和SPI在相同条件下的数据传输速度,以确定QSPI是否能够提供更快的数据传输。
作者: ingramward    时间: 2023-7-6 12:15
QSPI在速度、引脚数量和延迟方面具有优势
作者: maqianqu    时间: 2023-7-6 12:20
QSPI的功耗比SPI低,可以降低设备的功耗。
作者: V853    时间: 2023-8-4 12:02
我想他们的速度应该没有什么不同,毕竟是一个四线制spi
作者: AIsignel    时间: 2023-8-4 12:30
什么样的接口适合应用需求
作者: 理想阳    时间: 2023-8-4 12:50
spi的数据传输速率比spi快
作者: 芯路例程    时间: 2023-8-4 13:12
qspi凡是比spi更快。
作者: digit0    时间: 2023-9-5 17:30
测试在QSPI和SPI上同时连接多个设备的性能和可靠性
作者: 鹿鼎计    时间: 2024-7-1 19:15
Qpi 基本上与 quad 和 spi 相同,但在使用数据线传输指令和数据时,它们的用法略有不同

作者: LLGTR    时间: 2024-7-1 21:16
Spi 在大多数微控制器和外围设备中得到广泛支持

作者: 朝生    时间: 2024-7-3 23:56
现在 rtt 系统的兼容性如何

作者: caigang13    时间: 2024-7-4 07:51
你拿开启DMA和不开来对比,本身就有问题。
作者: 天天向善    时间: 2024-7-5 06:44
Qspi 外围设备也支持单行模式(与常规 spi 兼容) ,但是比常规 spi 具有更少的特性。

作者: LinkMe    时间: 2024-7-5 23:27
Qspi 传输速度更快,可能会消耗相对更多的功耗。

作者: imdx    时间: 2024-7-7 20:31
averyleigh 发表于 2023-7-5 21:29
SPI的传输延迟较高,因为它是半双工通信,每次传输都需要进行切换。相比之下,QSPI的全双工通信可以更快地 ...

SPI是全双工
作者: Pretext    时间: 2024-7-8 09:14
隔离设计只不过是隔离电源和信号处理。没什么异常。微控制器的特定引脚需要连接到下载器的相应端口。合理布局电路,尽量减少长距离线路,避免不必要的电阻增加。对于需要长时间运行的uart通信,可以定期校准波特率,以消除由于系统时钟漂移或其他因素造成的误差。检查波特率是否由于外部时钟源的问题而不准确。标准c库提供了丰富的函数,包括输入输出、字符串处理、数学计算等。以满足各种由编译器自动分配和释放的编程需求,存储函数的参数值、局部变量的值等。,其操作类似于数据结构中的堆栈。过度依赖直接寻址会降低代码的可读性和可维护性,所以在优化时需要平衡性能和代码质量。你知道v4,27,2,hall的closeloopanglepll实现原理吗在配置和使用dma时,要特别注意dma通道的优先级设置,避免数据传输过程中的冲突和优先级问题。电机转矩是描述电机输出功率和性能的重要参数,其产生原理与电机的类型和工作原理密切相关。使用哈希表时,需要评估其性能,包括查找、插入和删除操作的平均时间复杂度。在头文件中,保持代码风格一致,遵循项目或团队的编码规范,可以提高代码的可读性和可维护性。对采集的数据进行非线性校正和标定,提高测量精度。是非感官的还是感官的?可以做电机,电机固件是开源的,固件库是任意的吧?根据实际应用要求选择合适的spim或qspi器件,并确保其与at32兼容。超出分配的内存边界的写入操作可能会覆盖其他重要数据,从而导致数据损坏。可能是算法有问题或者什么的spi一般是单线程的,而qspi支持四线程并行传输,因此数据传输速度更高。

作者: digit0    时间: 2024-8-2 17:49
本来我觉得它们的速度应该没有区别,毕竟是四线spi的东西

作者: 理想阳    时间: 2024-8-6 07:57
我猜它们的速度应该没什么不同,毕竟是四线spi

作者: V853    时间: 2024-9-2 18:11
大多数微控制器和外设都广泛支持Spi,

作者: AIsignel    时间: 2024-9-4 07:50
Qspi外设也支持单线模式(与普通spi兼容),但与普通spi相比功能较少。

作者: 芯路例程    时间: 2024-9-5 17:00
Qspi的界面更简单,使用更方便,可以更快地开发和调试外设。

作者: dreamCar    时间: 2024-10-9 11:32
在32,qspi外设本身支持dma。目前rt,studio还没来得及提供应用支持。

作者: 软核硬核    时间: 2024-11-4 14:35
Qspi的功耗低于spi,可以降低器件的功耗。

作者: 星闪动力    时间: 2024-11-5 18:00
Spi广泛支持大多数微控制器和外设,

作者: hmcu666    时间: 2024-11-8 19:54
如果拿开放的dma和开放的dma比较,本身就有问题。





欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) Powered by Discuz! X3.5