f_write SD卡写入速度有时候慢的问题

write buffer要32Byte及以上对齐,一次写入尽量多的数据,经测试一次写20个block会比单个block快10倍以上。

这里讲的是另一个问题。f_write写512B,大部分时候都几ms,但有时候写一次要200ms,速度不均匀。这是合乎SD卡协议的,SD卡协议规定write可以有250ms的延时,即sd卡可以持续最多250ms的busy信号(Data0线拉低)给host。

 

那SD卡为什么会有这个延时呢?原因有两种说法。

一是SD卡内部的buffer满了,给sd卡发的数据经过CRC校验后实际放在了buffer里,然后再写入存储介质中(一般是nand flash),只有等buffer空出来,才会将data0线拉高表示不再busy。

二是wear leveling,sd卡为了保证寿命,就要做到利用到整个地址空间,而不是只去用小部分区域,wear leveling算法就是做这个的。

 

这是硬件特性决定的,也没有什么特别好的解决方法。推荐下面两种方法:

一是建立能够保存250ms数据的缓冲区

二是选用高速sd卡,我用class4的卡这种200ms的latency出现的概率非常高,用uhs-3的卡就没有出现过了。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,写入数据很快的文件通常使用二进制模式,使用内置的`open()`函数打开文件,然后使用`write()`方法向文件中写入数据。以下是一个示例代码: ```python import time # 打开文件 start_time = time.time() with open('fast_file_write.txt', 'wb') as f: # 写入数据 for i in range(100000): f.write(b'This is line %d\r\n' % (i+1)) # 计算时间 end_time = time.time() print('Time elapsed: %.2f seconds' % (end_time - start_time)) ``` 在这个示例中,我们使用`with`语句打开文件,这样可以确保文件在使用完毕后自动关闭。我们使用二进制模式打开文件(`'wb'`),并使用`write()`方法向文件中写入数据。在本例中,我们写入了100000行数据,每行包含一些文本和行号。最后,我们计算了写入数据所需的时间。 值得注意的是,如果你想要写入大量数据,最好使用缓冲区。你可以通过设置缓冲区大小来控制写入数据的速度。例如,以下代码设置缓冲区大小为1MB: ```python import time # 打开文件 start_time = time.time() with open('fast_file_write.txt', 'wb', buffering=1024*1024) as f: # 写入数据 for i in range(100000): f.write(b'This is line %d\r\n' % (i+1)) # 计算时间 end_time = time.time() print('Time elapsed: %.2f seconds' % (end_time - start_time)) ``` 在上面的代码中,我们使用`buffering`参数将缓冲区大小设置为1MB。这将显著提高写入大量数据的速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值