Skip to content

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 ​

StageToolMeasured result
SWD connectivityOpenOCD / pyOCDDPIDR 0x0bd12477, identifies as Cortex-M7 r1p2
Buildarm-none-eabi-gcc 15.2.1 + CMakeELF/hex/bin in 9s (Flash 2772B/3840K)
FlashpyOCD + GD32H7 DFP 1.5.025–37 kB/s, read-back vector table matches
RunpyOCD sampling GPIOCfour OCTL samples rotating 0x800→0x200→0x1000→0x400
DebugpyOCD gdbserver + gdbconnects 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 ​

SymptomRoot causeSolution
pyOCD can't find the GD32H7 packGigaDevice isn't in the public pack index and hides it behind a licence pagepull 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 ACKa timing problem (OpenOCD on the same link works at full speed, ruling out wiring)drop SWD to 1MHz: -O frequency=1000000
Unable to open devicea gdbserver still holds the probe (it's an exclusive resource)stop the process holding it before flashing
the gcc toolchain download timed out twicebandwidth from developer.arm.com / GitHub to this machine is terriblestage xpack gcc on the cloud and pull it at 45MB/s
the template's link flags won't build / link the wrong librarya typo in the template: it compiles with -mcpu=cortex-m7 but links with -mcpu=cortex-m3unify the link flags in CMakeLists to cortex-m7
gdb's continue looks stuckthe target is already in while(1), so the main breakpoint never hits againrun monitor reset halt before continue
using zig cc as the compiler (abandoned)a stopgap: trimming source files, editing linker scripts, disabling UBSan, no libc and no gdbdropped 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-debug skill
  • 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
Something unclear here, or want to talk about similar work?Message me →