SDIO读写SD卡速度有多快?

前两天测试了SPI方式读写SD卡的速度《SPI方式读写SD卡速度测试》,今天来测试一下SDIO方式的读写速度。

测试条件:

单片机:STM32F407VET6

编译环境:MDK 5.30+HAL库

SD卡:闪迪32GB/64GB TF卡

文件系统:FatFS R0.12c

之前测试中说过了,非DMA方式速度和资源利用率都不如DMA方式,所以今天主要就测试SDIO+DMA方式的极限速度。SDIO采用的4线模式,理论上比1线的要快4倍。

首先用STM32CubeMx配置SDIO,如下:4线模式,分频系数为0,即不分频,此时SDIO的时钟为48MHz(单片机主频配置的为168MHz)。

使能SDIO的收发DMA:

接下来需要配置FatFS文件系统,如下:

由于需要测试64GB的卡,就需要使能exFAT文件系统(超过32G的卡需要使能),同时也要使能“长文件名”功能,不然会报错。

接下来直接生成代码,生成的代码中,底层驱动、以及文件系统都已经封装好了,直接调用相关函数就行。测试程序如下:


#define  NUM  32768

  retSD = f_mount(&SDFatFS, (TCHAR const*)SDPath, 0);//挂载

  retSD = f_open(&SDFile,(const char*)"test.txt",FA_CREATE_ALWAYS|FA_WRITE);
  for(uint32_t i=0;i<NUM;i++)
  {
    FileBuf[i] = (i%7) + 0x30;
  }
  tick = 0;//ms计数器清零
  for(uint8_t i=0;i<100;i++)//每次写入NUM个字节,连续写入100次
  {
    retSD = f_write(&SDFile,FileBuf,NUM,&bw);
    retSD = f_sync(&SDFile);
  }
  retSD = f_close(&SDFile);

  for(uint32_t i=0;i<NUM;i++)
  {
    FileBuf[i] = 0;
  }
  retSD = f_open(&SDFile,(const char*)"test.txt",FA_OPEN_EXISTING|FA_READ);//打开文件
  tick = 0;
  for(uint8_t i=0;i<100;i++)//读取NUM个字节,连续读取100次
  {
    retSD = f_read(&SDFile,FileBuf,NUM,&bw);
  }
  retSD = f_close(&SDFile);

打开文件后,每次写入文件32KB或16KB数据,连续写入100次。统计总时间,然后计算平均写入速度。读取测试也是一样。32G和64G卡测试结果如下:

可以看到32G卡写入速度在2MB/秒左右,单次写入数据越大,速度越快。

64G卡写入速度要更快,单次写入32KB时,平均速度可达5.4MB/秒左右。

两种卡的读取速度区别不大,都比写入速度快不少,在8~9MB/秒左右。

两种卡是同一品牌的,但写入速度区别比较大,怀疑可能是文件系统的原因,32G卡文件系统为FAT32,而64G卡文件系统为exFAT。

为了验证这个问题,我们将32G的卡也格式化为exFAT文件系统,再进行测试。

测试结果如下。可以看到,格式化为exFAT文件系统后,同一张卡的读写速度都有所提升,尤其是写入速度,提升明显。可见文件系统的格式对速度也是有影响的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud详解01-SpringCloudAlibaba、Nacos

文章目录前言一、架构演进1、web1.0阶段2、web2.0阶段3、垂直架构4、分布式架构二、SpringCloud基本概念1.特点2.SpringCloud和SpringCloudAlibaba3.SpringCloudAlibaba体系核心组件三、SpringCloudAlibaba1、注册中心Nacos2、Nacos安装和启动总结前言 本篇记录一下SpringClou…

ChatGPT研究分享:机器第一次开始理解人类世界

0、为什么会对ChatGPT感兴趣一开始&#xff0c;我对ChatGPT是没什么关注的&#xff0c;无非就是有更大的数据集&#xff0c;完成了更大规模的计算&#xff0c;所以能够回答更多的问题。但后来了解到几个案例&#xff0c;开始觉得这个事情并不简单。我先分别列举出来&#xff0c…

每日学术速递3.17

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Breaking Common Sense: WHOOPS! A Vision-and-Language Benchmark of Synthetic and Compositional Images 标题&#xff1a;打破常识&#xff1a;哎呀&#xff01;合成和合成图像…

【Redis】搭建哨兵集群

目录 集群结构 准备实例和配置 启动 测试 集群结构 这里我们搭建一个三节点形成的Sentinel集群&#xff0c;来监管之前的Redis主从集群。如图&#xff1a; 三个sentinel实例信息如下&#xff1a; 节点IPPORTs1192.168.150.10127001s2192.168.150.10127002s3192.168.150.…

python并发编程多线程

在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程&#xff0c;一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起&#xff0c;是一个…

C语言指针操作(十)动态内存分配与指向它的指针变量

目录 一、什么是内存的动态分配 二、怎样建立内存的动态分配 2.1用malloc函数开辟动态存储区 2.2用calloc函数开辟动态存储区 2.3用realloc函数重新分配动态存储区 2.4用free函数释放动态存储区 三、void指针类型 四、举例说明 一、什么是内存的动态分配 全局变量是分…

