J-Link 指导手册

1. J-Link 内置智能支持 CPU

通常有以下 2 种方式在 J-Link 软件中支持一个新的 CPU

  • J-Link 固件智能识别
  • PC(DLL) 智能识别

最理想的是在 固件 中智能识别,这种方式更强大更健壮,J-Link PC 软件能自动的检测到连接的 CPU-core。如果固件支持智能识别,则会自动识别。如果使用的 J-Link 固件不支持智能识别,并且只有 PC 端智能识别连接到的 CPU,则会以弹窗的形式出现如下警告。

1.1 J-Link 固件智能识别

在较新的 J-Link 上,J-Link 固件可以识别新的 CPU-core,这意味着对于这些 J-Link目标序列 不用再从 PC 端 生成,而是直接在 J-Link 中生成。在固件中集成智能识别可以提高稳定性和更高的性能。

1.2 PC(DLL) 智能识别

这是在基本实现级别支持一个 CPU-core。这种实现不依赖于 J-Link model,因为这不需要在固件中实现智能识别。这也就意味着,所有的 目标序列(JTAG/SWD/…) 都是在 PC 端产生,J-Link 只是简单的把这些 目标序列 发送出去和将结果发送给 DLL。只要使用的 DLL-Version 能识别 CPU-core, 这种方式就可以使旧的 J-Link 识别新的 CPU-core

这种方式有个很大的弊端,每一个发送给目标的 序列,都会触发一个 USB以太网 的传输事件。特别是在 USB 连接时会有一个很长的延时,显著影响 J-Link 的执行效率。特别是当执行动作时,J-Link 必须频繁的等待 CPU 的操作。举个例子,一个内存的读写操作,它需要跟随状态读操作或重复,直到内存操作完成。在执行这种任务时, PC 端就需要做一些假设,比如:在给定的周期之后完成操作。或者它需要进行大量的 USB以太网 事务传输。在第一种模式 (fast mode) 在某些情况下不能工作,如 CPU 速度比较低。第二种模式 (slow mode) 将更可靠,但非常缓慢,因为有大量的 USB以太网 事务传输。简单地归结为:最好的解决方案是在模拟器本身具有智能识别。

1.2.1 PC 端 (DLL) 的局限性

  • 不稳定,尤其是低速目标

    由于大量的 USB 事务会导致 J-Link 的性能非常差,PC 端的实现假设 CPU/Debug 接口足够快,可以处理 命令/请求 而不需要等待。因此,在使用 PC 端智能识别时,不能保证所有情况下的稳定性,特别是如果目标接口速度 (JTAG/SWD/…) 明显高于 CPU 速度的情况下。

  • 性能低

    因为有很多的数据在主机接口 (尤其是 USB) 传输,即使主机接口上的事务数量被限制在最小 (fast mode),由此产生的下载速度通常远低于在 固件中实现智能识别的速度。

  • 不支持

    如果使用 PC 端实现智能识别,SEGGER 公司不会给予任何支持。

2. J-Link 软件

J-Link 官网 下载软件和工具包,包括使用 J-Link 的应用程序。同时还附带了 J-LinkUSB 驱动和文档。

软件描述
J-Link Commander命令行工具,具有目标分析的基本功能
J-Link GDB Server是一个服务器,通过 TCP/IP 连接到 GNU Debuger (GDB),它是使用 GDB 协议的工具链连接到 J-Link 是必需的
J-Link GDB Server command line versionJ-Link GDB Server 的命令行版本。和 GUI 版本的功能相同
J-Link Remote Server它提供了通过 TCP/IP 远程使用 J-Link/J-Trace 的可能性
J-Mem目标内存查看器。显示正在运行的目标的内存内容,并允许编辑
J-Flash独立的 Flash 编程程序。详见 UM08003(J-Flash User Guide).pdf
J-Flash Lite独立的 Flash 编程程序。删减版的 J-Flash
J-Link RTT Viewer免费的 J-Link 程序。显示使用 RTT 的目标的终端输出。可以并行或独立于调试器。
J-Link SWO Viewer免费的 J-Link 程序。显示使用 SWO 引脚的目标的终端输出。可以并行或独立于调试器。
J-Link SWO Analyzer解析 SWO RAW 输出的命令行工具,并把其存放在文件中
JTAGLoad打开 svf 文件,并通过 J-Link/J-Trace 将文件数据发送给目标。
J-Link ConfiguratorJ-Link 的基于 GUI 的配置工具。同时支持基于 USBTCP/IPJ-Link 连接。详见: J-Link Configurator
RDI support提供支持远程调试接口(RDI: Remote Debug Interface)。这将允许用户使用 遵从 RDI 的任何调试器通过 J-Link 调试。
Processor specific tools处理特定处理器的免费命令行工具。包括:STR9 CommanderSTM32 Unlock

