ESP32 TF卡读写性能优化

在做SD_Test.ino测试的时候,发现其testFileIO测试进程非常慢。
仔细分析,有几个因素会影响读写性能。

  1. SPI接口速度
    将SPI时钟速度调到16M
 //if (!SD.begin())
    if (!SD.begin(SS, SPI, 16000000))
    {
        Serial.println("Card Mount Failed");
        return;
    }
DSTATUS ff_sd_initialize(uint8_t pdrv)
{
    char token;
    unsigned int resp;
    unsigned int start;
    ardu_sdcard_t * card = s_cards[pdrv];

    if (!(card->status & STA_NOINIT)) {
        return card->status;
    }

    AcquireSPI card_locked(card, 16000000);
    ....
  1. 每次读写的字节数
  2. 调整读写异常时的延时函数
char sdCommand(uint8_t pdrv, char cmd, unsigned int arg, unsigned int* resp)
{
    ...
        // Serial.printf("%s.%d : %u. token = %d\n","sd_diskio",__LINE__,millis(),token);
        if (token == 0xFF) {
            log_w("no token received");
            sdDeselectCard(pdrv);
            sdDeselectCard(pdrv);// 变更此处的延时处理
            // delay(1);
            sdSelectCard(pdrv);
            sdSelectCard(pdrv);
            continue;
        } else if (token & 0x08) {
            log_w("crc error");
            sdDeselectCard(pdrv);
            sdDeselectCard(pdrv);// 变更此处的延时处理
            // delay(1);
            sdSelectCard(pdrv);
            sdSelectCard(pdrv);
            continue;
        } else if (token > 1) {
            log_w("token error [%u] 0x%x", cmd, token);
            break;
        }
...
} 

优化效果:

Opened file for writing
1048576 bytes written for 7009 ms
Opened file for reading
file size : 1048576
1048576 bytes read for 2531 ms
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值