V1.5: OTA信息结构存平台任务id(ota_id),新固件首启在可靠连接上补发result.post+confirm.post;BL的w25q64.h同步(需重刷BL)

This commit is contained in:
helei 2026-08-19 23:05:44 +08:00
parent 1a11cfce02
commit e9eed60b00
8 changed files with 193 additions and 336 deletions

View File

@ -750,7 +750,7 @@ static void air780e_trigger_ota_body(const char *host, int port, const char *pat
air780e_mqtt_result_nowait("iot.ota.result.post", ota_id, 1);
bg_delay(1000); /* 给模组一点发送时间即复位(权威通知由重启后的 confirm.post 承担) */
/* 只把固件信息写入 W25Q64版本号在 APP 确认成功后再写入 EEPROM */
W25Q64_OTA_SetNewInfo(new_ver, file_size, crc16);
W25Q64_OTA_SetNewInfo(new_ver, file_size, crc16, ota_id);
reset_log_mark(RSN_OTA_UPDATE);
bg_delay(100); NVIC_SystemReset();
}
@ -777,10 +777,17 @@ int air780e_ota_confirm(void)
else log_error("> OTA 确认写入失败(已重试 3 次)");
}
/* 重启后的新鲜可靠连接上,先补发 result.post带平台任务 id驱动"完成"标志),
* confirm.post result OTA */
int rc = 0;
if (info.ota_id[0]) {
rc |= NET_mqtt_report("iot.ota.result.post", info.ota_id, 1);
}
/* 再向服务器上报"确认成功"走网络层路由4G/WiFi 通道均可) */
char id_buf[24] = {0};
snprintf(id_buf, sizeof(id_buf), "%u", info.new_version); /* 用版本号作为 id 上报 */
return NET_mqtt_report("iot.ota.confirm.post", id_buf, 1);
rc |= NET_mqtt_report("iot.ota.confirm.post", id_buf, 1);
return rc;
}

View File

