连线方法
下表为引脚对应关系,盗版 J-Link 不需要接 VTref 脚,此外盗版 J-Link 若有 3.3V 输出可直接给模组供电,否则需要外接电源供电,外接供电时注意共地。
J-Link 引脚 | BW16 引脚 |
---|---|
VTref | 3.3V |
SWDIO | PA27 |
SWCLK | PB3 |
RESET | EN |
GND | GND |
测试连接
打开 J-Link Commander,输入connect
连接设备,根据提示选择设备型号为CORTEX-M23
,连接方式为SWD
,频率我这里输入了40000
。
由于我使用的是教育版,需要同意许可协议后才能使用,盗版无此项。
出现图示信息即为连接成功。
读取内存和 Flash
打开 J-Mem,按截图内容设置。
连接成功的图示:
根据 Memory Layout,跳转到对应 Flash 起始地址进行查看:
跳转到 0x08000000
,与 Image_All.bin
起始字节一样,证明读取成功:
调试
- 使用 ImageTool 烧录
km0_boot_all.bin
、km4_boot_all.bin
和km0_km4_image2.bin
到模组 - 若固件把 SWD 脚用作 GPIO,屏蔽
sys_jtag_off()
- RTL8720DN 有两个核心,KM0(Cortex-M23)和 KM4(Cortex-M33),调试时需要选择对应核心。
- 附加到 KM4 调试:
. "C:\Program Files\SEGGER\JLink\JLinkGDBServer.exe" -JLinkScriptFile X:\sdk-amebad_v6.2C-RC\project\realtek_amebaD_va0_example\GCC-RELEASE\project_hp\jlink_script\AP2_KM4.JLinkScript
- 附加到 KM0 调试:
. "C:\Program Files\SEGGER\JLink\JLinkGDBServer.exe" -JLinkScriptFile X:\sdk-amebad_v6.2C-RC\project\realtek_amebaD_va0_example\GCC-RELEASE\project_hp\jlink_script\AP1_KM0.JLinkScript
- 使用 GDB 连接到 J-Link GDB Server
连接需要使用 SDK 目录下的 project/realtek_amebaD_va0_example/GCC-RELEASE/project_hp/asdk/gnu_utility/gnu_script/rtl_gdb_debug_jlink.txt
GDB 脚本,需要根据实际端口号和 axf
文件路径进行修改。
# GDB script for loading ram.bin process
#===============================================================================
#set GDB connection
set remotetimeout 100000
target remote :2335
#===============================================================================
#Message display setting
#disable all messages
set verbose off
set complaints 0
set confirm off
set exec-done-display off
show exec-done-display
set trace-commands off
#set debug aix-thread off
#set debug dwarf2-die 0
set debug displaced off
set debug expression 0
set debug frame 0
set debug infrun 0
set debug observer 0
set debug overload 0
#set debugvarobj 0 #Ameba_todo
set pagination off
set print address off
set print symbol-filename off
set print symbol off
set print pretty off
set print object off
#set debug notification off
set debug parser off
set debug remote 0
#===============================================================================
#monitor reset 1
#monitor sleep 20
#monitor clrbp #Ameba_todo
#===============================================================================
#Load flash download file
file ./image/target_img2.axf
set $FLASHDATBUFSIZE = 0x800
set $PERI_ON_BASE = 0x48000000
set $$REG_BOOT_CFG = 0x03F8
set $CUT_VERSION = 1
#b main
#continue
#clear main
#Load the file
#lo
Linux 在 SDK 路径执行下面指令进行连接。Windows 根据实际工具路径替换即可,Windows版本对应 GDB 工具可在瑞昱 AmebaD 的 Arduino SDK 中取得,Arduino SDK 点击此处获取。
toolchain/linux/asdk-6.4.1/linux/newlib/bin/
arm-none-eabi-gdb asdk/image/target_img2.axf -x asdk/gnu_utility/gnu_script/rtl_gdb_debug_jlink.txt
- 下断点调试步骤
连上 GDB 后,直接执行 reset
是无法复位模组并成功下断点的,需要使用下面语句进行复位并暂停运行:
monitor reset
x/iwx 0x480003f8
set {unsigned}0x480003f8=0x02000201
查看当前栈帧
bt
下断点到 main
函数
b main
恢复运行
c