当前位置: 首页 > article >正文

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文件系统后,同一张卡的读写速度都有所提升,尤其是写入速度,提升明显。可见文件系统的格式对速度也是有影响的。


http://www.kler.cn/a/1206.html

相关文章:

  • 「解析」牛客网-华为机考企业真题 1-20
  • 基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结
  • Ae:混合模式
  • HttpRunner3.x(1)-框架介绍
  • 蓝桥冲刺31天之317
  • 卷积神经网络CNN识别MNIST数据集
  • Navicat轻松操控MySQL数据库:从基础到高级操作全解析!
  • 2023年全国最新道路运输从业人员精选真题及答案26
  • 基于 pytorch 的手写 transformer + tokenizer
  • 重新学习Vue,了解一下Vue的故事和核心特点
  • 深度学习11. CNN经典网络 LeNet-5实现CIFAR-10
  • STL总结
  • 【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解
  • 节流还在用JS吗?CSS也可以实现哦
  • JAVA并发编程(2)——(如何保证原子性,原子类,CAS乐观锁,JUC常用类)
  • 176万,GPT-4发布了,如何查看OpenAI的下载量?
  • 面试官:聊聊你知道的跨域解决方案
  • Linux 路由表说明
  • 剑指 Offer II 031. 最近最少使用缓存
  • Linux:函数指针做函数参数