# STM8 汇编 Bootloader(并行验证工程) 本目录是独立的汇编 Bootloader 实验工程,不修改现有 `STM8_Bootloader` C 版本。 当前阶段已经实现固定中断向量、应用程序跳转、SPI1初始化、W25Q80BV JEDEC ID 读取、OTA元数据处理、OTA固件搬运、升级成功结果写回、应用损坏自动恢复,以及 上电长按后的出厂镜像恢复流程:先分段计算CRC16/MODBUS,校验通过后擦除内部 应用区,再逐字节写入并回读比较,成功后跳转到应用程序。固件读取采用小步处理, 不把整包镜像装入RAM。 OTA元数据使用:镜像地址0x003000、元数据地址0x005000;校验成功搬运后将 0x005010写为成功结果码,并清除0x00500F升级请求。若OTA校验、擦除、写入或 回读失败,Bootloader直接跳转主程序。若应用首字节不是0x82,则自动检查并尝试 恢复出厂镜像;本汇编Bootloader不启用看门狗,也不依赖看门狗复位。 该流程已经完成编译和链接验证,但仍需要连接实际W25Q80BV验证JEDEC读取、外部 Flash数据读取、内部Flash擦写时序以及恢复失败时的现场行为。 如果外部Flash检测失败,当前策略仍是允许内部主程序继续运行;这是为了避免外部 Flash故障导致设备完全无法工作。实际量产策略还需要在搬运功能完成后再补充应用 有效性判断和故障兜底。 ## 地址规划 - Bootloader:`0x8000~0x84FF` - Application:`0x8500~0x9FFF` - `0x8500` 为应用中断向量表起始地址,复位入口地址从 `0x8501` 动态读取 - TIM4 使用通用转发:`0x8064 -> 0x8564` - TIM4 IRQ23:固定向量 `0x8064`,转发目标 `0x8564` - UART1 RX IRQ18:固定向量 `0x8050`,转发目标 `0x8550` ## 构建 ```sh make ``` 输出文件为 `build/stm8_bootloader_asm.hex`。当前工程与 C Bootloader 并行存在, 未验证前不要烧录到量产设备。