【已解决】OTA一直不成功,很奇怪的问题 OTA image has invalid magic byte (expected 0xE9, saw 0x4f)

905105948
Posts: 3
Joined: Sun May 23, 2021 5:53 am

【已解决】OTA一直不成功,很奇怪的问题 OTA image has invalid magic byte (expected 0xE9, saw 0x4f)

Postby 905105948 » Mon Oct 25, 2021 9:32 am

用最新的IDF V4.3.1,之前4.3.2也有同样的情况。在远程更新的时候,用我们服务器的文件地址http或者HTTPS,一直报错esp_ota_ops: OTA image has invalid magic byte (expected 0xE9, saw 0x4f)。但是,一直不停的尝试,大概10次会成功一次。这个问题很诡异,bin文件直接通过浏览器下载没有任何问题。然后切换成本地的用python的服务器测试,升级每次都可以成功的。这就很迷茫了。基本就是官方的OTA的例子,根本没几行,没有修改什么东西。
接下来我局域网抓包,看看数据到底发送的是什么,
日志如下:

Code: Select all

[0;32mI (27035) OTA: Starting OTA task[0m
[0;32mI (27036) OTA: url: http://cloud.ifuzhi.com:8888/attachment/hardware/mattr/Mattress_1635242590766.bin [0m

[0;32mI (27101) esp_https_ota: Starting OTA...[0m
[0;32mI (27102) esp_https_ota: Writing to partition subtype 17 at offset 0x1b0000[0m

[0;31mE (27144) esp_ota_ops: OTA image has invalid magic byte (expected 0xE9, saw 0x4f)[0m
[0;31mE (27144) esp_https_ota: Error: esp_ota_write failed! err=0x1503[0m
[0;31mE (27150) OTA: Firmware upgrade failed[0m
用Wireshark抓包,看到http内容传输了一些,然后esp32主动发送RST断开了连接,应该是判断了数据头不是0xE9.
1.png
1.png (136.58 KiB) Viewed 4000 times
第一包数据确定是E9开头的
2.png
2.png (125.94 KiB) Viewed 4000 times
第二包数据开头是4F
3.png
3.png (66.74 KiB) Viewed 4000 times
BIN文件的内容

所以很奇怪,数据明明就传输了,但是没有从第一包数据里去取数据,而是从第二包里取数据了,所以报了这个错误?怎么解决呢,去看源码 :shock:
-----------------------------------------------------------------------------------------------------------------------------
2021.10.26
基本分析应该是丢掉了第一包里的数据,看了看源码,没太好下手。
进一步发现,公司服务器是chunked分段的方式,而demo用的python是Content-Type : application/octet-stream ,所以把公司服务器改成application/octet-stream 的形式,问题解决。先这样吧。

Who is online

Users browsing this forum: No registered users and 34 guests