乐鑫技术交流
直播中

李浯

7年用户 1053经验值
私信 关注
[问答]

IDF实现OTA下载新固件速度慢,请问如何变快?

OTA的固件1.5MB不到, 运行OTA下载, 代码设计按照1%的递增显示进度,串口调试助手收到信息是每两秒才下载14KB。 平均每秒才7K。按照地址在网页浏览器下载, 每秒达到800多KB.



为什么这么慢呢?


Code: Select all
    esp_err_t ota_finish_err = ESP_OK;
    esp_http_client_config_t config = {
        .url = OTA_FIRMWARE_UPGRADE_URI,
        .cert_pem = NULL,  //(char *)server_cert_pem_start,
    };
   
    esp_https_ota_config_t ota_config = {
        .http_config = &config,
    };
   
    esp_https_ota_handle_t https_ota_handle = NULL;
    esp_err_t err = esp_https_ota_begin(&ota_config, &https_ota_handle);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "ESP HTTPS OTA Begin failed");
        vTaskDelete(NULL);
    }

    esp_app_desc_t app_desc;
    err = esp_https_ota_get_img_desc(https_ota_handle, &app_desc);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "esp_https_ota_read_img_desc failed");
        goto ota_end;
    }
    err = validate_image_header(&app_desc);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "image header verification failed");
        goto ota_end;
    }

    i = 0;
    len = 0;
    percent = 0;
    while (1) {
        //vTaskDelay(1000 / portTICK_PERIOD_MS);
        err = esp_https_ota_perform(https_ota_handle);
        if (err != ESP_ERR_HTTPS_OTA_IN_PROGRESS) {
            break;
        }
        // esp_https_ota_perform returns after every read operation which gives user the ability to
        // monitor the status of OTA upgrade by calling esp_https_ota_get_image_len_read, which gives length of image
        // data read so far.
        len = esp_https_ota_get_image_len_read(https_ota_handle);
        if ((len - i) > 14336) {
            percent++;
            ESP_LOGE(TAG, "Image bytes read: %d, OTA : %d%%", len, percent);
            i = len;
        }
    }

更多回帖

发帖
×
20
完善资料,
赚取积分