3. J-Link Commander (Command line tool)

更多 J-Link Commander 支持的指令,详见 SEGGER Wiki: J-Link commander

3.1 命令行选项

为测试和自动化目的,可以使用不同的命令行选项启动 J-Link Commander。下表列出了J-Link Commander 有效的命令行选项。所有的命令行选项不分大小写。

命令描述
-AutoConnect自动启动目标连接序列
-CommandScript发送命令文件给 J-Link
-CommandFile发送命令文件给 J-Link
-Device预先选择要连接的设备
-ExitOnErrorCommander 在出错后退出
-If预先选择目标接口
-IP选择 IP 作为主机接口
-JLinkScriptFile发送 JLink 脚本文件给 J-Link
-JTAGConf设置 IRPreDRPre
-Log设置 Log 文件路径
-RTTTelnetPort设置 RTT TelnetPort
USB通过 USB 连接指定 S/N 号的 J-Link
-SettingsFile发送设置文件给 J-Link
-Speed给定一个初始速度开启 J-Link Commander

3.1.1 -AutoConnect

该命令用于让 J-Link Commander 在进入交互模式时自动启动连接序列以连接到目标。

用法示例
-autoconnect <1|0>JLink.exe -autoconnect 1

3.1.2 -CommanderScript

-CommandFile 类似。

3.1.3 -CommandFile

选择一个命令文件,并在批处理模式 (in batch mode) 下启动 J-Link CommanderJ-Link Commander 的批处理模式类似于执行一个批处理文件。命令文件逐行解析,一次执行一个命令。

用法示例
-CommandFile <CommandFilePath>详见 3.2 中的 Example

3.1.4 -Device

预先选择 J-Link Commander 将要连接的设备。对于一些设备,J-Link 在连接时已经知道设备,因为其中的一些设备需要特殊处理。已支持的设备名,详见 List of supported target devices

用法示例
-Device <DeviceName>JLink.exe -Device STM32F103ZE

3.1.5 -ExitOnError

exitonerror 类似。(手册有误,需要更正)

3.1.6 -If

选择用于连接到目标接口的 J-Link 接口。J-Link Commander 首先会尝试使用当前 J-Link 固件中选择的 J-Link 接口连接到目标。如果连接失败,则 J-Link Commander 会在连接的 J-Link 所支持的所有接口中逐个尝试去连接到设备。

用法示例
-If <TargetInterface>JLink.exe -If SWD

目前支持的接口如下:

  • JTAG
  • SWD

3.1.7 -IP

主机接口使用 IP 连接到 J-Link。默认主机接口使用 USB

用法示例
-IP <IPAddr>JLink.exe -IP 192.168.1.17

从以太网上所有可用的模拟器列表中选择,可以使用 ***** 作为 <IPAddr>

3.1.8 -JLinkScriptFile

J-Link 脚本文件的路径传给 J-Link CommanderJ-Link 脚本文件主要用于连接到需要特殊连接序列的目标,然后才能与核心通信。详见 J-Link Script Files

用法示例
JLink.exe -JLinkScriptFile <File>JLink.exe -JLinkScriptFile "D:\Default.JLinkScript"

3.1.9 -JTAGConf

通过 IRPreDRPre,以便在 JTAG-chain 中选择特定的设备。“-1, -1” 用于让 J-Link 自动选择一个设备。

用法示例
-JTAGConf <IRPre>, <DRPre>JLink.exe -JTAGConf 4, 1
JLink.exe -JTAGConf -1, -1

3.1.10 -Log

设置日志文件路径,用于 DLL 输出日志信息。如果日志文件已经存在,则会被覆盖。

