Appearance
Wildfire GD32H759 + fireDAP: a Build-Flash-Debug Loop on macOS
A Wildfire GD32H759 dev board (Cortex-M7 600MHz) plus a Wildfire fireDAP programmer, on an Apple Silicon Mac taken all the way from "wiring it up" to "source-level breakpoint debugging". No vendor IDE installed; builds use arm-none-eabi-gcc (fetched from a cloud mirror in seconds), flashing and debug control use pyOCD + GigaDevice's official DFP pack, and debugging uses arm-none-eabi-gdb. Everything here was measured on 2026-09-11.
Results at a Glance
| Stage | Tool | Measured result |
|---|---|---|
| SWD connectivity | OpenOCD / pyOCD | DPIDR 0x0bd12477, identifies as Cortex-M7 r1p2 |
| Build | arm-none-eabi-gcc 15.2.1 + CMake | ELF/hex/bin in 9s (Flash 2772B/3840K) |
| Flash | pyOCD + GD32H7 DFP 1.5.0 | 25–37 kB/s, read-back vector table matches |
| Run | pyOCD sampling GPIOC | four OCTL samples rotating 0x800→0x200→0x1000→0x400 |
| Debug | pyOCD gdbserver + gdb | connects over extended-remote and hits the main breakpoint after reset |
Why the Toolchain Comes from a Cloud Mirror
Every original ARM GCC download source measured painfully slow; after staging the package on our own cloud server (Alibaba Cloud nginx), any device pulls it in seconds:
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 同目录Likewise, GigaDevice's GD32H7 DFP pack (the vendor hides it behind a licence-agreement page) is on the cloud too: /downloads/GigaDevice.GD32H7xx_DFP.1.5.0.pack.
Protocol Stack and Toolchain Overview
GigaDevice isn't in pyOCD's public pack index — the DFP pack is hidden behind a licence page on the vendor site, so it now lives on our cloud for direct download.
Flashing + Run Verification (Measured)
Debug Verification (Source-level gdb)
Pitfall Archive
| Symptom | Root cause | Solution |
|---|---|---|
| pyOCD can't find the GD32H7 pack | GigaDevice isn't in the public pack index and hides it behind a licence page | pull it from our cloud mirror, or dig the direct link out of the agree page and unpack the AddOn 7z |
the pack target reports DebugPortSetup No ACK | a timing problem (OpenOCD on the same link works at full speed, ruling out wiring) | drop SWD to 1MHz: -O frequency=1000000 |
Unable to open device | a gdbserver still holds the probe (it's an exclusive resource) | stop the process holding it before flashing |
| the gcc toolchain download timed out twice | bandwidth from developer.arm.com / GitHub to this machine is terrible | stage xpack gcc on the cloud and pull it at 45MB/s |
| the template's link flags won't build / link the wrong library | a typo in the template: it compiles with -mcpu=cortex-m7 but links with -mcpu=cortex-m3 | unify the link flags in CMakeLists to cortex-m7 |
gdb's continue looks stuck | the target is already in while(1), so the main breakpoint never hits again | run monitor reset halt before continue |
| a stopgap: trimming source files, editing linker scripts, disabling UBSan, no libc and no gdb | dropped once the toolchain moved to the cloud; back to gcc across the board |
Reproduction and Sources
- For the one-shot scripts (build_gcc / flash / verify_run / debug_gdb / debug) and every detail, see the
gd32h7-firedap-debugskill - Official sources: firmware library GD32H73x_75x_Firmware_Library, demos GD32H7xx_Demo_Suites, GCC template GD32H7xx_CLion_GCC_Template
- Staged tools:
http://120.24.236.163/downloads/(xpack arm gcc + GD32H7 DFP pack, with a same-named SHA256 sidecar) - Flash / debug: pyOCD 0.45.1 + DFP pack; OpenOCD 0.12 (borrowing stm32h7x.cfg) as a fallback connectivity check