使用以太网校验和的 esp32 OTA 失败

Posted

技术标签:

【中文标题】使用以太网校验和的 esp32 OTA 失败【英文标题】:OTA for esp32 using ethernet checksum failed 【发布时间】:2020-08-17 05:22:01 【问题描述】:

我正在使用 Atmega2560 连接到以太网模块来获取 Esp32 的二进制文件,然后通过 UART 将文件发送到 Esp32 以更新其固件。

我正在尝试使用 HttpClient 库通过以太网模块获取二进制文件数据,但是当数据存储在 Esp32 OTA 分区中时,我得到:

esp_image: Checksum failed . Calculated 0xad read 0x0

当我在发送到 esp32 之前检查了从二进制文件接收到的一些数据时,我可以看到某些位置有 0x0 而不是它应该是正确的值。

这是我读取二进制文件并将其发送到 Esp32 的代码的一部分。

EthernetClient transport;
HttpClient client(transport, SERVER, SERVER_PORT);
Serial.print("Check for update file ");
Serial.println(PATH);
client.get(PATH);
int statusCode = client.responseStatusCode();
Serial.print("Update status code: ");
Serial.println(statusCode);
if (statusCode != 200)

client.stop();
return;

long bin_length = client.contentLength();
if (bin_length == HttpClient::kNoContentLengthHeader) 
client.stop();
Serial.println("Server didn't provide Content-length header. Can't continue with update.");
return;

Serial.print("Server returned update file of size ");
Serial.print(bin_length);
Serial.println(" bytes");
ESPSerial.print(String(bin_length)); //send file size to ESP
delay(10000);
byte data_char;
int counter=0;
while (bin_length > 0)

if (!client.readBytes(&data_char, 1)) // reading a byte with timeout
break;
ESPSerial.write(data_char); //here send data to esp32
if(bin_length==0||bin_length==1||bin_length==2)Serial.print("last data=");Serial.println(data_char,HEX);
counter++;
if(counter==1000)

Serial.println(bin_length);
counter=0;
delay(100);

bin_length--;

client.stop();
if (bin_length > 0)

Serial.print("Timeout downloading update file at ");
Serial.print(bin_length);
Serial.println(" bytes. Can't continue with update.");
return;

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

我的 ESP32 板也有同样的问题,原来是电源问题,因为在 OTA 期间 Wifi 消耗更多电流。

确保您的电池已充电或在电源线上使用一个大电容器以在 OTA 过程中保持高电压。

【讨论】:

以上是关于使用以太网校验和的 esp32 OTA 失败的主要内容,如果未能解决你的问题,请参考以下文章

乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)

ESP32学习笔记(25)——OTA(空中升级)接口使用(简化API)

ESP32学习笔记(24)——OTA(空中升级)接口使用(原生API)

在 python 中为大文件创建校验和的最快方法