redis持久化的几种方式

一、简介 Redis是一种高级key-value数据库。它跟memcached类似&#xff0c;不过数据可以持久化&#xff0c;而且支持的数据类型很丰富。有字符串&#xff0c;链表&#xff0c;集 合和有序集合。支持在服务器端计算集合的并&#xff0c;交和补集(difference)等&#xff0c;还支持…

【蓝桥杯专题】 贪心(C++ | 洛谷 | acwing | 蓝桥)

菜狗现在才开始备战蓝桥杯QAQ 文章目录【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09;1055. 股票买卖 IIAcWing 104. 货仓选址传递糖果AcWing 112. 雷达设备付账问题乘积最大AcWing 1247. 后缀表达式P【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&…

Flink 应用案例——求网页访问量Top N 实时计算(附可执行代码)

在学习了Flink之后&#xff0c;笔者通过以下案例对Flink API 进行简单复习 目录 案例要求 前置准备 编写主程序&#xff08;点此跳转至代码&#xff09; 运行截图 案例要求 以下数据 为某网站的访问日志 现要求通过以下数据 统计出最近10s内最热门的N个页面&#xff08;即…

【3.17】MySQL索引整理、回溯(分割、子集问题)

3.1 索引常见面试题 索引的分类 什么是索引&#xff1f; 索引是一种数据结构&#xff0c;可以帮助MySQL快速定位到表中的数据。使用索引&#xff0c;可以大大提高查询的性能。 按「数据结构」分类&#xff1a;Btree索引、Hash索引、Full-text索引。 InnoDB 存储引擎创建的聚簇…

漫画:什么是快速排序算法?

这篇文章&#xff0c;以对话的方式&#xff0c;详细着讲解了快速排序以及排序排序的一些优化。 一禅&#xff1a;归并排序是一种基于分治思想的排序&#xff0c;处理的时候可以采取递归的方式来处理子问题。我弄个例子吧&#xff0c;好理解点。例如对于这个数组arr[] { 4&…

优思学院|六西格玛DMAIC,傻傻搞不清?

DMAIC还是搞不清&#xff1f; DMAIC是一个用于过程改进和六西格玛的问题解决方法论。它是以下五个步骤的缩写&#xff1a; 定义&#xff08;Define&#xff09;&#xff1a;明确问题&#xff0c;设定项目的目标和目的。绘制流程图&#xff0c;并收集数据&#xff0c;以建立未来…

基于bearpi的智能小车--Qt上位机设计

基于bearpi的智能小车--Qt上位机设计 前言一、界面原型1.主界面2.网络配置子窗口模块二、设计步骤1.界面原型设计2.控件添加信号槽3.源码解析3.1.网络链接核心代码3.2.网络设置子界面3.3.小车控制核心代码总结前言 最近入手了两块小熊派开发板,借智能小车案例,进行鸿蒙设备学…

01背包问题c++

问题 问题介绍 有 N 种物品和一个容量是 V 的背包&#xff0c;每种物品都有无限件可用。 第 i 种物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第…

基于Transformer的交通预测模型部分汇总【附源代码】

交通预测一直是一个重要的问题&#xff0c;它涉及到交通运输系统的可靠性和效率。随着人工智能的发展&#xff0c;越来越多的研究者开始使用深度学习模型来解决这个问题。其中&#xff0c;基于Transformer的交通预测模型在近年来备受关注&#xff0c;因为它们具有优秀的建模能力…

设计模式之桥接模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、桥接模式是什么&#xff1f; 桥接模式是一种结构型的软件设计模式&#xff0c;将抽象部分与实现部分分离&#xff0c;使他们可…

像ChatGPT玩转Excel数据

1.引言 最近ChatGPT的出现&#xff0c;把人工智能又带起了一波浪潮。机器人能否替代人类又成了最近热门的话题。 今天我们推荐的一个玩法和ChatGPT有点不一样。我们的课题是“让用户可以使用自然语言从Excel查询到自己想要的数据”。 要让自然语言可以从Excel中查数据&#…

通过百度文心一言大模型作画尝鲜,感受国产ChatGPT的“狂飙”

3月16日下午&#xff0c;百度于北京总部召开新闻发布会&#xff0c;主题围绕新一代大语言模型、生成式AI产品文心一言。百度创始人、董事长兼首席执行官李彦宏&#xff0c;百度首席技术官王海峰出席&#xff0c;并展示了文心一言在文学创作、商业文案创作、数理推算、中文理解、…

用Qt画一个温度计

示例1 以下是用Qt绘制一个简单的温度计的示例代码&#xff1a; #include <QPainter> #include <QWidget> #include <QApplication> class Thermometer : public QWidget { public:Thermometer(QWidget *parent 0); protected:void paintEvent(QPaintEvent …

【Hive】配置

目录 Hive参数配置方式 参数的配置方式 1. 文件配置 2. 命令行参数配置 3. 参数声明配置 配置源数据库 配置元数据到MySQL 查看MySQL中的元数据 Hive服务部署 hiveserver2服务 介绍 部署 启动 远程连接 1. 使用命令行客户端beeline进行远程访问 metastore服务 …