外观
野火 GD32H759 + fireDAP:macOS 上的编译烧录调试闭环
一块野火 GD32H759 开发板(Cortex-M7 600MHz)+ 一只野火 fireDAP 烧录器,在 Apple Silicon Mac 上 从「接线」到「源码级断点调试」全打通。没装官方 IDE;编译用 arm-none-eabi-gcc(云端预置秒级拉取), 烧录调试用 pyOCD + 兆易官方 DFP pack,调试用 arm-none-eabi-gdb。本文全程 2026-09-11 实测。
成果速览
| 环节 | 工具 | 实测结果 |
|---|---|---|
| SWD 连通 | OpenOCD / pyOCD | DPIDR 0x0bd12477,认出 Cortex-M7 r1p2 |
| 编译 | arm-none-eabi-gcc 15.2.1 + CMake | 9s 出 ELF/hex/bin(Flash 2772B/3840K) |
| 烧录 | pyOCD + GD32H7 DFP 1.5.0 | 25~37 kB/s,向量表读回校验一致 |
| 运行 | pyOCD 采样 GPIOC | OCTL 四次采样 0x800→0x200→0x1000→0x400 轮转 |
| 调试 | pyOCD gdbserver + gdb | extended-remote 连上,reset 后命中 main 断点 |
工具链为什么从云端拉
ARM GCC 原始下载源实测都极慢;把包预置到自己的云服务器(阿里云 nginx)后,任何设备秒级拉取:
bash
curl -O http://120.24.236.163/downloads/xpack-arm-none-eabi-gcc-15.2.1-1.1-darwin-arm64.tar.gz
tar -xzf xpack-*.tar.gz # SHA256 与官方发布一致,sidecar .sha256 同目录同理,兆易 GD32H7 的 DFP pack(官网藏在许可协议页后面)也放了云端:/downloads/GigaDevice.GD32H7xx_DFP.1.5.0.pack。
协议栈与工具链全景
兆易不在 pyOCD 公共 pack 索引里——DFP pack 官网藏在许可协议页后,现已放云端直拉。
烧录 + 运行验证(实测)
调试验证(gdb 源码级)
踩坑档案
| 现象 | 根因 | 解决 |
|---|---|---|
| pyOCD 找不到 GD32H7 pack | 兆易不进公共 pack 索引,官网藏在协议页后 | 云端预置直拉;或挖 agree 页直链下 AddOn 7z 解包 |
pack 目标报 DebugPortSetup No ACK | 时序问题(OpenOCD 同链路直连正常,排除接线) | SWD 降 1MHz:-O frequency=1000000 |
Unable to open device | gdbserver 还占着探针(独占资源) | 先停占用进程再烧录 |
| gcc 工具链下载两次超时 | developer.arm.com / GitHub 到本机带宽极差 | 云端预置 xpack gcc,45MB/s 秒拉 |
| 模板链接参数编不过/链错库 | 模板笔误:编译 -mcpu=cortex-m7 但链接写 -mcpu=cortex-m3 | CMakeLists 链接参数统一改 cortex-m7 |
gdb continue 像卡死 | 目标已在 while(1),main 断点不再命中 | 先 monitor reset halt 再 continue |
| 应急方案:要裁源文件、改链接脚本、关 UBSan,无 libc 无 gdb | 工具链上云后直接弃用,全量回归 gcc |
复现与出处
- 一键脚本(build_gcc / flash / verify_run / debug_gdb / debug)与全部细节见 skill
gd32h7-firedap-debug - 官方源码:固件库 GD32H73x_75x_Firmware_Library、例程 GD32H7xx_Demo_Suites、GCC 模板 GD32H7xx_CLion_GCC_Template
- 预置工具:
http://120.24.236.163/downloads/(xpack arm gcc + GD32H7 DFP pack,SHA256 附同名 sidecar) - 烧录/调试:pyOCD 0.45.1 + DFP pack;备用连通验证 OpenOCD 0.12(借 stm32h7x.cfg)