用法示例
-Log <LogFilePath>JLink.exe -Log D:\log.txt

3.1.11 -RTTTelnetPort

该命令用于更改 RTT telnet 端口。默认是 19021

用法示例
-RTTTelnetPort <Port>JLink.exe -RTTTelnetPort 9100

3.1.12 USB

通过 USB 连接到指定 SN 号的 J-Link。这样对于多个 J-Link 连接到同一个电脑上,可以通过多个 J-Link Commander 分别连接到不同的 J-Link

用法示例
USB <SerialNo>JLink.exe USB 580011111

3.1.13 -SettingsFile

选择目标设备要使用的 J-Link 设置文件。设置文件可以包含 J-Link Control 面板中的 “设置” 选项卡中的所有可配置选项。

用法示例
-SettingsFile <PathToFile>JLink.exe -SettingsFile "D:\settings.txt"

3.1.14 -Speed

以给定的初始速度开启 J-Link Commander。可使用的参数为 “adaptive”,“auto” 或者是一个可选择的整型值 (单位:kHz)。推荐使用固定速率,或者如果目标支持,可以使用自适应速率,默认的速率是 4000kHz

用法示例
-Speed <Speed_kHz>JLink.exe -Speed 4000

3.2 使用 J-Link 命令文件

还可以在 批处理模式 下使用 J-Link Commander,可以在不需要用户交互的情况下,使用 J-Link Commander 进行批处理操作。 不要混淆 J-Link 命令文件和 J-Link 脚本文件。当在 批处理模式 时使用 J-Link Commander,需要将命令文件路径传给它。命令文件的语法与 J-Link Commander 中的常规命令相同 (每个命令单独占一行)。SEGGER 建议始终通过命令行选项传递设备名,因为一些设备在连接/复位时需要进行特殊处理,以保证正常的功能。

示例:

JLink.exe -device STM32F103ZE -CommandFile D:\CommandFile.jlink

CommandFile.jlink 内容如下:

si	1
speed 4000
r
h
loadbin	D:\firmware.bin, 0x08000000

附录一:命令集

