乐鑫技术交流
直播中

李丽华

8年用户 1499经验值
私信 关注
[问答]

ESP8266 OTA升级失败的原因?

我正在使用自定义服务器来升级 esp8266。我可以从服务器下载图像,但总是升级失败。

我将以下.bin文件下载到闪存中(下载前,我擦除整个闪存):

------------ 2 MByte flash   ------------
0x0           -----  boot_v1.6.bin
0x1000     -----  user1.bin
0x1fb000  -----  blank.bin
0x1fc000  -----  esp_init_data_default.bin
0x1fe000  -----  blank.bin



这是我的日志:


获取 /test/user2.bin HTTP/1.0
主机:192.168.1.113:8292

总和长度 = 236224
升级文件下载开始。
总计 = 1460
entry smartconfig >>>
答0 答4
SmartConfig 正常
总计 = 2920
总计 = 4380
。。。
总计 = 235060
总计 = 236224
升级文件下载完成。
flash_crc = 3875536896
img_crc = 395549339
upgrade_check
ota_upgrade_rsp失败了



CRC值似乎是错误的。但我不知道为什么。我已经在我的 ubuntu 中检查了 CRC,这是另一个值:

work@ubuntu:~/esp/Scent/bin/test$ ls
user1.bin  user2.bin
work@ubuntu:~/esp/Scent/bin/test$ cksum user2.bin
68439177 236224 user2.bin
work@ubuntu:~/esp/scent/bin/test$



这是我的升级代码:



LOCAL void ICACHE_FLASH_ATTR
ota_upgrade_rsp(void *arg)
{
    struct upgrade_server_info *server = arg;
    if (server->upgrade_flag == true)
   {
       // TODO write new version.
       os_printf("user_esp_platform_upgrade_successfuln");
      os_printf("system_upgrade_rebootn");
        system_param_save_with_protect(ESP_PARAM_START_SEC, &now, sizeof(firmware_version_t));
      system_upgrade_reboot();
    }
   else
    {
        os_printf("ota_upgrade_rsp失败了n");
    }

    os_free(server->url);
    server->url = NULL;
    os_free(server);
    server = NULL;
}


LOCAL void ICACHE_FLASH_ATTR
ota_upgrade_begin(struct espconn *pespconn)
{
    uint8 user_bin[9] = {0};
    uint8 devkey[41] = "No Device key";
    struct upgrade_server_info *server = NULL;

   os_printf("user_ota_upgrade_begin...n");

    server = (struct upgrade_server_info *)os_zalloc(sizeof(struct upgrade_server_info));

    server->pespconn = pespconn;
    const char remote_ip[4] = {192, 168, 1, 113};
    os_memcpy(server->ip, remote_ip, 4);
    server->port = 8292;

    server->check_cb = ota_upgrade_rsp;
    server->check_times = 120000;

    if (server->url == NULL) {
        server->url = (uint8 *)os_zalloc(512);
    }

    if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1) {
        os_memcpy(user_bin, "user2.bin", 10);
    } else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2) {
        os_memcpy(user_bin, "user1.bin", 10);
    }
   
    os_sprintf(server->url, "GET /test/%s HTTP/1.0rnHost: "IPSTR":%drnrn",
                user_bin, IP2STR(server->ip), server->port);
   
    os_printf("%sn",server->url);

    if (system_upgrade_start(server) == false) {
        os_printf("upgrade is already startedn");
    }
}


回帖(1)

赵辉

2024-7-11 16:15:53
ESP8266 OTA升级失败可能有以下几个原因:

1. **固件不兼容**:确保你下载的固件与你的ESP8266模块兼容。不同的模块可能需要不同的固件版本。

2. **错误的分区表**:检查你的ESP8266是否使用了正确的分区表。如果分区表不正确,可能会导致升级失败。

3. **下载过程中的错误**:在下载过程中,可能由于网络问题或其他原因导致文件损坏或不完整。尝试重新下载固件并再次尝试升级。

4. **闪存擦除不彻底**:虽然你提到已经擦除了整个闪存,但有时候擦除可能不彻底。尝试再次擦除闪存并重新下载固件。

5. **固件文件损坏**:检查固件文件是否完整且未损坏。如果可能,从官方或可靠的来源重新下载固件。

6. **服务器问题**:检查你的自定义服务器是否正常工作,确保固件文件可以正确传输到ESP8266。

7. **ESP8266硬件问题**:如果以上原因都排除了,可能是ESP8266硬件本身存在问题。尝试使用另一个ESP8266模块进行测试。

8. **固件升级代码问题**:检查你的固件升级代码是否正确。确保在升级过程中正确处理了所有必要的步骤,如擦除闪存、下载固件、校验和等。

9. **电源问题**:确保ESP8266在升级过程中电源稳定,避免因电源问题导致升级失败。

10. **固件版本问题**:如果你的ESP8266模块较旧,可能需要先升级到较新的固件版本,然后再升级到最新的固件。

综上所述,要解决ESP8266 OTA升级失败的问题,需要从多个方面进行排查。希望这些建议能帮助你找到问题所在并解决问题。
举报

更多回帖

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