# GD32_Bootloader **Repository Path**: FlechazoCLF/gd32_bootloader ## Basic Information - **Project Name**: GD32_Bootloader - **Description**: gd32的IAP程序,Bootloader通过usart远程升级程序! - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: https://flechazo.mba/ - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 5 - **Created**: 2023-04-01 - **Last Updated**: 2026-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GD32 Bootloader 项目 本仓库包含基于 **GigaDevice GD32F1x0** 系列微控制器的 Bootloader 及其配套应用程序项目。 ## 项目概述 该系统采用 **Bootloader + Application (OTA)** 架构设计,支持通过 **RS485** 接口进行远程固件更新(IAP)。Bootloader 负责系统启动引导、Flash 管理(内部 Flash + 外部 GD25Q64 SPI Flash)以及固件完整性校验(CRC16)。 ## 主要功能特性 - **双应用备份**: 支持 **GD32APP1** 和 **GD32APP2** 两个应用程序分区的切换与升级,确保升级过程的安全性与容错性。 - **远程升级 (IAP)**: 通过 RS485 总线接收二进制固件数据,写入外部 Flash 或内部 Flash 特定分区。 - **数据校验**: 内置 **CRC16** 校验算法,保障数据传输和存储的可靠性。 - **外设支持**: 完善的 Board Support Package (BSP),支持 LED 指示、蜂鸣器、继电器控制、红外遥控接收以及定时器管理。 - **状态监控**: 提供 Bootloader 运行状态、升级进度等监控功能。 ## 目录结构 - `bootloader/`: Bootloader 引导程序源码。 - `Libraries/`: CMSIS 内核库与 GD32 标准外设库。 - `User/`: 应用层代码(IAP 逻辑、串口通信、BSP 驱动)。 - `keil/`: Keil 工程文件。 - `GD32APP1/`: 用户应用程序 1 源码(包含 FreeRTOS 任务、电机控制、灯光控制等逻辑)。 - `GD32APP2/`: 用户应用程序 2 源码。 - `bin/`: 预编译的二进制固件文件 (`bootloader.bin`, `1.bin`, `2.bin` 等)。 ## 硬件依赖 - **MCU**: GD32F1x0 系列 (例如 GD32F150) - **外部存储**: **GD25Q64** (64M-bit SPI Flash) - **通信接口**: RS485 (USART0), 调试串口 (USART1) - **其他外设**: LED, 蜂鸣器, 继电器, 红外接收头 ## 软件开发环境 - **IDE**: Keil MDK-ARM - **编译器**: ARMCC V5/V6 - **调试器**: J-Link 或 Nu-Link ## 编译指南 1. **编译 Bootloader**: - 打开 `bootloader/keil/project.uvprojx`。 - 确保系统时钟配置正确(默认 72MHz PLL)。 - 编译生成 `bootloader.bin`,烧录地址为 `0x08000000`。 2. **编译应用程序 (以 GD32APP1 为例)**: - 打开 `GD32APP1/keil/project.uvprojx`。 - 修改分散加载文件(`.sct`),将应用程序的起始地址设置为 Bootloader 之后的地址(例如 `0x08005000`)。 - 编译生成 `app.bin`,通过 Bootloader 的 IAP 命令烧录至芯片,或直接烧录至对应偏移地址。 ## 通信协议 (简要) Bootloader 与上位机通过 RS485 进行异步串行通信。 - **帧格式**: 起始符 | 地址 | 数据长度 | 数据域 | CRC16 校验 - **主要指令**: - **ERASE_FLASH**: 擦除目标 Flash 分区。 - **WRITE_DATA**: 写入固件数据。 - **VERIFY_DATA**: 校验固件数据。 - **JUMP_APP**: 跳转到应用程序执行。 ## 许可证 本项目为开源项目,具体许可协议请参阅源码头部声明或 LICENSE 文件(如有)。