# GD32F1_CAN_IAP_BOOTLOADER **Repository Path**: mj_yyfddca/gd32f1_can_iap_bootloader ## Basic Information - **Project Name**: GD32F1_CAN_IAP_BOOTLOADER - **Description**: gd32f1系列使用can通信进行IAP的bootloader程序,对应的APP程序在GD32_IAP_APP仓库里面 切换iap_can分支即为can通信iap的app测试程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-15 - **Last Updated**: 2026-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: gd32, CAN, IAP ## README # GD32F1 CAN IAP Bootloader 基于 GD32F10x 微控制器的 CAN 总线在线升级(IAP) Bootloader。 ## 项目简介 本项目实现了一个运行在 GD32F10x(Cortex-M3)微控制器上的 CAN 总线 IAP Bootloader,支持通过 CAN 总线远程接收并更新应用程序固件。Bootloader 接收来自上位机的固件数据,通过 CAN 协议解析后写入片内 Flash 指定的应用程序区域,完成固件升级。 ## 功能特性 - **CAN 总线通信**:支持标准 CAN 协议,11 位标准帧 ID - **固件接收**:通过 CAN 总线接收固件数据,支持分块传输 - **CRC 校验**:数据 CRC16 校验,确保传输可靠性 - **Flash 编程**:片内 Flash 在线擦写,支持应用程序区域写入 - **串口调试**:双串口支持(USART0 调试信息输出,USART1 通信) - **自动跳转**:升级完成后自动跳转到应用程序入口 ## 硬件要求 - **MCU**:GD32F10x 系列(如 GD32F103C8T6) - **CAN 收发器**:如 TJA1050 或 MCP2562 - **晶振**:8MHz 外部晶振(HXTAL) - **系统时钟**:72MHz(PLL 时钟) ## 目录结构 ``` ├── FIRMWARE/ # GD32F10x 固件库 │ ├── CMSIS/ # ARM Cortex-M3 内核接口 │ ├── GD32F10x_standard_peripheral/ # 标准外设驱动 │ ├── GD32F10x_usbd_library/ # USB 设备库 │ ├── GD32F10x_usbfs_library/ # USB 主机/设备库 │ └── ... ├── HARDWARE/ # 板级支持包 │ ├── bsp_can.c/h # CAN 总线驱动 │ ├── bsp_flash.c/h # Flash 操作 │ ├── bsp_usart.c/h # 串口驱动 │ └── bsp_cpu.c/h # CPU 初始化 ├── IAP/ # IAP 核心代码 │ ├── iap_can.c/h # CAN 通信 │ ├── iap_core.c/h # IAP 核心逻辑 │ └── iap_protocol.h # 协议定义 └── USER/ # 用户代码 ├── main.c # 主程序 └── ... ``` ## 通信协议 CAN IAP 采用简单的帧协议: | 字段 | 长度 | 说明 | |------|------|------| | Frame ID | 11bit | 固定 ID | | Data[0] | 1B | 命令/状态 | | Data[1] | 1B | 数据长度 | | Data[2:n] | nB | 数据 | ### 命令定义 - `0x01`:请求开始升级 - `0x02`:请求数据块 - `0x03`:固件数据 - `0x04`:请求校验 - `0x05`:执行升级/跳转 ## 编译说明 ### Keil MDK 1. 使用 ARM-MDK 打开 `Project.uvproj` 工程文件 2. 选择目标芯片 GD32F10x 3. 编译生成 hex/bin 文件 ### IAR EWARM 使用 IAR Embedded Workbench 打开对应工程文件编译。 ## 使用方法 ### Bootloader 烧录 1. 将 Bootloader 烧录到芯片起始地址(0x08000000) 2. 应用程序烧录地址可配置,通常为 0x08003000(留出 12KB) ### 升级流程 1. 上位机通过 CAN 发送开始升级命令 2. Bootloader 响应准备就绪 3. 上位机分块发送固件数据(含 CRC 校验) 4. 固件接收完毕,校验通过后执行跳转 ## 应用跳转 IAP 完成后,Bootloader 会禁用中断并跳转到应用程序入口: ```c typedef void (*pFunction)(void); pFunction JumpToApp = (pFunction)(*(volatile uint32_t)(APP_START_ADDR + 4)); JumpToApp(); ``` ## 注意事项 1. 确保 CAN 总线终端电阻匹配(120Ω) 2. 应用程序应设置合理的向量表偏移(SCB->VTOR) 3. 升级过程中避免断电,建议增加备份机制 ## 许可证 请参考项目中的 LICENSE 文件。