乐鑫技术交流
直播中

李丽

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

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

OTA的固件1.5MB不到, 运行OTA下载, 代码设计按照1%的递增显示进度,串口调试助手收到信息是每两秒才下载14KB。 平均每秒才7K。按照地址在网页浏览器下载, 每秒达到800多KB.
为什么这么慢呢?
    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;        }    }

回帖(1)

醉清歌

2024-6-7 18:03:24
OTA(Over-The-Air)下载速度慢的原因可能有以下几点:

1. 网络环境:Wi-Fi信号不稳定或连接质量较差可能导致下载速度降低。请确保设备连接到一个稳定的Wi-Fi网络。

2. 服务器限速:服务器端可能对下载速度进行了限制,导致下载速度较慢。可以尝试联系服务器管理员了解是否有限速设置。

3. HTTP客户端配置:检查ESP-HTTP-Client库的配置,确保没有设置错误的参数,如超时时间、连接数等。

4. 固件大小:虽然固件大小只有1.5MB,但在某些情况下,固件的压缩和解压缩过程可能会影响下载速度。

为了提高OTA下载速度,可以尝试以下方法:

1. 优化网络环境:确保设备连接到一个信号强、稳定的Wi-Fi网络。

2. 调整ESP-HTTP-Client配置:检查并调整ESP-HTTP-Client库的配置参数,如超时时间、连接数等。

3. 使用HTTPS:如果可能,尝试使用HTTPS连接,这可以提高数据传输的安全性,同时可能提高下载速度。

4. 服务器端优化:联系服务器管理员,了解是否有限速设置,或者尝试更换一个下载速度较快的服务器。

5. 固件压缩:在上传固件到服务器之前,可以尝试对固件进行压缩,以减小传输数据量。

6. 多线程下载:如果ESP-HTTP-Client库支持多线程下载,可以尝试使用多线程下载来提高下载速度。

7. 检查代码逻辑:检查OTA下载过程中的代码逻辑,确保没有不必要的延时或阻塞操作。

最后,请注意,实际下载速度还受到硬件性能、网络环境等多种因素的影响,可能无法达到浏览器下载的速度。但通过上述方法,应该可以提高OTA下载速度。
举报

更多回帖

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