当前位置:   article > 正文

SDIO读写SD卡速度有多快?_sdio速度

sdio速度

前两天测试了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的卡需要使能),同时也要使能“长文件名”功能,不然会报错。

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

  1. #define NUM 32768
  2. retSD = f_mount(&SDFatFS, (TCHAR const*)SDPath, 0);//挂载
  3. retSD = f_open(&SDFile,(const char*)"test.txt",FA_CREATE_ALWAYS|FA_WRITE);
  4. for(uint32_t i=0;i<NUM;i++)
  5. {
  6. FileBuf[i] = (i%7) + 0x30;
  7. }
  8. tick = 0;//ms计数器清零
  9. for(uint8_t i=0;i<100;i++)//每次写入NUM个字节,连续写入100次
  10. {
  11. retSD = f_write(&SDFile,FileBuf,NUM,&bw);
  12. retSD = f_sync(&SDFile);
  13. }
  14. retSD = f_close(&SDFile);
  15. for(uint32_t i=0;i<NUM;i++)
  16. {
  17. FileBuf[i] = 0;
  18. }
  19. retSD = f_open(&SDFile,(const char*)"test.txt",FA_OPEN_EXISTING|FA_READ);//打开文件
  20. tick = 0;
  21. for(uint8_t i=0;i<100;i++)//读取NUM个字节,连续读取100次
  22. {
  23. retSD = f_read(&SDFile,FileBuf,NUM,&bw);
  24. }
  25. retSD = f_close(&SDFile);

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/482280
推荐阅读
相关标签
  

闽ICP备14008679号