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 version J-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 Configurator J-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 預先選擇要連接的設備
-ExitOnError Commander 在出錯後退出
-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

    命令 描述
    TClear TRACE:清除緩衝區
    TSetSize TRACE:設置跟蹤緩衝區的大小
    TSetFormat TRACE:設置格式
    TSR TRACE:顯示區域 (並分析跟蹤緩衝區)
    TStart TRACE:啓動
    TStop TRACE:停止
  • SWO

    命令 描述
    SWOSpeed SWO:顯示支持的速率
    SWOStart SWO:啓動
    SWOStop SWO:停止
    SWOStat SWO:顯示 SWO 狀態
    SWORead SWO:讀取並顯示 SWO 數據
    SWOShow SWO:讀取並分析 SWO 數據
    SWOFlush SWO:刷新數據
    SWOView SWO:查看終端數據
  • PERIODIC

    命令 描述
    PERConf PERIODIC:配置
    PERStart PERIODIC:啓動
    PERStop PERIODIC:停止
    PERStat PERIODIC:顯示狀態
    PERRead PERIODIC:讀取並顯示數據
    PERShow PERIODIC:讀取並分析數據
  • 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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章