硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4131|回复: 7
收起左侧

STM32V6之HAL库 SPI1+DMA读写W25Q64下 几种方式的时间对比 基于EVR

  [复制链接]

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2020-12-8 22:00:23 | 显示全部楼层 |阅读模式
STM32V6_SPI.rar (706.63 KB, 下载次数: 85)

首先打开STM32CubeMX 配置STM32V6开发板W25Q64的SPI接口

硬汉的电路上标的是SPI3,实际上PB3 PB4 PB5也是SPI1的接口
为了测试最大速度 SPI1=45MHz SPI3=22.5MHz
缩写这里选择SPI1作为本次测试的说明

1.jpg
2.jpg
3.jpg
4.jpg
5.jpg

配置好了SPI1,选择创建工程。

在这里移植了MDK下的 EventRecorder具体移植过程,看硬汉V6教程关于EVR章节

为何要使用EVR在接下来对比分析里面会使用到

根据下面的W25Q64的操作时序,重写了另外论坛上down下来的代码
并且是否启动DMA做了优化
9.jpg
6.jpg

10.jpg



需要注意的是W25Q64的03H命令的最大时钟是50MHz  W25Q128的最大时钟是33MHz
8.jpg

7.jpg

接下来我们来根据EVR来对上图当中
单字节读写函数:W25QXX_ReadWriteByte
多字节读、写函数:W25QXX_Receive、W25QXX_Transmit
在读取4096字节数据时花费的时间来进行分析和对比
首先关闭DMA情况下
11.jpg

12.jpg

SPI1.gif

可以看到读取4096字节,单字节读写方式时间是 9ms
而多字节发送和接收只需要 3ms 时间

接下来我们开启DMA来看看需要多久
14.jpg

SPI2.gif

我们可以看到单字节的方式还是 9ms
但是当多字节传输开启了DMA方式以后
读取一个扇区4096字节时间只需要740μs 不到

让我们来计算一下,我们的SPI1的时钟是 45MHz
理论上传输一个字节的时间是  45000000/8 = 5625000字节/秒
传输4096字节的时间是 4096/5625000 = 728.17μs
这个时间和开启DMA的时间是相近的。
由于在读取4096字节时,还需要发送命令和读取地址的一些时间,
可以认为只有开了DMA以后才可以达到最大时钟频率的读取。

至于查询方式的读取速度和2种方式的速度也做了比较,大家觉得哪种方式好呢?
你会选择哪种方式读取呢?

不会EventRecorder的小伙伴赶紧用起来吧,真香。
接下来还会用EVR来看看ADC+DMA+TIMER+双缓冲区的对比(非半传输和完全传输,使用DMA的multi双缓存)

评分

参与人数 1金币 +100 收起 理由
caicaptain2 + 100

查看全部评分

回复

使用道具 举报

5

主题

132

回帖

147

积分

初级会员

积分
147
发表于 2020-12-9 08:47:11 | 显示全部楼层
66666
回复

使用道具 举报

73

主题

1194

回帖

1413

积分

至尊会员

积分
1413
发表于 2020-12-9 09:06:29 | 显示全部楼层
支持楼主
回复

使用道具 举报

334

主题

2033

回帖

3040

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3040
发表于 2020-12-9 09:49:19 | 显示全部楼层
666,三连赞! 详尽细致,对新手友好!
回复

使用道具 举报

3

主题

1223

回帖

1232

积分

至尊会员

积分
1232
发表于 2020-12-9 13:54:06 | 显示全部楼层
非常帅
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2020-12-9 14:49:53 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

3

主题

49

回帖

58

积分

初级会员

积分
58
发表于 2024-2-5 11:22:06 | 显示全部楼层
老哥,你代码的初始化中,为什么把CS引脚拉低,不拉低也可以正常运行的?
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
 楼主| 发表于 2024-2-5 14:59:42 | 显示全部楼层
跟着硬汉学 发表于 2024-2-5 11:22
老哥,你代码的初始化中,为什么把CS引脚拉低,不拉低也可以正常运行的?

CubeMX生成代码的时候初始电平我没改,默认低电平了。你可以在CubeMX里面把初始电平改成高
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 13:08 , Processed in 0.231202 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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