支持的命令按用途分为如下几类:

  • 通用

    命令描述
    f显示固件信息
    h停止 CPU
    IsHalted返回当前 CPU 的状态 (停止/非停止)
    WaitHalt等待 CPU 停止或给定的超时时间
    语法:WaitHalt <TimeoutMs> 默认超时时间为 1000 ms
    g继续运行
    Sleep等待给定的时间 (单位: 毫秒)
    语法:Sleep <delay>
    s单步执行
    语法:s [<NumSteps (dec)>]
    st显示硬件状态
    hwinfo显示硬件信息
    mem读内存
    语法:mem [<Zone>:]<Addr>,<NumBytes> (hex)
    mem8按 8-bit 读取
    语法:mem8 [<Zone>:]<Addr>,<NumBytes> (hex)
    mem16按 16-bit 读取
    语法:mem16 [<Zone>:]<Addr>,<NumBytes> (hex)
    mem32按 32-bit 读取
    语法:mem32 [<Zone>:]<Addr>,<NumBytes> (hex)
    w1按 8-bit 写入
    语法:w1 [<Zone>:]<Addr>,<Data> (hex)
    w2按 16-bit 写入
    语法:w2 [<Zone>:]<Addr>,<Data> (hex)
    w4按 32-bit 写入
    语法:w4 [<Zone>:]<Addr>,<Data> (hex)
    erase擦除所选择设备的内部 Flash
    语法:Erase
    wm写测试字
    语法:wm <NumWords>
    is识别扫描链选择寄存器的长度 (Identify length of scan chain select register)
    ms测量扫描链 (scan chain) 的长度
    语法:ms <Scan chain>
    mr测量 RTCK 反应时间 (react time)。
    语法:mr
    q退出
    qc关闭 JLink 连接并退出
    eoe出错退出
    语法:eoe <1/0>
    r复位
    rx复位
    语法:rx <DelayAfterReset>
    RSetType设置当前复位类型
    语法:RSetType <type>
    Regs显示寄存器内容
    wreg写寄存器
    语法:wreg <RegName>,<Value>
    moe显示模式进入的原因 (mode-of-entry),也就是说:CPU 为什么停止
    SetBP设置断点
    用法:SetBP <addr> [A/T] [S/H]
    SetWP设置观察点
    语法:<Addr> [R/W] [<Data> [<D-Mask>] [A-Mask] ]
    ClrBP清除断点
    语法:ClrBP <BP_Handle>
    ClrWP清除观察点
    语法:ClrWP <WP_Handle>
    VCatch写矢量捕获
    语法:VCatch <Value>
    loadfile下载文件到目标内存
    语法:loadfile <filename>,[<addr>]
    支持的扩展:*.bin,*.mot,*.hex,*.srec
    <addr> 只用于 bin 文件
    loadbin下载 bin 文件到目标内存
    语法:loadfile <filename>,<addr>
    savebin保存目标内存到二进制文件中
    语法:savebin <filename>,<addr>,<NumBytes>
    verifybin验证指定的二进制是否已经位于目标内存的指定地址
    语法:verifybin <filename>,<addr>
    SetPC设置 PC 为指定的值
    语法:SetPC <Addr>
    le切换到小端模式
    be切换到大端模式
    log使能日志信息
    语法:log <filename>
    unlock解锁设备
    语法:unlock <DeviceName>
    <DeviceName> 没解锁,则返回支持的设备列表
    nRESET 被连接上
    term测试命令,用来可视化目标设备的 printf 输出,使用 DCC (目标上运行 SEGGER DCC handler)
    ReadAP读取一个 CoreSight AP 寄存器
    注意:第一次读会返回之前读的数据,需要额外读取 DP 寄存器 3 以获取数据
    ReadDP读取一个 CoreSight DP 寄存器
    注意:对于 SWD,数据立刻返回
    对于 JTAG,会返回之前读的数据,需要额外读取 DP 寄存器 3 以获取数据
    WriteAP写入一个 CoreSight AP 寄存器
    WriteDP写入一个 CoreSight DP 寄存器
    SWDSelect选择 SWD 作为接口和输出
    JTAG -> SWD 切换序列
    SWDReadAP通过 SWD 读取一个 CoreSight AP 寄存器
    注意:第一次读会返回之前读的数据,需要额外读取 DP 寄存器 3 以获取数据
    SWDReadDP通过 SWD 读取一个 CoreSight DP 寄存器
    注意:正确的数据立刻返回
    SWDWriteAP通过 SWD 写入一个 CoreSight AP 寄存器
    SWDWriteDP通过 SWD 写入一个 CoreSight DP 寄存器
    Device选择连接一个指定的设备。
    在大多数情况下,设备的显式选择是不必要的。选择设备使用户能够使用 J-Link Flash 编程功能以及在 Flash 中使用无限个断点
    对于某些设备,显式设备选择是强制性的,以便允许 DLL 执行设备所需的特殊处理
    ExpDevList从 DLL 内部导出设备名
    ExpDevListXML将设备名称从 DLL 内部设备列表导出到 XML 格式的文本文件
    语法:ExpDevListXML <Filename>
    PowerTrace执行电源跟踪 (并非所有模型都支持)
    语法:PowerTrace <LogFile> [<ChannelMask> <RefCountSel>]
    <LogFile>:用于存放电源跟踪数据的文件
    <ChannelMask>:32-bit mask 用于指定什么通道被使能
    <SampleFreq>:采样频率 (单位:Hz) (0 == max)
    <RefCountSel>:0:无参考计数;1:在 SWO 上传输的字节数
  • CP15

    命令描述
    rce读取 CP15
    语法:rce <Op1>,<CRn>,<CRm>,<Op2>
    wce写入 CP15
    语法:wce <Op1>,<CRn>,<CRm>,<Op2>,<Data>
  • ICE

    命令描述
    Ice显示嵌入式 ice 跟踪宏的状态 (ICE breaker)
    ri读取 Ice 寄存器
    语法:ri <RegIndex> (hex)
    wi写入 Ice 寄存器
    语法:wi <RegIndex>,<Data> (hex)
  • TRACE

    命令描述
    TClearTRACE:清除缓冲区
    TSetSizeTRACE:设置跟踪缓冲区的大小
    TSetFormatTRACE:设置格式
    TSRTRACE:显示区域 (并分析跟踪缓冲区)
    TStartTRACE:启动
    TStopTRACE:停止
  • SWO

    命令描述
    SWOSpeedSWO:显示支持的速率
    SWOStartSWO:启动
    SWOStopSWO:停止
    SWOStatSWO:显示 SWO 状态
    SWOReadSWO:读取并显示 SWO 数据
    SWOShowSWO:读取并分析 SWO 数据
    SWOFlushSWO:刷新数据
    SWOViewSWO:查看终端数据
  • PERIODIC

    命令描述
    PERConfPERIODIC:配置
    PERStartPERIODIC:启动
    PERStopPERIODIC:停止
    PERStatPERIODIC:显示状态
    PERReadPERIODIC:读取并显示数据
    PERShowPERIODIC:读取并分析数据
  • File I/O

    命令描述
    fwrite向模拟器写入文件
    fread从模拟器读取文件
    fshow从模拟器读取并显示文件
    fdelete删除模拟器上的文件
    fsize显示模拟器上文件的大小
    flist列出模拟器上目录
    SecureArea创建/移除 probe 上的安全区域
  • Test

    命令描述
    TestHaltGo运行 go/halt 1000 次
    TestStep运行 step 1000 次
    TestWSpeed测试目标内存的写入速度
    参数:[<Addr> [<Size>] ]
    TestRSpeed测试目标内存的读取速度
    参数:[<Addr> [<Size>] [<NumBlocks>] ]
    TestNWSpeed测试网络下载速度
    参数:[<NumBytes> [NumReps] ]
    TestNRSpeed测试网络上传速度
    参数:[<NumBytes> [\NumReps] ]
    TestCSpeed测试 CPU 的速度
    参数:[<RAMAddr>]
  • JTAG

    命令描述
    JTAGConf在 ARM 设备前设置 IR/DR 位
    语法:Config <IRpre>,<DRpre>
    speed设置目标接口速率
    i读取 JTAG 的 Id
    wjc写 JTAG 命令 (IR)
    语法:wjc <Data> (hex)
    wjd写 JTAG 数据 (DR)
    语法:wjd <Data64> (hex),<NumBits> (dec)
    RTAP使用状态机 (111110) 复位 TAP 控制器
    wjraw写 Raw JTAG 数据
    语法:wjraw <NumBits (dec)>,<tms>,<tdi>
    rt复位 TAP 控制器 (nTRST)
  • JTAG-Hardware

    命令描述
    c00创建 TDI = TMS = 0 的时钟
    c时钟
    tck0清除 TCK
    tck1设置 TCK
    0清除 TDI
    1设置 TDI
    t0清除 TMS
    t1设置 TMS
    trst0清除 TRST
    trst1设置 TRST
    r0清除 RESET
    r1设置 RESET
  • Connection

    命令描述
    usb通过 USB 连接到 J-Link
    语法:usb <port> (port : 0 ~ 3)
    ip通过 TCP/IP 连接到 J-Link ARM Pro 或 J-Link TCP/IP 服务器
  • Configuration

    命令描述
    si选择目标接口
    语法:si <Interface> (Interface: SWD,JTAG,ICSP,FINE,… 任何支持的目标接口)
    power开关目标电源
    语法:power <State> [perm] (State:on/off)
    wconf写配置字节
    语法:wconf <offset>,<data>
    rconf读配置字节
    语法:rconf
    license显示所有有效的已授权命令
    ipaddr显示/分配连接的 J-Link 的 IP 地址和子网掩码
    gwaddr显示/分配连接的 J-Link 的网关地址
    dnsaddr显示/分配连接的 J-Link 的 DNS 服务器地址
    conf显示连接的 J-Link 的配置
    calibrate校准目标电流测量
    selemu从连接到主机的模拟器列表中选择要通信的模拟器
    语法:selemu [<Interface0> <Interfacce1> …]
    showEmuList显示连接到主机的所有模拟器的列表
    语法:showEmuList [<Interface0> <Interfacce1> …]
    VTREF为 J-Link 的 VTref 设置一个固定值
    语法:VTREF <ValuemV>

版权声明:本文为u013517122原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。