电子产业一站式赋能平台

PCB联盟网

搜索
查看: 257|回复: 0
收起左侧

SDIO读写SD卡速度有多快?

[复制链接]

452

主题

452

帖子

2712

积分

三级会员

Rank: 3Rank: 3

积分
2712
发表于 2023-3-15 08:00:00 | 显示全部楼层 |阅读模式
前两天测试了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)。

gztp3e0ffzg64014181011.png

gztp3e0ffzg64014181011.png

使能SDIO的收发DMA:

b4wkrft005p64014181112.png

b4wkrft005p64014181112.png

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

eoebghk3ca064014181212.png

eoebghk3ca064014181212.png

由于需要测试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  {    FileBuf = (i%7) + 0x30;  }  tick = 0;//ms计数器清零  for(uint8_t i=0;i  {    retSD = f_write(&SDFile,FileBuf,NUM,&bw);    retSD = f_sync(&SDFile);  }  retSD = f_close(&SDFile);
      for(uint32_t i=0;i  {    FileBuf = 0;  }  retSD = f_open(&SDFile,(const char*)"test.txt",FA_OPEN_EXISTING|FA_READ);//打开文件  tick = 0;  for(uint8_t i=0;i  {    retSD = f_read(&SDFile,FileBuf,NUM,&bw);  }  retSD = f_close(&SDFile);
    打开文件后,每次写入文件32KB或16KB数据,连续写入100次。统计总时间,然后计算平均写入速度。读取测试也是一样。32G和64G卡测试结果如下:

    e0p44fagjme64014181312.png

    e0p44fagjme64014181312.png

             
    可以看到32G卡写入速度在2MB/秒左右,单次写入数据越大,速度越快。
    64G卡写入速度要更快,单次写入32KB时,平均速度可达5.4MB/秒左右。
    两种卡的读取速度区别不大,都比写入速度快不少,在8~9MB/秒左右。
    这个速度还是很不错的,比SPI方式快了不少,可以做一些实时的数据采集和存储。
             
    两种卡是同一品牌的,但写入速度区别比较大,怀疑可能是文件系统的原因,32G卡文件系统为FAT32,而64G卡文件系统为exFAT。
    为了验证这个问题,我们将32G的卡也格式化为exFAT文件系统,再进行测试。

    l0b2rk3vbbv64014181412.png

    l0b2rk3vbbv64014181412.png

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

    1vlhnr05l3i64014181512.png

    1vlhnr05l3i64014181512.png

    推荐阅读:STM32CubeMX之SDIO+FatFS读写SD卡
    串口接收不定长数据的几种方法
    Keil调试时设置断点的高级用法
    SPI方式读写SD卡速度有多快?
    STM32定时器实现红外接收与解码
    STM32F0系列中断向量映射问题

       欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表