# GD32_IAP_APP **Repository Path**: mj_yyfddca/gd32_iap ## Basic Information - **Project Name**: GD32_IAP_APP - **Description**: # GD32_IAP_APP 简介 `GD32_IAP_APP` 是应用层固件升级程序,主要功能是: * 通过 UART + YModem 协议接收上位机发送的 `.bin` 固件(兼容 SecureCRT / TeraTerm) * 将固件写入外部 SPI Flash(W25Q128),并通过 FatFs 文件系统管理 * 设置升级标志位,触发 Bootloader 执行升级 * 提供完整日 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: gd32, OTA, IAP, usart ## README # GD32 IAP - 嵌入式IAP固件升级解决方案 ## 项目简介 本项目是一款针对GIGA DEVICE GD32F4xx系列微控制器设计的IAP(In-Application Programming,应用程序内编程)固件升级解决方案。通过YModem协议实现无线/有线方式将固件从上位机下载到MCU的外部Flash中,并支持FatFS文件系统管理。 ### 主要特性 - ✅ **YModem协议传输** - 支持标准YModem协议进行固件文件传输 - ✅ **FatFS文件系统** - 集成FatFS,支持在外部W25Qxx FLASH上创建和管理文件系统 - ✅ **多型号支持** - 支持GD32F405/407/450/470系列MCU - ✅ **错误追踪** - 集成CmBacktrace库,自动追踪和分析ARM Cortex-M系列MCU运行错误 - ✅ **串口日志** - 完整的DEBUG串口调试输出 - ✅ **双串口通信** - 支持USART0和USART1双串口 ## 硬件要求 | 项目 | 规格 | |------|------| | MCU | GD32F405/GD32F407/GD32F450/GD32F470 | | 主频 | 最高240MHz | | Flash | 内置Flash + 外部W25Qxx SPI Flash | | 通信 | USART0 (调试) / USART1 (YModem) | ## 目录结构 ``` gd32_iap ├── CMSIS/ # ARM Cortex-M4 内核相关 │ ├── GD/ # GD32芯片相关头文件 │ └── core_cm4.h # CMSIS内核头文件 ├── FWLIB/ # GD32F4xx外设驱动库 │ ├── Include/ # 头文件 │ └── Source/ # 源代码 ├── DRIVER/ # 外部器件驱动 │ ├── w25qxx_drv.c/h # W25Qxx FLASH驱动 ├── FATFS/ # FatFS文件系统 │ ├── diskio.c/h # 磁盘IO驱动 │ ├── ff.c/h # FatFS核心 │ └── ffconf.h # FatFS配置 ├── HARDWARE/ # 板级驱动 │ ├── bsp_flash.c/h # Flash操作 │ ├── bsp_led.c/h # LED驱动 │ ├── bsp_spi.c/h # SPI驱动 │ └── bsp_usart.c/h # 串口驱动 ├── YMODEM/ # YModem协议实现 │ ├── common.c/h # 通用工具 │ ├── driverCrc16.c/h # CRC16计算 │ ├── menu.c/h # 下载菜单 │ ├── ymodem.c/h # YModem核心 │ └── ymodem_port.c/h # 平台适配层 ├── USER/ # 用户应用程序 │ ├── main.c # 主程序 │ ├── gd32f4xx_it.c/h # 中断处理 │ └── systick.c/h # 系统定时器 ├── SYSTEM/ # 系统工具 │ ├── delay/ # 延时函数 │ └── sys/ # 系统配置 └── cm_backtrace/ # 错误追踪库 ``` ## 快速开始 ### 编译环境 推荐使用以下工具链进行编译: - **Keil MDK** - 版本5.17及以上 - **IAR EWARM** - 版本7.5及以上 - **GCC ARM Embedded** - 版本6及以上 ### 硬件连接 ``` +------------------+ +------------------+ | PC (上位机) | | GD32F470开发板 | +------------------+ +------------------+ | | | | | USART1 (YModem)|---->| USART1 | | (Baud:115200) | | | | | +------------------+ | | | USART0 (调试) |---->| USART0 (可选) +------------------+ ``` ### 固件下载流程 1. **硬件连接** - 将USART1连接到PC(YModem通信) - 将USART0连接到PC(调试日志,可选) - 确保W25Qxx FLASH正确连接 2. **编译项目** - 使用Keil MDK或IAR打开工程 - 选择对应的芯片型号 - 编译并下载Bootloader 3. **启动下载模式** - 系统上电后自动进入下载模式 - 或通过串口菜单选择固件升级 4. **使用YModem传输** - 打开串口终端软件(如SecureCRT) - 选择YModem协议发送固件文件 - 等待传输完成 ## 使用说明 ### 串口命令 | 命令 | 说明 | |------|------| | `1` | 进入固件下载模式 | | 其他 | 显示帮助信息 | ### API参考 #### Flash操作 ```c // 初始化Flash void FlashInit(void); // 擦除扇区 int FlashAppErase(int StartSectorId, int EndSectorId); // 写入数据 int FlashWrite(__IO uint32_t *address, uint32_t *buffer, int length); ``` #### YModem下载 ```c // 进入下载模式 void FirmwareDownloadMode(void); // 执行下载 void SerialDownLoad(void); ``` #### 文件系统 ```c // 初始化文件系统 void FSInit(void); // 读取文件内容 void Print_File_Content(void); ``` ## 配置说明 ### 系统时钟配置 系统默认配置为240MHz PLL时钟,使用8MHz外部晶振: ```c #define __IRC16M // 内部16MHz RC振荡器 #define __HXTAL // 外部高频晶振 #define __SYSTEM_CLOCK_240M_PLL_8M_HXTAL // 240MHz PLL ``` ### FatFS配置 在`FATFS/ffconf.h`中可以配置: - `FF_FS_READONLY` - 只读模式 - `FF_USE_LFN` - 长文件名支持 - `FF_MAX_LFN` - 最大文件名长度 - `FF_VOLUMES` - 卷数量 ### W25Qxx配置 支持的FLASH芯片: - W25Q80 (8Mbit) - W25Q16 (16Mbit) - W25Q32 (32Mbit) - W25Q64 (64Mbit) - W25Q128 (128Mbit) ## 常见问题 ### Q: 串口无输出 **A**: 检查以下内容: 1. 波特率是否为115200 2. USART0配置是否正确 3. 是否已使能USART时钟 ### Q: YModem传输失败 **A**: 1. 确认串口参数:115200, 8N1 2. 检查握手信号是否正常 3. 确认文件大小不超过Flash容量 ### Q: Flash写入失败 **A**: 1. 检查W25Qxx是否正确初始化 2. 确认芯片型号支持 3. 检查SPI通信是否正常 ## 技术支持 - 官方文档:[GD32F4xx系列数据手册](https://www.gd32mcu.com) - 本项目仅供学习参考,如有问题请提交Issue ## 许可证 本项目基于开源协议发布,具体许可证请参考各组件LICENSE文件。 ## 更新日志 ### V1.0.0 (2024-01) - 初始版本发布 - 支持GD32F405/407/450/470 - YModem固件升级 - FatFS文件系统 - CmBacktrace错误追踪