社区导航

 
查看: 335|回复: 2

[原创] 【ESP32学习】SD卡速度比较测试2

[复制链接]

7110

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-9-16 16:26:47 | 显示全部楼层 |阅读模式
前一段时间我们进行了两种SDIO方式文件读取速度比较,站长就这个问题询问了ESP32_Lobo版的作者Boris,他回答说是对于小文件两种方式区别不大。

为此,我们继续进行了大文件的读写测试。通过读取3个不同大小的文件,来判断读取速度。先将3个文件复制到SD卡,并改名为1、2、3,文件大小分别是:60708、639659、5235712。测试程序如下:

SD 1Line mode(4 Line mode程序类似,就不贴出了)
  1. import os
  2. import time

  3. os.sdconfig(os.SDMODE_1LINE)
  4. os.mountsd()

  5. def filesize(fn):
  6.     try:
  7.         i = os.stat(fn)
  8.         return i[6]
  9.     except:
  10.         return 0

  11. def loadf(p):
  12.     total = 0
  13.     print('============================================')
  14.     print('file name:', p[0])
  15.     print('file size:', filesize(p[0]))
  16.     for i in range(p[1]):
  17.         with open(p[0]) as f:
  18.             while True:
  19.                 x = len(f.read(1024))
  20.                 total += x
  21.                 if x<1024:
  22.                     break
  23.     return total

  24. def time_it(f, n):
  25.     t0 = time.ticks_us()
  26.     total = f(n)
  27.     t1 = time.ticks_us()
  28.     dt = time.ticks_diff(t1, t0)
  29.     print('{} bytes {:5.3f} sec : {:8.3f} Mbytes/sec'.format(total, dt * 1e-6, total/dt))
  30.     return total/dt

  31. print('============================================')
  32. print('       ESP32 SD 1Line mode speed test:')

  33. r0 = time_it(loadf, ('/sd/0', 10))
  34. r1 = time_it(loadf, ('/sd/1', 1))
  35. r2 = time_it(loadf, ('/sd/2', 1))
复制代码


测试结果

SD 1Line mode
  1. ============================================
  2.        ESP32 SD 1Line mode speed test:
  3. ============================================
  4. file name: /sd/0
  5. file size: 60708
  6. 459910 bytes 2.111 sec :    0.218 Mbytes/sec
  7. ============================================
  8. file name: /sd/1
  9. file size: 639659
  10. 639659 bytes 4.029 sec :    0.159 Mbytes/sec
  11. ============================================
  12. file name: /sd/2
  13. file size: 5235712
  14. 5167548 bytes 29.547 sec :    0.175 Mbytes/sec
  15. >>>
复制代码

SD 4Line mode
  1. ============================================
  2.        ESP32 SD 4Line mode speed test:
  3. ============================================
  4. file name: /sd/0
  5. file size: 60708
  6. 459910 bytes 2.027 sec :    0.227 Mbytes/sec
  7. ============================================
  8. file name: /sd/1
  9. file size: 639659
  10. 639659 bytes 3.967 sec :    0.161 Mbytes/sec
  11. ============================================
  12. file name: /sd/2
  13. file size: 5235712
  14. 5167548 bytes 28.836 sec :    0.179 Mbytes/sec
  15. >>>
复制代码

可以看到,1Line和4Line模式的结果仍然差别非常小。





此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处



回复

使用道具 举报

6803

TA的帖子

17

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-9-17 08:41:18 | 显示全部楼层
速度差异不大可能是因为,读取写入时间的大头在flash操作,不在传输,导致传输速度差异对整体读写速度的影响较小

点评

是有可能的,也与ESP32目前优化的不够有关。  详情 回复 发表于 2018-9-17 09:10
training


回复

使用道具 举报

7110

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2018-9-17 09:10:33 | 显示全部楼层
白丁 发表于 2018-9-17 08:41
速度差异不大可能是因为,读取写入时间的大头在flash操作,不在传输,导致传输速度差异对整体读写速度的影 ...

是有可能的,也与ESP32目前优化的不够有关。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-10-18 18:43 , Processed in 0.116184 second(s), 17 queries , Gzip On, MemCache On.

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