## J-Link介绍
J-Link是segger公司的产品,J-Link的官方提供调试软件和驱动,功能比较强大,看一下百度百科的介绍:
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真,与IAR,Keil等编译环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。
二话不说,看看庐山真面目:
## 接口定义
提到专业工具,肯定要提接口定义,以及电气参数要求:
电源USB供电,整机电流 <50mA 支持的目标板电压 1.2 ~ 3.3V,5V兼容 目标板供电电压 4.5 ~ 5V (由USB提供5V) 目标板供电电流 最大300mA,具有过流保护功能;
一般也有两种接线方式,一种JTAG:标准的20pin接口,接口定义如下;另外一种是SWD,是简化了JTAG接口,只用了20pin其中3个pin;
## J-link命令集介绍
调试软件有J-Link命令(j-tag调试),j-mem(内存查看),j-flash(flash烧写)等一般主要用到的是jlink commander,以下是它的命令集:
可用的命令是:
f---固件信息
h---停止
g---去
s---单步目标芯片
st---显示硬件状态
hwinfo----显示硬件信息
mem---读取内存 。 语法:mem , (十六进制)
mem8---读取8位项目 。 语法:mem8 ,(十六进制)
mem16---读取16位项目。语法:mem16, (十六进制)
mem32---读取32位项目。语法:mem32, (十六进制)
w1---写入8位项目。语法:w1, (十六进制)
w2---写16位项目。语法:w2, (十六进制)
w4---写入32位的项目。语法:w4, (十六进制)
wm---写测试字。语法:wm
ms---测量扫描链的长度。语法:ms
mr---测量RTCK反应时间。语法:mr
q---退出
qc---关闭JLink连接并退出
r---复位目标(RESET)
rx---复位目标(RESET)。语法:rx
RSetType---设置当前的复位类型。语法:RSetType
wreg---写入寄存器。语法:wreg,
SetBP---设置断点。
SetWP Set Watchpoint。
ClrBP---清除断点。
ClrWP---清除观察点。
VCatch---写向量捕获。
loadbin---将二进制文件加载到目标内存中。
savebin---将目标内存保存为二进制文件。
SetPC---将PC设置为指定值。
le---改为小端模式
unlock---解锁设备
rce---阅读CP15。
wce---写CP15。
ri---读 Ice reg。
wi---写ice reg。
etm---显示ETM状态
re ---读ETM reg
we---写ETM reg
es---开始跟踪
etb---显示ETB状态
rb---读取ETB寄存器。
wb---写入ETB寄存器。
TAddBranch TRACE---向跟踪缓冲区添加分支指令。
TAddInst TRACE--- 将(非分支)指令添加到跟踪缓冲区。:
TClear TRACE ---清除缓冲区
TSetSize TRACE ---设置跟踪缓冲区的大小
TSetFormat TRACE--- SetFormat
TSR TRACE --- 显示区域(并分析跟踪缓冲区)
TStart TRACE --- 开始
TStop TRACE --- 停止
---- SWO ----
SWOSpeed SWO --- 显示支持的速度
SWOStart SWO --- 开始
SWOStop SWO --- 停止
SWOStat SWO --- 显示SWO状态
SWORead SWO --- 读取和显示SWO数据
SWOShow SWO --- 读取和分析SWO数据
SWOFlush SWO --- 刷新数据
----文件I / O ----
fwrite---将文件写入仿真器
fread---从模拟器读取文件
fshow---从模拟器读取和显示文件
fdelete---在模拟器上删除文件
fsize---在模拟器上显示文件的大小
----测试----
thg---运行/停止1000次
ts---运行步骤1000次
testwspeed---测试下 载速度。
testrspeed---测试上传速度。
testcspeed---测试CPU速度。
---- JTAG ----
speed---速度设置JTAG速度。语法:speed| auto | adaptive,eg:speed 2000,
wjc---写入JTAG命令(IR)。语法:wjc(十六进制)
wjd---写入JTAG数据(DR)。语法:wjd(十六进制)
RTAP---复位TAP控制器使用状态机(111110)
wjraw---编写原始JTAG数据。
rt---复位TAP控制器(nTRST)
---- JTAG硬件---
c00---用TDI = TMS = 0创建时钟
c---时钟
0---清除TDI
1---设置TDI
t0---清除TMS
t1---设置TMS
trst0---清除TRST
trst1---设置TRST
r0---清除复位
r1---设置RESET
----连接----
usb---通过USB连接到J-Link。
ip---通过TCP / IP连接到J-Link ARM Pro或J-Link TCP / IP服务器。
----配置---
wconf---写配置字节。
rconf---读取配置字节。
usbaddr---将usb地址分配给所连接的J-Link
ipadd---r显示/分配连接的J-Link的/的IP地址和子网掩码。
gwaddr---显示/分配连接的J-Link网络网 关地址。
dnsaddr---显示/分配连接的J-Link的网络DNS服务器地址/。
conf---显示连接的J-Link的配置。
ecp---启用J-Link控制面板。
**总结一下我们使用的最多的命令:**
USB --------连接目标板
R ----------重启目标板
stop-------停止CPU运行的程序
loadbin ----加载可执行的二进制文件
g ----------跳到代码段地址执行
s ----------单步执行(调试用)
setpc -----设置pc寄存器的值(调试用)
setbp -----设置断点
WREG -------写寄存器
MEM --------读内存
WM ---------写内存
关闭mmu ---关闭mmu,这个对于裸板调试很重要
w4 cpsr,0x0000001f ------切换到系统模式
speed------设置jtag的传输速率
rce 0,c0,c0,0 -----设置cp15寄存器的第1个寄存器为0
## 常见报错分析
*1.找不到内核*
SEGGER J-Link指挥官V4.20h('?'寻求帮助)
编译2010年10月5日19:11:57
DLL版本V4.20h,编译于2010年10月5日19:11:41
固件:J-Link ARM V8编译2010年5月5日08:59:59
硬件:V8.00
S / N:20100214
功能:RDI,FlashDL,FlashBP,JFlash,GDBFull
VTarget = 3.280V
信息:TotalIRLen =?,IRPrint = 0x..FFFFFFFFFFFFFFFFFFFFF1
警告:找不到CPU内核。
没有在JTAG链上找到设备。尝试在SWD上查找设备。
*2.找到两个设备*
信息:TotalIRLen = 9,IRPrint = 0x0011
找到2个JTAG设备,总共IRLen = 5:
#0 Id:0x2B900F0F,IRLen:04,IRPrint:0x0,ARM ETB
#1 Id:0x07B76F0F,IRLen:05,IRPrint:0x1,ARM1176 Core
确定了ARM11。