feat: 完善Mesh继电器OTA与地址协议

- 增加STM8 Bootloader工程及出厂固件恢复流程\n- 增加W25Q64外部Flash驱动和OTA分包接收、CRC16校验、断点续传状态管理\n- 增加固件版本查询、升级结果上报与主机确认机制\n- 将业务帧从55 AA帧头调整为发送方Mesh短地址+CMD+LEN+DATA+CRC16\n- 修正JDY-28M外层地址与业务发送方地址的职责划分,支持广播请求定向应答\n- 同步更新硬件引脚、存储分区、OTA流程和主机通信协议文档\n- 已使用SDCC重新编译,应用代码大小为5512字节,链接地址为0x8800
This commit is contained in:
十七
2026-11-03 11:29:55 +08:00
parent d275a3523b
commit 42a4650a78
30 changed files with 2318 additions and 108 deletions
@@ -0,0 +1,57 @@
/**
* @file bootloader_config.h
* @brief Bootloader 的固定地址和安全策略配置。
*/
#ifndef STM8_BOOTLOADER_CONFIG_H
#define STM8_BOOTLOADER_CONFIG_H
#include <stdint.h>
/** Bootloader 在 STM8 程序 Flash 中的起始地址。 */
#define BOOTLOADER_START_ADDRESS 0x8000u
/** Bootloader 预留空间,当前规划为 1KB。 */
#define BOOTLOADER_SIZE_BYTES 0x0800u
/** 应用程序固定入口地址,必须与应用工程链接地址一致。 */
#define APPLICATION_START_ADDRESS 0x8800u
/** STM8S003F3P6 程序 Flash 的最后一个地址。 */
#define APPLICATION_END_ADDRESS 0x9FFFu
/** 应用程序允许使用的最大空间。 */
#define APPLICATION_MAX_SIZE_BYTES \
(APPLICATION_END_ADDRESS - APPLICATION_START_ADDRESS + 1u)
/** W25Q64 中保存出厂固件镜像的固定地址,容量64KiB。 */
#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
/** 升级元数据魔数,用于避免误把普通数据当成升级请求。 */
#define OTA_METADATA_MAGIC 0x4F544131ul
/** 出厂恢复镜像元数据魔数。 */
#define FACTORY_METADATA_MAGIC 0x46414331ul
/* 元数据字段相对于各自元数据扇区起始地址的固定偏移。 */
#define METADATA_MAGIC_OFFSET 0x00u
#define METADATA_IMAGE_SIZE_OFFSET 0x04u
#define METADATA_VERSION_OFFSET 0x08u
#define METADATA_CRC16_OFFSET 0x0Au
#define METADATA_IMAGE_VALID_OFFSET 0x0Eu
#define METADATA_UPGRADE_REQUEST_OFFSET 0x0Fu
#define METADATA_UPGRADE_RESULT_OFFSET 0x10u
/** 镜像已经完整写入并通过校验时使用的有效标志。 */
#define METADATA_IMAGE_VALID_VALUE 0xA5u
/** 应用程序有效标记,避免把空白 Flash 当作可执行程序。 */
#define APPLICATION_FIRST_BYTE_INVALID 0x00u
#define APPLICATION_FIRST_BYTE_ERASED 0xFFu
/** Bootloader 看门狗刷新周期,必须小于硬件看门狗超时时间。 */
#define BOOTLOADER_WATCHDOG_REFRESH_LOOP 20000u
/** 上电恢复按键判定时间,单位为毫秒。 */
#define FACTORY_BUTTON_HOLD_TIME_MS 5000u
/** Bootloader忙等待1ms的循环次数,需结合实际系统时钟校准。 */
#define BOOTLOADER_DELAY_1MS_LOOPS 1200u
#endif