我正在使用自定义服务器来升级 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");
}
}