# GD32_IAP_BOOTLOADER **Repository Path**: mj_yyfddca/gd32_iap_bootloader ## Basic Information - **Project Name**: GD32_IAP_BOOTLOADER - **Description**: # GD32_IAP_BOOTLOADER 简介 `GD32_IAP_BOOTLOADER` 是引导层固件,主要功能是: * 启动时检测升级标志位,判断是否存在新的 APP 固件 * 从外部 Flash 读取固件,写入内部 Flash,完成安全升级 * 支持 SP / RESET 校验,确保固件有效性 * 内部 Flash 擦写 + 对齐写入保证升级安全可靠 * 完全兼容 `GD32_IAP_ - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-03 - **Last Updated**: 2026-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: gd32, IAP ## README Based on the code map provided, I can see this is a GD32F4xx IAP (In-Application Programming) bootloader project. Let me analyze the key components: **Key components from the code map:** - **bootLoader_drv.c/h**: Core bootloader with APP1_ADDR, APP2_ADDR, FSInit(), Bootloader_FlashApp(), JumpToApp(), ExistApplication(), RunApp() - **w25qxx_drv.c/h**: W25Qxx Flash memory driver - **FATFS**: File system support (FatFs) - **HARDWARE**: BSP for flash, LED, SPI, USART - **USER/main.c**: Main entry point # GD32 IAP Bootloader ## 项目简介 GD32 IAP Bootloader 是一款为 GD32F4xx 系列MCU设计的在应用编程(In-Application Programming)引导程序。该 bootloader 支持通过文件系统从外部 Flash (W25Qxx) 升级应用程序,具备双应用区备份功能。 ## 功能特性 - **双应用区支持**: 支持两个应用程序区域(APP1和APP2),实现安全升级 - **文件系统升级**: 通过 FatFs 文件系统读取 SD卡 或 SPI Flash 中的升级文件 - **W25Qxx Flash 驱动**: 集成 W25Qxx 系列外部 Flash 读写驱动 - **启动跳转**: 安全跳转到用户应用程序 - **错误追踪**: 集成 CmBacktrace 错误追踪库,方便故障诊断 ## 硬件要求 - **MCU**: GD32F4xx 系列 (GD32F450/GD32F470) - **外部存储**: W25Qxx SPI Flash - **调试接口**: USART (用于日志输出) ## 目录结构 ``` . ├── CMSIS/ # ARM Cortex-M4 内核及 GD32 芯片头文件 ├── DRIVER/ # Bootloader 驱动 (Flash, 文件系统) ├── FATFS/ # FatFs 文件系统 ├── FWLIB/ # GD32 标准外设库 ├── HARDWARE/ # 硬件抽象层 (BSP) ├── SYSTEM/ # 系统延时、GPIO、USART ├── USER/ # 用户代码 (main, 中断) ├── cm_backtrace/ # ARM Cortex-M 错误追踪库 └── STARTUP/ # 启动文件 ``` ## 使用说明 ### 编译 项目支持 Keil MDK 和 IAR 开发环境: ```bash # Keil MDK open gd32_iap_bootloader.uvprojx # 或使用 CMake mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/arm-gd32f470.cmake make ``` ### 应用程序地址配置 在 `DRIVER/bootLoader_drv.h` 中配置: | 参数 | 说明 | |------|------| | APP1_ADDR | 应用程序1起始地址 | | APP2_ADDR | 应用程序2起始地址 | | APP_MAX_SIZE | 单个应用程序最大长度 | | UPDATE_FLAG_ADDR | 升级标志存储地址 | ### 升级流程 1. 将待升级的应用程序二进制文件(需命名为如 `app.bin`)放入 SD卡或外部 Flash 2. bootloader 检测到升级标志后,自动读取升级文件 3. 将新程序写入指定的应用程序区域 4. 升级完成后跳转到新程序执行 ### JumpToApp 使用示例 ```c #include "bootLoader_drv.h" // 跳转到应用程序 JumpToApp(APP1_ADDR); // 检查应用程序是否存在 if (ExistApplication(APP1_ADDR)) { // 运行应用程序 RunApp(); } ``` ## 注意事项 1. 应用程序编译时需要设置正确的链接地址,对应 bootloader 指定的 APP1_ADDR 或 APP2_ADDR 2. 应用程序向量表需要重新偏移到对应的 SRAM 起始地址 3. 确保应用程序栈指针初始值设置正确 ## 许可证 本项目基于 MIT 许可证开源。 ## 参考资源 - [GD32F4xx 数据手册](https://www.gd32mcu.com) - [FatFs 文档](http://elm-chan.org/fsw/ff/00index_e.html) - [W25Qxx 数据手册](https://www.winbond.com)