feat: 完善Mesh继电器OTA升级闭环

This commit is contained in:
十七
2026-11-04 15:41:29 +08:00
parent be8bd7eaec
commit df1aad3d16
27 changed files with 1372 additions and 243 deletions
+2
View File
@@ -9,6 +9,8 @@
/** 初始化 Bootloader 所需的最小硬件资源。 */
void Bootloader_Init(void);
/** 刷新独立看门狗,供W25Q64和Flash等待循环调用。 */
void Bootloader_WatchdogRefresh(void);
/** 判断应用程序区域是否包含可执行程序。 */
uint8_t Bootloader_IsApplicationValid(void);
/** 跳转到应用程序入口地址,函数成功后不返回。 */
+9 -7
View File
@@ -19,14 +19,14 @@
#define APPLICATION_MAX_SIZE_BYTES \
(APPLICATION_END_ADDRESS - APPLICATION_START_ADDRESS + 1u)
/** W25Q64 中保存出厂固件镜像的固定地址,容量64KiB。 */
/** W25Q80BV中保存出厂固件镜像的固定地址,预留8KiB。 */
#define FACTORY_IMAGE_ADDRESS 0x000000ul
/** W25Q64 中保存出厂固件元数据的固定地址,独占4KiB扇区。 */
#define FACTORY_METADATA_ADDRESS 0x010000ul
/** W25Q64 中保存OTA升级固件的固定地址,容量64KiB。 */
#define OTA_IMAGE_ADDRESS 0x020000ul
/** W25Q64 中保存OTA元数据的固定地址,独占4KiB扇区。 */
#define OTA_METADATA_ADDRESS 0x030000ul
/** W25Q80BV中保存出厂固件元数据的固定地址,独占4KiB扇区。 */
#define FACTORY_METADATA_ADDRESS 0x002000ul
/** W25Q80BV中保存OTA升级固件的固定地址,预留8KiB。 */
#define OTA_IMAGE_ADDRESS 0x003000ul
/** W25Q80BV中保存OTA元数据的固定地址,独占4KiB扇区。 */
#define OTA_METADATA_ADDRESS 0x005000ul
/** 升级元数据魔数,用于避免误把普通数据当成升级请求。 */
#define OTA_METADATA_MAGIC 0x4F544131ul
/** 出厂恢复镜像元数据魔数。 */
@@ -53,5 +53,7 @@
#define FACTORY_BUTTON_HOLD_TIME_MS 5000u
/** Bootloader忙等待1ms的循环次数,需结合实际系统时钟校准。 */
#define BOOTLOADER_DELAY_1MS_LOOPS 1200u
/** 内部Flash单次擦写等待的最大循环次数,超时即判定操作失败。 */
#define BOOTLOADER_FLASH_WAIT_TIMEOUT 60000ul
#endif
@@ -54,6 +54,13 @@
#define GPIOC_DDR REG8(0x500Cu)
#define GPIOC_CR1 REG8(0x500Du)
/* GPIO Port D寄存器;PD4用于W25Q64片选CS#。 */
#define GPIOD_ODR REG8(0x500Fu)
#define GPIOD_IDR REG8(0x5010u)
#define GPIOD_DDR REG8(0x5011u)
#define GPIOD_CR1 REG8(0x5012u)
#define GPIOD_CR2 REG8(0x5013u)
#define SPI_CR1_SPE 0x40u
#define SPI_CR1_MSTR 0x04u
#define SPI_CR1_BR0 0x08u
+2 -2
View File
@@ -1,13 +1,13 @@
/**
* @file w25q64.h
* @brief W25Q64JV 硬件SPI访问接口。
* @brief W25Q80BV 硬件SPI访问接口。
*/
#ifndef STM8_BOOTLOADER_W25Q64_H
#define STM8_BOOTLOADER_W25Q64_H
#include <stdint.h>
/** 初始化STM8硬件SPI和W25Q64片选。 */
/** 初始化STM8硬件SPI和W25Q64片选;当前片选引脚为PD4。 */
void W25Q64_Init(void);
/** 读取W25Q64 JEDEC ID,便于启动时确认芯片存在。 */
uint32_t W25Q64_ReadJedecId(void);