【发布时间】: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;
}
谁能帮我解决这个问题?
【问题讨论】:
标签: arduino ethernet esp32 atmega