@ -267,7 +267,7 @@ void net_wifi_ota(const char *host, int port, const char *path,
log_info("* 正在重启进入 BootLoader... *");
log_info("**************************************");
/* 只把固件信息写入 W25Q64版本号在 APP 确认成功后再写入 EEPROM */
W25Q64_OTA_SetNewInfo(new_ver, file_size, crc16);
W25Q64_OTA_SetNewInfo(new_ver, file_size, crc16, ota_id);
reset_log_mark(RSN_OTA_UPDATE);
bg_delay(100);
NVIC_SystemReset();

View File

@ -312,7 +312,7 @@ int W25Q64_OTA_WriteInfo(const W25Q64_OtaInfo *info)
return 0;
}
int W25Q64_OTA_SetNewInfo(uint16_t version, uint32_t size, uint16_t crc16)
int W25Q64_OTA_SetNewInfo(uint16_t version, uint32_t size, uint16_t crc16, const char *ota_id)
{
int ret;
storage_lock();
@ -330,6 +330,8 @@ int W25Q64_OTA_SetNewInfo(uint16_t version, uint32_t size, uint16_t crc16)
info.boot_trial_count = 0;
info.app_confirmed = 0;
info.backup_valid = 0; /* 新下载后,下一次更新需要重新备份当前 APP */
memset(info.ota_id, 0, sizeof(info.ota_id));
if (ota_id) strncpy(info.ota_id, ota_id, sizeof(info.ota_id) - 1); /* 平台任务 id重启后补发结果用 */
ret = W25Q64_OTA_WriteInfo(&info);
storage_unlock();
return ret;

View File

@ -71,6 +71,7 @@ typedef struct {
uint16_t backup_crc16; /* 备份固件 CRC16 */
uint8_t backup_valid; /* 槽 A 备份是否有效 */
uint8_t reserved2;
char ota_id[20]; /* 平台 OTA 任务 id重启后补发 result.post 用) */
uint16_t checksum; /* 前面所有字节累加和 */
} W25Q64_OtaInfo;
#pragma pack(pop)
@ -94,7 +95,7 @@ int W25Q64_Verify(uint32_t addr, const uint8_t *data, uint32_t len);
/* OTA 专用信息区操作 */
int W25Q64_OTA_ReadInfo(W25Q64_OtaInfo *info);
int W25Q64_OTA_WriteInfo(const W25Q64_OtaInfo *info);
int W25Q64_OTA_SetNewInfo(uint16_t version, uint32_t size, uint16_t crc16);
int W25Q64_OTA_SetNewInfo(uint16_t version, uint32_t size, uint16_t crc16, const char *ota_id);
int W25Q64_OTA_SetBackupInfo(uint32_t size, uint16_t crc16);
int W25Q64_OTA_ClearNew(void);
int W25Q64_OTA_SetState(uint8_t state);

View File

@ -58,7 +58,7 @@ extern UART_HandleTypeDef huart3;
#define MQTT_USERNAME "766990788193702677"
#define MQTT_PASSWORD "6ae9622b7034326b"
////RTOS版-投料机-无蠕变磅秤-03
//RTOS版-投料机-无蠕变磅秤-03
//#define MQTT_CLIENT_ID "5791a8579d459290"
//#define MQTT_USERNAME "766990788193702677"
//#define MQTT_PASSWORD "5f6cd7748ec9db35"

View File

@ -75,6 +75,7 @@ typedef struct {
uint16_t backup_crc16; /* 备份固件 CRC16 */
uint8_t backup_valid; /* 槽 A 备份是否有效 */
uint8_t reserved2;
char ota_id[20]; /* 平台 OTA 任务 id重启后补发 result.post 用) */
uint16_t checksum; /* 前面所有字节累加和 */
} W25Q64_OtaInfo;
#pragma pack(pop)

View File

@ -3,102 +3,38 @@
[INFO] * BootLoader *
[INFO] * Flash: 256KB *
[INFO] * * * * * By Helei * * * * * *
[INFO] [BL] 上次复位原因: 上电 按键
[INFO] > 固件校验通过
[INFO] [BL] 正在跳转到 APP1 @0x08008000...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * 版本: 1.5.8 (RTOS) *
[INFO] * * * * * * * By Helei * * * *
[INFO] > EEPROM 探测: 写=0xA5, 读=0xA5
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=20
[INFO] EEPROM 配置有效, Ver=20
[INFO] > 服务器: 58.17.14.95:1880
[INFO] > 客户端ID: 5791a8579d459290
[INFO] > 用户名: 766990788193702677
[INFO] > 版本序号: 20
[INFO] > W25Q64 初始化成功, ID=0xEF4017
[INFO] > 历史重启记录(新→旧):
[INFO] [1] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [2] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [3] 重启原因: 按键复位 运行时间: 0天00小时06分
[INFO] [4] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [5] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [6] 重启原因: 被平台踢下线 运行时间: 0天06小时42分
[INFO] [7] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [8] 重启原因: 串口OTA命令 运行时间: 0天01小时05分
[INFO] [9] 重启原因: 卡死看门狗溢出 运行时间: 0天07小时41分
[INFO] [10] 重启原因: 外部断电(法拉电容记录) 运行时间: 0天00小时00分
[INFO] SW1:关
[INFO] SW2:关
[INFO] SW3:关
[INFO] SW4:关
[INFO] > 产品模式: 称重投料(带秤)
[INFO] > GPS 定位: 关闭(GPS0)
[INFO] > FEED: 初始化, 去皮=1.0KG, 单次投料=1.0KG
[INFO] > 电能: HLW8032 就绪 (UART5 PD2)
[INFO] > OLED: 初始化完成
[INFO] > 4G: 初始化...
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 8986032524791123631
[INFO] > 4G: CGATT 已附着
[INFO] > 4G: 信号 45% (rssi=14)
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[INFO] > 4G: MQTT OK
[INFO] > 4G: Ready
[INFO] > 4G: 首次发布成功
[INFO] > BLE: 配置已缓存(Bt1),跳过设置
[INFO] SW1:关(不恢复,投喂安全保护)
[INFO] SW2:关(恢复)
[INFO] SW3:关(恢复)
[INFO] SW4:关(恢复)
[INFO] > Main: MQTT Ready 后首次状态上报
[INFO] > FEED: 首次查询已发送
[INFO] > OTA 已确认MQTT Ready + 首次发布成功 + 延迟9s
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * BootLoader *
[INFO] * Flash: 256KB *
[INFO] * * * * * By Helei * * * * * *
[INFO] [BL] 上次复位原因: 软件
[INFO] > 固件校验通过
[INFO] [BL] 正在跳转到 APP1 @0x08008000...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * 版本: 1.5.6 (RTOS) *
[INFO] * 版本: 1.5.7 (RTOS) *
[INFO] * * * * * * * By Helei * * * *
[INFO] > EEPROM 探测: 写=0xA5, 读=0xA5
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=20
[INFO] > EEPROM 写入成功
[INFO] > EEPROM 写入完成, Magic=0xDEADBE12
[INFO] > EEPROM 回读校验 err=0, Magic=0xDEADBE12, Ver=0
[INFO] EEPROM 配置已修复, Ver=0
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=1
[INFO] EEPROM 配置有效, Ver=1
[INFO] > 服务器: 58.17.14.95:1880
[INFO] > 客户端ID: 5791a8579d459290
[INFO] > 用户名: 766990788193702677
[INFO] > 版本序号: 0
[INFO] > 版本序号: 1
[INFO] > W25Q64 初始化成功, ID=0xEF4017
[INFO] > 历史重启记录(新→旧):
[INFO] [1] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00
[INFO] [2] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [3] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 按键复位 运行时间: 0天00小时06
[INFO] [5] 重启原因: 被平台踢下线 运行时间: 0天00小时03
[INFO] [6] 重启原因: 被平台踢下线 运行时间: 0天00小时03
[INFO] [7] 重启原因: 被平台踢下线 运行时间: 0天06小时42
[INFO] [8] 重启原因: 按键复位 运行时间: 0天00小时00
[INFO] [9] 重启原因: 串口OTA命令 运行时间: 0天01小时05
[INFO] [10] 重启原因: 卡死看门狗溢出 运行时间: 0天07小时41
[INFO] [1] 重启原因: 软件复位(未标记) 运行时间: 0天00小时19分
[INFO] [2] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [3] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [5] 重启原因: OTA升级完成 运行时间: 0天00小时08分
[INFO] [6] 重启原因: 4G初始化失败 运行时间: 0天00小时00分
[INFO] [7] 重启原因: 被平台踢下线 运行时间: 0天00小时08分
[INFO] [8] 重启原因: 被平台踢下线 运行时间: 0天00小时05分
[INFO] [9] 重启原因: 串口RESET命令 运行时间: 0天00小时01分
[INFO] [10] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] SW1:关
[INFO] SW2:关
[INFO] SW3:关
[INFO] SW4:关
[INFO] > 产品模式: 称重投料(带秤)
[INFO] > GPS 定位: 关闭(GPS0)
[INFO] > GPS 定位: 开启
[INFO] > FEED: 初始化, 去皮=1.0KG, 单次投料=1.0KG
[INFO] > 电能: HLW8032 就绪 (UART5 PD2)
[INFO] > OLED: 初始化完成
@ -107,99 +43,10 @@
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 8986032524791123631
[INFO] > 4G: CGATT 未附着,重试 3/30
[INFO] > 4G: CGATT 未附着,重试 6/30
[INFO] > 4G: CGATT 未附着,重试 9/30
[INFO] > 4G: CGATT 未附着,重试 12/30
[INFO] > 4G: CGATT 未附着,重试 15/30
[INFO] > 4G: CGATT 未附着,重试 18/30
[INFO] > 4G: CGATT 未附着,重试 21/30
[INFO] > 4G: CGATT 未附着,重试 24/30
[INFO] > 4G: CGATT 未附着,重试 27/30
[INFO] > 4G: CGATT 未附着,重试 30/30
[WARN] > 4G: CGATT 附着超时
[WARN] > 4G: 网络失败,重试 2
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 8986032524791123631
[INFO] > 4G: PDN 已激活
[INFO] > 4G: 信号 51% (rssi=16)
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * BootLoader *
[INFO] * Flash: 256KB *
[INFO] * * * * * By Helei * * * * * *
[INFO] [BL] 上次复位原因: 软件
[INFO] > 固件校验通过
[INFO] [BL] 正在跳转到 APP1 @0x08008000...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * 版本: 1.5.6 (RTOS) *
[INFO] * * * * * * * By Helei * * * *
[INFO] > EEPROM 探测: 写=0xA5, 读=0xA5
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBE12, Ver=0
[INFO] > EEPROM 写入成功
[INFO] > EEPROM 写入完成, Magic=0xDEADBEEF
[INFO] > EEPROM 回读校验 err=0, Magic=0xDEADBEEF, Ver=0
[INFO] EEPROM 配置已修复, Ver=0
[INFO] > 服务器: 58.17.14.95:1880
[INFO] > 客户端ID: 5791a8579d459290
[INFO] > 用户名: 766990788193702677
[INFO] > 版本序号: 0
[INFO] > W25Q64 初始化成功, ID=0xEF4017
[INFO] > 历史重启记录(新→旧):
[INFO] [1] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00分
[INFO] [2] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00分
[INFO] [3] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [5] 重启原因: 按键复位 运行时间: 0天00小时06分
[INFO] [6] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [7] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [8] 重启原因: 被平台踢下线 运行时间: 0天06小时42分
[INFO] [9] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [10] 重启原因: 串口OTA命令 运行时间: 0天01小时05分
[INFO] SW1:关
[INFO] SW2:关
[INFO] SW3:关
[INFO] SW4:关
[INFO] > 产品模式: 称重投料(带秤)
[INFO] > GPS 定位: 关闭(GPS0)
[INFO] > FEED: 初始化, 去皮=1.0KG, 单次投料=1.0KG
[INFO] > 电能: HLW8032 就绪 (UART5 PD2)
[INFO] > OLED: 初始化完成
[INFO] > 4G: 初始化...
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 8986032524791123631
[INFO] > 4G: PDN 已激活
[INFO] > 4G: 信号 51% (rssi=16)
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[WARN] > 4G: TCP 连接超时,last[6]:
OK
[WARN] > AT 超时 [r1]: AT+MSUB="/iot/data/down/5791a8579d459290",0
[WARN] > 4G: MSUB 失败,buff[21]:
+CME ERROR: 767
[WARN] > 4G: MQTT 失败,重试 2
[WARN] > AT 超时 [r1]: AT+MDISCONNECT
[WARN] > AT 超时 [r1]: AT+MIPSTOP
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 8986032524791123631
[INFO] > 4G: ICCID 89860325247911236319
[INFO] > 4G: CGATT 已附着
[INFO] > 4G: 信号 45% (rssi=14)
[INFO] > 4G: 信号 67% (rssi=21)
[INFO] > 4G: GNSS 已开启
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[INFO] > 4G: MQTT OK
@ -214,151 +61,47 @@ OK
[INFO] > FEED: 首次查询已发送
[INFO] > OTA 已确认MQTT Ready + 首次发布成功 + 延迟9s
[INFO] > 运行时间: 0天--00小时--01分钟
[INFO] > GPS: 未定位(run=1 fix=0),跳过
[INFO] > 运行时间: 0天--00小时--02分钟
[INFO] > 运行时间: 0天--00小时--03分钟
[INFO] > MQTT:
+MSUB: "/iot/data/down/5791a8579d459290",174 byte,{"id":"f780b84564dd993c","header":"iot.ota.upgrade.post","body":{"crc16":"dcb0","ver":1,"url":"http://58.17.14.95:81/ota/pull/996026e2519054b0.bin",
[INFO] > OTA 升级命令!
[INFO] > OTA 版本: 当前=0, 新版本=1, crc16=0xDCB0
[INFO] > OTA 下载地址: http://58.17.14.95:81/ota/pull/996026e2519054b0.bin
[INFO] > OTA: 58.17.14.95:81/ota/pull/996026e2519054b0.bin
[INFO] > OTA: 进入
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > OTA: 网络...
[INFO] > OTA: 第二次 AT 测试
[INFO] > OTA: 第二次 AT 成功
[INFO] > OTA: 等待网络附着...
[INFO] > 4G: CGATT 已附着
[INFO] > SAPBR...
[INFO] > OTA: MQTT 就绪
[INFO] > HTTP: http://58.17.14.95:81/ota/pull/996026e2519054b0.bin
[INFO] > HEAD...
[INFO] > 大小=81156B
[INFO] **************************************
[INFO] * OTA 升级开始 *
[INFO] * 大小: 81156 字节 *
[INFO] **************************************
[INFO] > 正在擦除 W25Q64 新槽位...
[INFO] > W25Q64 新槽位擦除完成
[INFO] [下载] 开始 >>>
[INFO] > DL 偏移=0
[INFO] > [ 3%] 3072/81156B
[INFO] > DL 偏移=3072
[INFO] > [ 7%] 6144/81156B
[INFO] > DL 偏移=6144
[INFO] > [ 11%] 9216/81156B
[INFO] > DL 偏移=9216
[INFO] > [ 15%] 12288/81156B
[INFO] > DL 偏移=12288
[INFO] > [ 18%] 15360/81156B
[INFO] > DL 偏移=15360
[INFO] > [ 22%] 18432/81156B
[INFO] > DL 偏移=18432
[INFO] > [ 26%] 21504/81156B
[INFO] > DL 偏移=21504
[INFO] > [ 30%] 24576/81156B
[INFO] > DL 偏移=24576
[INFO] > [ 34%] 27648/81156B
[INFO] > DL 偏移=27648
[INFO] > [ 37%] 30720/81156B
[INFO] > DL 偏移=30720
[INFO] > [ 41%] 33792/81156B
[INFO] > DL 偏移=33792
[INFO] > [ 45%] 36864/81156B
[INFO] > DL 偏移=36864
[INFO] > [ 49%] 39936/81156B
[INFO] > DL 偏移=39936
[INFO] > [ 52%] 43008/81156B
[INFO] > DL 偏移=43008
[INFO] > [ 56%] 46080/81156B
[INFO] > DL 偏移=46080
[INFO] > [ 60%] 49152/81156B
[INFO] > DL 偏移=49152
[INFO] > [ 64%] 52224/81156B
[INFO] > DL 偏移=52224
[INFO] > [ 68%] 55296/81156B
[INFO] > DL 偏移=55296
[INFO] > [ 71%] 58368/81156B
[INFO] > DL 偏移=58368
[INFO] > [ 75%] 61440/81156B
[INFO] > DL 偏移=61440
[INFO] > [ 79%] 64512/81156B
[INFO] > DL 偏移=64512
[INFO] > [ 83%] 67584/81156B
[INFO] > DL 偏移=67584
[INFO] > [ 87%] 70656/81156B
[INFO] > DL 偏移=70656
[INFO] > [ 90%] 73728/81156B
[INFO] > DL 偏移=73728
[INFO] > [ 94%] 76800/81156B
[INFO] > DL 偏移=76800
[INFO] > [ 98%] 79872/81156B
[INFO] > DL 偏移=79872
[INFO] > [100%] 81156/81156B
[INFO] > W25Q64 CRC16=0xDCB0 (服务器=0xDCB0)
[INFO] >>> 校验 81156B...
[INFO] [ OK ] 固件校验通过!
[INFO] **************************************
[INFO] * OTA 下载完成! *
[INFO] * 正在重启进入 BootLoader... *
[INFO] **************************************
[WARN] > AT 超时 [r3]: AT+MPUB="/iot/data/up/5791a8579d459290",0,0,"{\22header\22:\22iot.ota.result.post\22,\22body\22:{\22id\22:\22f780b84564dd993c\22,\22success\22:true}}"
[WARN] > AT 超时 [r2]: AT+MPUB="/iot/data/up/5791a8579d459290",0,0,"{\22header\22:\22iot.ota.result.post\22,\22body\22:{\22id\22:\22f780b84564dd993c\22,\22success\22:true}}"
[WARN] > AT 超时 [r1]: AT+MPUB="/iot/data/up/5791a8579d459290",0,0,"{\22header\22:\22iot.ota.result.post\22,\22body\22:{\22id\22:\22f780b84564dd993c\22,\22success\22:true}}"
[WARN] > OTA 结果上报失败(重试 3 次无 OK)
[INFO] > 运行时间: 0天--00小时--04分钟
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * BootLoader *
[INFO] * Flash: 256KB *
[INFO] * * * * * By Helei * * * * * *
[INFO] [BL] 上次复位原因: 软件
[INFO] [BL] 外部 Flash 中有新固件ver=1 size=81156 crc=0xDCB0
[INFO] [BL] 上次复位原因: 上电 按键
[INFO] > 固件校验通过
[INFO] [BL] 擦除备份槽...
[INFO] [BL] 备份 APP1 -> 外部 Flash 0x000000大小=229376
[INFO] [BL] 备份完成crc=0x3567
[INFO] [BL] 正在更新 APP1...
[INFO] > 擦除 112 页,起始地址 0x8008000...
[INFO] > 擦除完成112 页)
[INFO] [BL] 拷贝外部 Flash 0x040000 -> APP1 0x08008000大小=81156
[INFO] > 进度: 16/79 KB (20%)
[INFO] > 进度: 32/79 KB (40%)
[INFO] > 进度: 48/79 KB (60%)
[INFO] > 进度: 64/79 KB (80%)
[INFO] [ OK ] 拷贝完成
[INFO] > 固件校验通过
[INFO] [BL] APP1 更新成功crc=0xDCB0跳转运行
[INFO] [BL] 正在跳转到 APP1 @0x08008000...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * 版本: 1.5.6 (RTOS) *
[INFO] * 版本: 1.5.7 (RTOS) *
[INFO] * * * * * * * By Helei * * * *
[INFO] > EEPROM 探测: 写=0xA5, 读=0xA5
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=0
[INFO] EEPROM 配置有效, Ver=0
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=1
[INFO] EEPROM 配置有效, Ver=1
[INFO] > 服务器: 58.17.14.95:1880
[INFO] > 客户端ID: 5791a8579d459290
[INFO] > 用户名: 766990788193702677
[INFO] > 版本序号: 0
[INFO] > 版本序号: 1
[INFO] > W25Q64 初始化成功, ID=0xEF4017
[INFO] > 历史重启记录(新→旧):
[INFO] [1] 重启原因: OTA升级完成 运行时间: 0天00小时03
[INFO] [2] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00
[INFO] [3] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [5] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [6] 重启原因: 按键复位 运行时间: 0天00小时06
[INFO] [7] 重启原因: 被平台踢下线 运行时间: 0天00小时03
[INFO] [8] 重启原因: 被平台踢下线 运行时间: 0天00小时03
[INFO] [9] 重启原因: 被平台踢下线 运行时间: 0天06小时42
[INFO] [10] 重启原因: 按键复位 运行时间: 0天00小时00
[INFO] [1] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [2] 重启原因: 软件复位(未标记) 运行时间: 0天00小时19分
[INFO] [3] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [5] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [6] 重启原因: OTA升级完成 运行时间: 0天00小时08分
[INFO] [7] 重启原因: 4G初始化失败 运行时间: 0天00小时00分
[INFO] [8] 重启原因: 被平台踢下线 运行时间: 0天00小时08分
[INFO] [9] 重启原因: 被平台踢下线 运行时间: 0天00小时05分
[INFO] [10] 重启原因: 串口RESET命令 运行时间: 0天00小时01分
[INFO] SW1:关
[INFO] SW2:关
[INFO] SW3:关
[INFO] SW4:关
[INFO] > 产品模式: 称重投料(带秤)
[INFO] > GPS 定位: 关闭(GPS0)
[INFO] > GPS 定位: 开启
[INFO] > FEED: 初始化, 去皮=1.0KG, 单次投料=1.0KG
[INFO] > 电能: HLW8032 就绪 (UART5 PD2)
[INFO] > OLED: 初始化完成
@ -369,7 +112,8 @@ OK
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 89860325247911236319
[INFO] > 4G: CGATT 已附着
[INFO] > 4G: 信号 48% (rssi=15)
[INFO] > 4G: 信号 58% (rssi=18)
[INFO] > 4G: GNSS 已开启
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[INFO] > 4G: MQTT OK
@ -382,44 +126,156 @@ OK
[INFO] SW4:关(恢复)
[INFO] > Main: MQTT Ready 后首次状态上报
[INFO] > FEED: 首次查询已发送
[INFO] > OTA 已确认MQTT Ready + 首次发布成功 + 延迟9s
[INFO] > 运行时间: 0天--00小时--01分钟
[INFO] > GPS: 未定位(run=1 fix=0),跳过
[INFO] > 运行时间: 0天--00小时--02分钟
[INFO] > 运行时间: 0天--00小时--03分钟
[INFO] > 运行时间: 0天--00小时--04分钟
[INFO] > 运行时间: 0天--00小时--05分钟
[INFO] > 运行时间: 0天--00小时--06分钟
[INFO] > GPS: 未定位(run=1 fix=0),跳过
[INFO] > 运行时间: 0天--00小时--07分钟
[INFO] > MQTT:
+MSUB: "/iot/data/down/5791a8579d459290",174 byte,{"id":"96a459ebd6d35334","header":"iot.ota.upgrade.post","body":{"crc16":"e786","ver":2,"url":"http://58.17.14.95:81/ota/pull/6d342f16358716a6.bin",
[INFO] > OTA 升级命令!
[INFO] > OTA 版本: 当前=1, 新版本=2, crc16=0xE786
[INFO] > OTA 下载地址: http://58.17.14.95:81/ota/pull/6d342f16358716a6.bin
[INFO] > OTA: 58.17.14.95:81/ota/pull/6d342f16358716a6.bin
[INFO] > OTA: 进入
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > OTA: 网络...
[INFO] > OTA: 第二次 AT 测试
[INFO] > OTA: 第二次 AT 成功
[INFO] > OTA: 等待网络附着...
[INFO] > 4G: CGATT 已附着
[INFO] > SAPBR...
[INFO] > OTA: MQTT 就绪
[INFO] > HTTP: http://58.17.14.95:81/ota/pull/6d342f16358716a6.bin
[INFO] > HEAD...
[INFO] > 大小=81292B
[INFO] **************************************
[INFO] * OTA 升级开始 *
[INFO] * 大小: 81292 字节 *
[INFO] **************************************
[INFO] > 正在擦除 W25Q64 新槽位...
[INFO] > W25Q64 新槽位擦除完成
[INFO] [下载] 开始 >>>
[INFO] > DL 偏移=0
[INFO] > [ 3%] 3072/81292B
[INFO] > DL 偏移=3072
[INFO] > [ 7%] 6144/81292B
[INFO] > DL 偏移=6144
[INFO] > [ 11%] 9216/81292B
[INFO] > DL 偏移=9216
[INFO] > [ 15%] 12288/81292B
[INFO] > DL 偏移=12288
[INFO] > [ 18%] 15360/81292B
[INFO] > DL 偏移=15360
[INFO] > [ 22%] 18432/81292B
[INFO] > DL 偏移=18432
[INFO] > [ 26%] 21504/81292B
[INFO] > DL 偏移=21504
[INFO] > [ 30%] 24576/81292B
[INFO] > DL 偏移=24576
[INFO] > [ 34%] 27648/81292B
[INFO] > DL 偏移=27648
[INFO] > [ 37%] 30720/81292B
[INFO] > DL 偏移=30720
[INFO] > [ 41%] 33792/81292B
[INFO] > DL 偏移=33792
[INFO] > [ 45%] 36864/81292B
[INFO] > DL 偏移=36864
[INFO] > [ 49%] 39936/81292B
[INFO] > DL 偏移=39936
[INFO] > [ 52%] 43008/81292B
[INFO] > DL 偏移=43008
[INFO] > [ 56%] 46080/81292B
[INFO] > DL 偏移=46080
[INFO] > [ 60%] 49152/81292B
[INFO] > DL 偏移=49152
[INFO] > [ 64%] 52224/81292B
[INFO] > DL 偏移=52224
[INFO] > [ 68%] 55296/81292B
[INFO] > DL 偏移=55296
[INFO] > [ 71%] 58368/81292B
[INFO] > DL 偏移=58368
[INFO] > [ 75%] 61440/81292B
[INFO] > DL 偏移=61440
[INFO] > [ 79%] 64512/81292B
[INFO] > DL 偏移=64512
[INFO] > [ 83%] 67584/81292B
[INFO] > DL 偏移=67584
[INFO] > [ 86%] 70656/81292B
[INFO] > DL 偏移=70656
[INFO] > [ 90%] 73728/81292B
[INFO] > DL 偏移=73728
[INFO] > [ 94%] 76800/81292B
[INFO] > DL 偏移=76800
[INFO] > [ 98%] 79872/81292B
[INFO] > DL 偏移=79872
[INFO] > [100%] 81292/81292B
[INFO] > W25Q64 CRC16=0xE786 (服务器=0xE786)
[INFO] >>> 校验 81292B...
[INFO] [ OK ] 固件校验通过!
[INFO] **************************************
[INFO] * OTA 下载完成! *
[INFO] * 正在重启进入 BootLoader... *
[INFO] **************************************
[INFO] > OTA 结果已发送(不等OK): success=1
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * BootLoader *
[INFO] * Flash: 256KB *
[INFO] * * * * * By Helei * * * * * *
[INFO] [BL] 上次复位原因: IWDG看门狗
[WARN] [BL] APP 卡死(看门狗复位),试错次数=1
[INFO] [BL] 上次复位原因: 软件
[INFO] [BL] 外部 Flash 中有新固件ver=2 size=81292 crc=0xE786
[INFO] > 固件校验通过
[INFO] [BL] 擦除备份槽...
[INFO] [BL] 备份 APP1 -> 外部 Flash 0x000000大小=229376
[INFO] [BL] 备份完成crc=0xC6DC
[INFO] [BL] 正在更新 APP1...
[INFO] > 擦除 112 页,起始地址 0x8008000...
[INFO] > 擦除完成112 页)
[INFO] [BL] 拷贝外部 Flash 0x040000 -> APP1 0x08008000大小=81292
[INFO] > 进度: 16/79 KB (20%)
[INFO] > 进度: 32/79 KB (40%)
[INFO] > 进度: 48/79 KB (60%)
[INFO] > 进度: 64/79 KB (80%)
[INFO] [ OK ] 拷贝完成
[INFO] > 固件校验通过
[INFO] [BL] APP1 更新成功crc=0xE786跳转运行
[INFO] [BL] 正在跳转到 APP1 @0x08008000...
[INFO]
[INFO] * * * * * * * * * * * * * * * * * *
[INFO] * 版本: 1.5.6 (RTOS) *
[INFO] * 版本: 1.5.8 (RTOS) *
[INFO] * * * * * * * By Helei * * * *
[INFO] > EEPROM 探测: 写=0xA5, 读=0xA5
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=0
[INFO] EEPROM 配置有效, Ver=0
[INFO] > EEPROM 读取 err=0, Magic=0xDEADBEEF, Ver=1
[INFO] EEPROM 配置有效, Ver=1
[INFO] > 服务器: 58.17.14.95:1880
[INFO] > 客户端ID: 5791a8579d459290
[INFO] > 用户名: 766990788193702677
[INFO] > 版本序号: 0
[INFO] > 版本序号: 1
[INFO] > W25Q64 初始化成功, ID=0xEF4017
[INFO] > 历史重启记录(新→旧):
[INFO] [1] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [2] 重启原因: OTA升级完成 运行时间: 0天00小时03分
[INFO] [3] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00分
[INFO] [4] 重启原因: 软件复位(未标记) 运行时间: 0天00小时00分
[INFO] [5] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [6] 重启原因: 按键复位 运行时间: 0天00小时00分
[INFO] [7] 重启原因: 按键复位 运行时间: 0天00小时06分
[INFO] [8] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [9] 重启原因: 被平台踢下线 运行时间: 0天00小时03分
[INFO] [10] 重启原因: 被平台踢下线 运行时间: 0天06小时42分
[INFO] [1] 重启原因: OTA升级完成 运行时间: 0天00小时07
[INFO] [2] 重启原因: 按键复位 运行时间: 0天00小时00
[INFO] [3] 重启原因: 软件复位(未标记) 运行时间: 0天00小时19
[INFO] [4] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [5] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [6] 重启原因: 卡死看门狗溢出 运行时间: 0天00小时00分
[INFO] [7] 重启原因: OTA升级完成 运行时间: 0天00小时08
[INFO] [8] 重启原因: 4G初始化失败 运行时间: 0天00小时00
[INFO] [9] 重启原因: 被平台踢下线 运行时间: 0天00小时08
[INFO] [10] 重启原因: 被平台踢下线 运行时间: 0天00小时05
[INFO] SW1:关
[INFO] SW2:关
[INFO] SW3:关
[INFO] SW4:关
[INFO] > 产品模式: 称重投料(带秤)
[INFO] > GPS 定位: 关闭(GPS0)
[INFO] > GPS 定位: 开启
[INFO] > FEED: 初始化, 去皮=1.0KG, 单次投料=1.0KG
[INFO] > 电能: HLW8032 就绪 (UART5 PD2)
[INFO] > OLED: 初始化完成
@ -429,25 +285,9 @@ OK
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 89860325247911236319
[INFO] > 4G: CGATT 未附着,重试 3/30
[INFO] > 4G: CGATT 未附着,重试 6/30
[INFO] > 4G: CGATT 未附着,重试 9/30
[INFO] > 4G: CGATT 未附着,重试 12/30
[INFO] > 4G: CGATT 未附着,重试 15/30
[INFO] > 4G: CGATT 未附着,重试 18/30
[INFO] > 4G: CGATT 未附着,重试 21/30
[INFO] > 4G: CGATT 未附着,重试 24/30
[INFO] > 4G: CGATT 未附着,重试 27/30
[INFO] > 4G: CGATT 未附着,重试 30/30
[WARN] > 4G: CGATT 附着超时
[WARN] > 4G: 网络失败,重试 2
[INFO] > 4G: 复位...
[INFO] > 4G: 复位完成
[INFO] > 4G: 网络...
[WARN] > AT 超时 [r1]: AT
[INFO] > 4G: ICCID 89860325247911236319
[INFO] > 4G: PDN 已激活
[INFO] > 4G: 信号 38% (rssi=12)
[INFO] > 4G: 信号 61% (rssi=19)
[INFO] > 4G: GNSS 已开启
[INFO] > 4G: 网络 OK
[INFO] > 4G: MQTT...
[INFO] > 4G: MQTT OK
@ -461,7 +301,9 @@ OK
[INFO] > Main: MQTT Ready 后首次状态上报
[INFO] > FEED: 首次查询已发送
[INFO] > EEPROM 写入成功
[INFO] > OTA 版本已保存并校验: 1
[INFO] > OTA 版本已保存并校验: 2
[INFO] > OTA 确认标志已写入
[INFO] > OTA 结果已上报: success=1
[INFO] > OTA 已确认MQTT Ready + 首次发布成功 + 延迟9s
[INFO] > 运行时间: 0天--00小时--01分钟
[INFO] > GPS: 未定位(run=1 fix=0),跳过

View File

@ -155,3 +155,7 @@
切换自动重启生效;原 5 处 #if 编译分支改运行时判断GNSS 初始化/GPS 轮询)
- OTA 通知链理顺:下载完成后的 result.post(success) 改为发了就走不等 OK下载后 MQTT 会话可能僵死,
等 OK 白卡 12s 且发不出);平台以重启后的 confirm.post等 OK+30s 重试必达)为权威成功信号
- OTA 闭环修复W25Q64 OTA 信息结构新增 ota_id平台任务 id 随固件信息落盘),新固件首启确认时
在可靠连接上补发 result.post(success=1, 任务id) + confirm.post——平台"完成"标志可正常闭环
- 注意OTA 信息结构变化BootLoader 的 w25q64.h 已同步,**需 J-Link 刷一次新 BL**
(旧 BL 读不了新格式,会认不出待安装固件)