一、前言
使用GD32MCU过程中大家常常有因为错误的应用导致无法连接MCU,还有只知道IDE
硬件仿真调试MCU。本文GD32F303为例子,笔者总结下工作中所遇到连接问题和一些调
试方法,抛砖引玉引导大家自行检查和学习,愉快的畅玩GD32MCU
二、调试方法
① 首先为大家介绍jlink的调试利器“Jlinkcmd”,它可以方便用户在非仿真的情况下,hold
内核、单步、全速、设置断点、查看内核和外设寄存器、读取flash代码等等,方便大
家拥有最高的权限查看在运行中的MCU情况,查找非IDE仿真情况下,MCU运行异常
的原因。
1. 如何打开Jlinkcmd:
在jlink安装版本目录下可以打开,无安装版本可以在MDK的安装目录的“Segger”文件
下打开cmd。具体可如下图所示。
2. 如何使用Jlinkcmd:
首先使用Jlink连接好MCU,打开软件“Jlink.exe”
按照提示输入相应信息connect-->?-->s-->回车(旧版只需要输入usb即可连接目标芯
片)
正确的链接目标芯片后:
Jlinkcommand常用命令简介:
mem 读内存
mem8 读8字节内存
mem16 读16字节内存
mem32 读32字节内存
w1 写8字节内存
w2 写16字节内存
w4 写32字节内存
h 停止cpu运行的程序
setbp 设置断点
g 跳到代码段地址执行
s 单步执行(调试用)
r 复位
② 接下来向大家介绍一款用户程序里无需软件配置可以抓取对应的全局变量数据,并绘制
波形的软件——“J-Scope”
1. 首先前往segger 官网下载对应的软件安装包:
https://www.segger.com/downloads/jlink/#JScope
2. 打开正确安装的软件,选择创建一个新的工程,选择对应的调试接口和速度,在ELF
文本框内添加,KEIL工程下生成的.axf文件或者IAR工程下生成的.out文件。在下
个界面勾选添加想要查看的全局变量(数组可以先输入对应的序号)。最后点击红
色开始按钮,选择对应的芯片型号或者内核,既可以绘制对应变量的波形。
三、连接烧录问题总结
1.在MDK内使用jlink调试器无法识别设备ID
原因及解决办法:
1. 检查jlink是否正确连接目标芯片,芯片引脚PA13PA14是否连接正确、虚焊,PA13
和PA14是否有接反现象。
2. 可能为mcu设置了高级读保护状态。仿真口已经熔断,MCU内部程序依然正常运行。
3. 若连接的是GD32E23x系列,需要保证jlink硬件版本v9及以上,软件版本v6.0以上版
本。如果硬件版本过低请换v9jlink,若软件版本过低,需要将图1安装版本内的对应
的文件覆盖图2MDKSegger文件夹内的文件。重新打开MDK既可以出现新版的驱动。
4. 若以上判定均不是,可以先使用前文所述,使用jlinkcmd连接目标芯片,查看是否连
接成功,若连接成功表示芯片是OK的,如图13所示需要将MDK工程目录下的jlink
配置删除掉,从新打开软件或者从新在此配置的左下脚点击扫描device设备。如图10
所示在跳出的unknown设备提示框下,点击“ok”后选好对应的mcu型号或者对应的内
核。若连接也不成功可查看1和2。
5. 程序里有配置rempJTAG和SWD接口,无法识别id使用SWD或者JTAG下载。
可将BOOT0拉高后复位,即可以识别id下载。(支持大部分系列)
使用外部晶振,可将晶振短接后下载。
将BOOT0拉高复位,使用isp擦除后下载。
2.仿真器配置里可以识别id,但是下载却报错。无法实现下载。
原因及解决办法:
1. 首先确保FlashDownload里面的Flash算法是有正确的添加,有时候在转换工程或选
择另外MCU型号会导致Flash算法里面的DeviceSize和AddressRange对应的大
小不匹配,需要删除后重新添加。
2. 芯片具有读保护或者写保护。可以使用调试方法①来看当前选项字节的信息状况
mem 0x1ffff800 10 (F4xx系列为mem 0x1fffc001 10)
正常无读保护状态的值为A55A 无写保护的状态为FF(如图5所示)
若有保护可以使用ISPgdlink上位机jlink对MCU进行解锁,正常解锁后既可以下载。
3. MCU因为晶振配置跑飞(特别E103历程里面有8M 和25M 晶振的开发板),无法正
常下载。
可将BOOT0拉高后复位下载。(支持大部分系列)
使用外部晶振,可将晶振短接后下载。
将BOOT0拉高复位,使用isp擦除后下载。
4. MCU处在上电即进入低功耗模式,无法正常下载。解决方法可如上。
3.能正常下载,但是调试有问题:地址非正确引导到flash的起始地址或者卡在main
之前的地址。
原因及解决办法:
1. 注意debug配置里为硬件仿真,不然会卡在时钟初始化里面。
2. 检查boot0是否接地,不然pc指针跳转的地址不正确。
3. 在IAP应用中,检查对应的下载地址。
4.仿真正常,但是下载后运行不正常。
1. 检查boot0连接方式,在IAR仿真环境下会自动跳转到下载程序的main函数。
下载后就需要保证BOOT0接地。