简介:GD LINK Programmer 是面向国产 GD32 系列微控制器的专用烧录软件,适合嵌入式工程师、高校实验教学人员及刚接触兆易创新芯片的学习者使用,主要解决程序下载、固件更新与基础调试中的工具配套问题。资源以 7z 压缩包分发,体积约 3.19MB;文件总数记录为 0,文件类型明细上游暂未提供,解压后请以实际内容为准。该软件支持 GD32 全系列芯片,提供 USB 2.0 高速下载、在线固件升级、错误检测保护及较直观的操作界面,并覆盖 ISP、IAP 等编程方式,部分型号还可配合 SWD 或 JTAG 进行硬件调试。目前已有 830 人学习或下载,适合需要为 GD32 开发板补齐烧录环境、了解芯片编程流程的读者参考使用。
1. 装 GD32 烧录环境之前:先看清 GD LINK Programmer 到底管哪一段
手上拿到一块 GD32 的开发板,第一件事往往不是写代码,而是找一个能把 hex 灌进去的烧录软件。GD LINK Programmer 干的就是这件事——GD32 系列 MCU 的下载上位机,配合 GD-Link 调试器走 SWD,读 ID、擦除、烧写、校验一条龙。听着简单,实际翻车的点大多不在软件本身:驱动没装对,设备管理器里躺着一个黄色感叹号;Flash 算法选错,烧到一半报校验失败;选项字节被上一个工程改花了,芯片直接连不上。这篇按我实际装机的顺序走一遍,从安装包、驱动、接线到参数配置和失败排查,适合刚上手 GD32、手上只有一块板子和一个 GD-Link 的人,也适合换机器重装环境时想少走两步弯路的人。
2. 安装包与驱动:GD LINK Programmer 落到 Windows 的完整过程
2.1 安装包到手先做的三件事
安装包一般有两种来路:随 GD-Link 调试器一起给的 U 盘或网盘目录,以及官方发布页下载的压缩包。不管哪种,先别急着双击,做三件事。
第一件是看名字。不同时期的安装包标题不太一样,有的叫 GD LINK Programmer,有的叫 GD32 All-In-One Programmer,功能骨架是同一套东西:选芯片、选算法、连目标、烧写、校验。名字对不上不代表装错,但版本对不上会出真问题——老版本认不全后来出的料号,新版本在 Win7 上又可能缺运行库。所以装之前先确认安装包发布日期,比对你的芯片系列是不是在这个版本的支持范围里。
第二件是校验文件。压缩包在传输过程中损坏是极常见的,我见过解压到一半报 CRC 错误的,也见过 exe 被杀软悄悄截断的。
# 校验安装包哈希,并查看可执行文件的数字签名状态 Get-FileHash .\GDLINK_Programmer_Setup.zip -Algorithm SHA256 Get-AuthenticodeSignature .\GDLINK_Programmer_Setup.exe | Format-List Status, SignerCertificate, StatusMessageGet-FileHash的-Algorithm参数支持 SHA256、SHA1、MD5,用 SHA256 就行;算出来的值跟发布页给的对照,对不上就重新下载。Get-AuthenticodeSignature返回Status为Valid说明签名链完整,返回NotSigned在老工具上不罕见,但如果返回值是HashMismatch,这个 exe 就别运行了。
第三件是解压路径。解压到全英文、无空格的目录,比如D:\Tools\GDLINK_setup。中文路径和长路径在部分版本的安装器里会解析失败,表现是安装到 90% 卡住或者装完目录里少文件。
2.2 安装过程与目录结构:哪些文件不能删
安装向导本身没什么可讲的,一路下一步就行,唯一的取舍在安装目录。我的习惯是装到D:\Tools\GDLINK,不装进C:\Program Files。原因有两个:一是 Program Files 下的写权限受 UAC 管,软件要往自己目录里写配置文件、写日志、缓存算法文件,权限一卡就出现"设置改了不生效"的怪现象;二是重装系统或者换机器时,整个目录拷走就能用,不用再走一遍向导。
装完之后先别启动,打开目录看一眼结构。不同版本细节有出入,但主干基本一致:
| 目录/文件 | 作用 | 能不能删 |
|---|---|---|
| 主程序 exe | 上位机入口 | 不能 |
| Algorithm 或 Flash 目录 | 存放各系列的 FLM 烧录算法 | 不能,删了就没法烧 |
| Driver 目录 | GD-Link 的 inf/cat/sys 驱动文件 | 装完可以留,换机器要用 |
| Config 或 ini 文件 | 界面配置、上次选择的芯片和算法 | 可删,删了回到默认状态 |
| Log 目录 | 烧录日志,排查失败的第一现场 | 可定期清 |
| Doc 目录 | 部分版本带 Release Notes 和引脚说明 | 可留 |
Algorithm 目录值得多说一句。它是烧录软件和芯片之间的翻译层,软件靠这个文件知道 Flash 从哪个地址开始、页多大、擦除按扇区还是按页、写进去要不要按半字对齐。选错算法最典型的症状是"能连上、能擦、写一半校验失败",或者写完了跑不起来。所以装完以后把这个目录里的文件名大致过一遍,做到心里有数。
配置类的 ini 文件建议装完就备份一份。换机器、重装、误点恢复默认之后,把 ini 拷回去,芯片型号、算法路径、SWD 频率这些就不用重设。
# 在 Git Bash 下备份配置与算法目录,换机器时整包还原 CONF="/d/Tools/GDLINK" tar -czf "gdlink-conf-$(date +%Y%m%d).tar.gz" \ -C "$CONF" config Algorithm-C先把工作目录切到安装根目录,后面的config、Algorithm就是相对路径,这样打出来的包解开就是原始目录结构,不用再挪位置。
2.3 驱动安装:设备管理器里应该长什么样
GD-Link 是基于 CMSIS-DAP 的调试器,早期版本走 HID,插上系统自带 HID 驱动就能用;后期的版本走 WinUSB,需要在设备管理器里手动指定驱动目录。判断方法很简单:插上调试器,打开设备管理器。
理想状态是三种之一:出现在"人体学输入设备"下的 HID 兼容设备、出现在"通用串行总线设备"下的 CMSIS-DAP 或 GD-Link 名称、出现在"端口"下的串口设备(带串口功能的版本)。如果出现在"其他设备"里并且图标带黄色感叹号,就是驱动没绑上。
手动绑定的流程是:右键那个未知设备 → 更新驱动程序 → 浏览计算机 → 指向安装目录下的 Driver 文件夹 → 勾选包括子目录。装完重新插拔一次,感叹号应该消失。
用命令行确认更省事:
# 列出当前在线的 USB 相关设备,确认 GD-Link 是否被系统正确识别 Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -like "USB*" } | Select-Object Status, Class, FriendlyName | Format-Table -AutoSize-PresentOnly只列当前插着的,避免把历史设备一起刷出来;Class列能看到HIDClass、USB、Ports这类归类,Status是OK说明驱动正常,出现Error就是没绑好。
驱动装不上的时候,先换线。这句话听起来像敷衍,但我踩过的坑里至少一半是线的问题——很多随手抓的 Type-C 线只有充电线芯,没有数据线芯,插上去设备管理器毫无反应。其次是换 USB 口,前置面板的口和 USB 3.x 的口在个别主板上对低速 HID 设备兼容性差,换到主板后置的 USB 2.0 口往往就好了。
3. 接线与识别:SWD 四根线怎么接,软件里怎么确认连上
3.1 SWD 四根线:VCC、GND、SWDIO、SWCLK 的接法
GD-Link 出来一般是排线,末端是 2.54 间距的排针或者杜邦线。目标板上要接的其实就四根:SWDIO、SWCLK、GND,加上一根参考电平 VCC(3.3V)。
| 调试器引脚 | 目标板引脚 | 说明 |
|---|---|---|
| SWDIO | SWDIO / PA13 | 双向数据线,必须接 |
| SWCLK | SWCLK / PA14 | 时钟线,必须接 |
| GND | GND | 共地,必须接,且要和板子共一个地 |
| VCC / VTref | 3.3V | 参考电平,用来让调试器感知目标电压 |
| NRST | NRST | 可选,接了才能用复位方式连接 |
最容易忽略的是 VCC 那根。很多人以为只要 GND 共地就行,结果软件里一直提示目标电压异常,或者连上了但读出来的器件信息是乱的。这根线的实际作用是让调试器知道目标板跑在 3.3V 还是 1.8V,从而调整 IO 电平。所以它接的是目标板的 3.3V 网络,不是给板子供电的输入端。
接线长度也有讲究。杜邦线超过 20cm 之后,SWCLK 上的边沿开始变钝,高速下就容易出现"有时能连、有时连不上"的玄学现象。短排线、尽量贴着板子走,是最省事的做法。
注意:接 NRST 之前先确认目标板上 NRST 有没有被外部电路强拉,某些板子把复位脚接到了调试座的复位按键上,接上线之后按键会失效。
3.2 供电顺序与供电冲突
供电是新手最容易打架的地方。GD-Link 的部分版本可以从 USB 取电、通过排线给目标板供 3.3V;目标板自己也可能有 USB 供电或者外部电源。两边同时供电,轻则电压对不上导致连接失败,重则把调试器的 LDO 顶回去。
我的做法是固定一种供电来源:板子自己插 USB 供电,调试器只接 SWDIO、SWCLK、GND、VTref 四根,不从调试器取电。这样上电顺序也清楚:先给板子上电,等电源指示灯常亮,再插调试器,最后开软件。反过来先插调试器再给板子上电,个别版本的软件会缓存第一次探测到的低电平状态,后面怎么点连接都没反应,必须重启软件。
如果板子必须由调试器供电(比如目标板没有独立电源口),那就把板子上的其他供电路径全部断开,包括 USB 线。同时用万用表量一下调试器输出的 3.3V 实际是多少,有些调试器空载 3.4V、带负载掉到 3.1V,芯片在低压下能连上但烧写会随机失败。
还有一类情况是低功耗。板子上的程序进了 Deepsleep 或者 Standby,SWD 引脚被关掉,调试器自然连不上。这时候要么在程序里加一段延时再进低功耗,要么用"复位时连接"(Connect under reset)的方式,靠 NRST 把芯片按在复位态抢先接管 SWD 口。
3.3 软件里怎么确认连上了:读 IDCODE 与器件识别
接线和供电都确认之后,打开软件。界面上通常有这么几个要素:接口类型(选 SWD,不要选 JTAG)、时钟频率、目标芯片系列、连接按钮。
时钟频率一开始不要拉满。默认值可能是几 MHz,先用 1MHz 甚至 500kHz 试连,连上之后再往上调。频率和线长是反比关系,短线可以高,长线必须降。这一点在后面排查章节里还会提到,因为它是最常见的"连不上"原因,也是最容易被忽略的。
点连接之后,判断成功与否不看提示框,看三样东西:能不能读出芯片的 Device ID、能不能读出 Flash 容量、能不能读出选项字节。三样都读出来,说明链路是通的,后面的烧录才有意义。只读出一部分,比如 ID 有了但容量是 0,通常是算法文件没选对或者芯片系列选错了。
有的版本会显示 IDCODE 的十六进制值。记下这个值,去对照芯片手册里的 DEV_ID,能反推软件认到的到底是不是你手上这颗。我遇到过选错系列但软件不报错、照样往下走的情况,最后写进去的程序跑飞,回头查了半天才发现是器件型号选错了一个尾缀。
4. 配置烧录参数:芯片型号、算法文件与选项字节
4.1 芯片型号与 Flash 算法:容量对不上就会写飞
GD32 的型号命名里,容量信息是编码在料号里的。同一个系列,比如 GD32F103,尾缀不同对应 64K、128K、256K、512K 的 Flash,页大小也不一样。烧录软件里选芯片,选的是"系列 + 容量档",不是选个大概。
算法文件的命名一般形如GD32F30x_HD.FLM、GD32F10x_MD.FLM这种,后缀的 HD、MD、LD 是容量档的缩写。这里有个坑:不同版本的软件,算法文件名会有细微差异,有的按系列分,有的按容量分,别照着网上的截图硬套,以你本机 Algorithm 目录里实际存在的文件为准。
不确定手里这颗芯片多大容量的时候,有两个办法。一是看丝印,料号最后几位就写着容量代码;二是烧之前先算一下 hex 占用的地址范围,拿它跟候选容量比。
# 粗算 Intel HEX 覆盖的地址区间,判断是否会超出目标芯片 Flash 容量 def hex_addr_range(path): lo, hi = None, None with open(path, "r", encoding="ascii", errors="ignore") as f: for line in f: line = line.strip() # 只处理数据记录,长度字段 00 表示数据 if not line.startswith(":") or len(line) < 11: continue count = int(line[1:3], 16) if count == 0: # 文件结束记录 break addr = int(line[3:7], 16) # 16 位偏移 ext = int(line[7:9], 16) # 记录类型:04 为扩展线性地址 if ext == 0x04: hi = max(hi or 0, addr << 16) continue base = hi or 0 # 高 16 位 + 低 16 位 lo = min(lo or base + addr, base + addr) hi = max(hi or 0, base + addr + count - 1) return lo, hi lo, hi = hex_addr_range("app.hex") print(f"占用 0x{lo:08X} ~ 0x{hi:08X},共 {(hi - lo + 1) / 1024:.1f} KB")这段只解析数据记录和扩展线性地址记录,够用来估容量;0x04那条记录决定高 16 位,所以先更新基址再累加低 16 位偏移。算出来的区间如果超过芯片 Flash 末端地址,就说明型号选错了或者程序里带了不该带的段,别硬烧。
4.2 擦除方式与选项字节:全片擦除和读保护的区别
烧录前要选擦除方式,常见三档:全片擦除、按扇区擦除、不擦除直接写。
全片擦除把整块 Flash 清成 0xFF,最干净,耗时随容量线性增长。按扇区擦除只擦要写的区域,快,但前提是软件能准确算出程序占用的扇区范围,算错会留下上一版的残留数据。不擦除只适合同一份程序反复调试、且已经确认目标区域本来是空的场景。
新板子第一次烧、或者上一版程序开了读写保护、或者换过芯片型号,一律选全片擦除。我宁可多等几秒。血泪经验是:某次改小了程序,按扇区擦除之后新程序跑起来行为异常,查了半天发现是 Flash 尾部残留的旧配置区被读进来了。
选项字节是另一个容易动坏的地方。它管的是读保护、写保护、BOOT 启动选择、看门狗硬件使能这些底层配置。软件里通常单独有一个"选项字节"页,能读、能改、能写回。
注意:给芯片开读保护之后,SWD 口的访问会被限制,解除读保护的动作几乎一定伴随全片擦除。也就是说,一旦开了读保护又忘了,程序等于没了。这在量产前的样机上碰一次就够记一辈子。
BOOT 相关的选项字节也要留神。把启动方式改成了从系统存储器启动,烧完程序不跑,你会以为是程序写错了,实际上是芯片压根没去 Flash 里取指。遇到"烧录成功但不运行",先把选项字节读出来看一眼启动配置。
4.3 烧录选项:校验、复位方式与烧完就运行
烧录页上那几行勾选框,看着不起眼,行为差异很大。
校验(Verify)建议常开。它是在写完之后把 Flash 读回来跟源文件比一遍,代价是多花一点时间,收益是能在第一时间发现写飞了。供电不稳、算法不匹配、Flash 有坏块,都能被校验抓住。
复位方式一般有几种:不复位、硬件复位(走 NRST)、软件复位(走 AIRCR 的 SYSRESETREQ)、复位并运行。如果 NRST 那根线没接,硬件复位是无效的,只能选软件复位。软件复位要求芯片当前不在深度低功耗、且程序里没有关掉调试接口。
"烧完就运行"这个勾选框,名字各版本不太一样,可能是 Reset and Run,也可能是 Run after program。勾上之后,烧写完成会自动复位并放开 CPU,省去手动按复位键。调试阶段建议勾上,因为你会反复烧几十次;但如果是给现场设备升级、需要控制启动时机,就把它取消掉。
4.4 和 Keil MDK 的配合:把 GD-Link 当下载器用
很多人装了 GD LINK Programmer,实际烧录却是在 Keil 里点下载按钮完成的。这两者可以共存:Programmer 用来做整片擦除、读选项字节、解锁芯片这类底层操作,日常开发用 Keil 的下载流程,速度快得多。
在 Keil 里配置的路径是:Options for Target → Debug 页,调试器选 CMSIS-DAP Debugger,点 Settings,在接口里选 SWD,Port 选 SW,Max Clock 一开始给 1MHz。能在 SW Device 列表里看到 IDCODE 和 Device Name,就说明 Keil 也认到了这个调试器。
然后切到 Flash Download 页,勾上 Reset and Run,在 Programming Algorithm 里添加对应系列的 FLM 文件。这个 FLM 文件你可以直接从 GD LINK Programmer 的 Algorithm 目录里拿,也可以用 Keil 支持包自带的,只要容量档对得上。Utilities 页里的下载设置跟 Flash Download 页要保持一致,两处不一致的时候,点下载按钮走的是 Utilities 那套参数,很容易出现"明明配了却不生效"。
一个细节:Keil 的下载频率和 Programmer 里的频率是两套配置,互不影响。在 Keil 里连不上,别去改 Programmer 的设置,反过来也一样。
5. 常见问题排查:五类烧录翻车现场
5.1 现象:点连接一直转圈,最后报无法连接目标
现象很统一:点了连接,进度条转十几秒,弹一个"cannot connect to target"或者中文的"连接目标失败"。设备管理器里调试器是正常的,供电也量过是 3.3V。
原因排第一的是 SWD 频率过高配长线。杜邦线拉过 20cm、又没有做阻抗控制,1MHz 以上就容易丢时钟沿。排第二的是芯片处于低功耗或者 SWD 引脚被程序复用成了普通 GPIO。排第三的是共地不良——目标板和调试器各自插在不同的 USB 口或者不同的插排上,地电位有偏差。
解决顺序是:先把频率降到 500kHz 试一次;不行就改用复位时连接,让调试器靠 NRST 抢在程序运行前接管 SWD;再不行就断开目标板的所有外部供电,只留调试器供电试一次。这三步走完还连不上,才去怀疑硬件。另外,把调试器和目标板插到同一个 USB Hub 或者同一台电脑上,能消掉大部分接地偏差问题。
5.2 现象:能连上、能擦除,但烧到一半报校验失败
连得上说明链路没问题,问题出在写的过程。最常见的根因是 Flash 算法选错——容量档选大了会写到不存在的地址,选小了会在边界处截断,两种都会在校验阶段暴露。其次是供电在写 Flash 期间跌落,写 Flash 是芯片电流最大的时刻之一,LDO 余量不够就会挂。
还有一种隐蔽情况:芯片之前被开过读保护,解除保护的动作没有完整执行,Flash 处于半保护状态,前几个扇区能写、后面写不进去。
处理办法是先做一次全片擦除再烧,把状态拉回干净起点;然后核对算法文件名和芯片料号的容量档是否一致;最后用万用表盯着烧录瞬间的 3.3V,跌到 3.0V 以下就换供电方案。
5.3 现象:烧录成功,但程序不运行,重新上电才跑
提示烧录成功、校验通过,CPU 就是不干活。断电再上电,程序又正常跑了。
原因基本锁定在复位环节。勾了"烧完运行"但复位方式选的是硬件复位,而 NRST 线没接,芯片根本没收到复位信号,CPU 还停在调试器接管后的状态。另一种是 BOOT 选项字节被改成了从系统存储器启动,程序写进 Flash 也没人去取指。
先去选项字节页把 BOOT 配置读出来,确认是从主 Flash 启动;再把复位方式改成软件复位,重新烧一次。还不行就在程序里加一句延时,让调试器有时间在复位后重新接管,避免刚启动就被打断。
5.4 现象:软件打不开,或者打开就报缺 dll
双击没反应,或者弹窗提示缺少某个 dll、缺少某版本的运行库,再或者界面出来了但一点按钮就闪退。
这类问题九成是运行环境缺失。老版本的烧录工具依赖 .NET Framework 的某个版本和 VC++ 运行库,Win10 之后的系统默认不一定带全。另一成是路径问题:装在了带中文或者带空格的目录下,程序加载算法文件时路径解析失败,表现是界面正常但一选芯片就崩。
按顺序处理:先补运行库,再确认安装路径全英文无空格,最后试一次以管理员身份运行。管理员运行这一步能排除掉写配置文件和写日志时的权限问题。
5.5 现象:芯片被锁死,怎么都连不上,擦也擦不了
这是最难受的一种。调试器插着,软件报连不上,换频率、换线、换供电全无效。
根因通常有两个:一是选项字节里开了读保护,SWD 访问被硬件层面挡住;二是程序在启动早期就把 SWD 引脚复用成了普通 IO,而且没有留出延时窗口,调试器还没来得及接管,引脚就被抢走了。
第一种情况,软件里一般有独立的"解除保护"或者"擦除选项字节"入口,走的是复位时连接的方式,执行完会全片擦除。第二种情况,把 BOOT0 拉高、让芯片从系统存储器启动,此时用户程序不运行,SWD 引脚保持默认功能,就能连上并擦除。这两个办法都不行,就只能上串口 ISP 的路径做整片擦除,前提是板子上引出了串口。
注意:解除读保护必然伴随全片擦除,动手之前先确认手上没有唯一一份源码或者标定数据。
6. 装完怎么验证:从读 ID 到跑通第一支程序
环境装完,别急着烧正式工程,按一条最小验证链走一遍,能挡掉后面 80% 的莫名其妙。
第一步,不接目标板,只插调试器,打开软件看能不能识别到调试器本身。识别不到,问题在驱动或者 USB 线,跟板子无关。
第二步,接上目标板,只做读操作:读 Device ID、读 Flash 容量、读选项字节。三样都能读出来,说明 SWD 链路、供电、算法识别全部正常。这一步的关键是只读不写,排除掉写操作引入的变量。
第三步,烧一个最小的验证程序,比如只翻转一个 LED、或者只往串口打一行字符串。别拿正式工程做首次烧录,正式工程大、依赖多,出问题不好定位。
第四步,烧完断电重启一次,确认程序能独立运行,不是靠调试器托着才跑。
验证清单可以照这个表走:
| 检查项 | 通过标准 | 不通过时先看 |
|---|---|---|
| 调试器识别 | 设备管理器无感叹号 | 换线、换 USB 口 |
| 目标电压 | 读到 3.3V 左右 | VTref 是否接、板子是否上电 |
| Device ID | 与手册 DEV_ID 一致 | 芯片系列是否选错 |
| Flash 容量 | 与料号容量档一致 | 算法文件是否选错 |
| 全片擦除 | 无报错,耗时符合容量 | 是否开了读保护 |
| 烧写 + 校验 | 校验通过 | 供电是否跌落、算法是否匹配 |
| 独立运行 | 断电重启后仍正常 | 复位方式、BOOT 选项字节 |
最后补一个习惯:每次换新板子、换新批次的芯片,我都会先只做"读 ID + 读容量"这两步,确认认到的型号跟丝印一致,再往下烧。从那以后我再没在量产样机上写飞过一片芯片,因为写飞这件事,从来不是发生在你小心翼翼的时候,而是发生在你觉得"这次肯定没问题"的时候。希望帮到你。
本文还有配套的精品资源,点击获取