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-Link 的 USB 驅動和文檔。
軟件 | 描述 |
---|---|
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 的配置工具。同時支持基於 USB 和 TCP/IP 的 J-Link 連接。詳見: J-Link Configurator |
RDI support | 提供支持遠程調試接口(RDI: Remote Debug Interface)。這將允許用戶使用 遵從 RDI 的任何調試器通過 J-Link 調試。 |
Processor specific tools | 處理特定處理器的免費命令行工具。包括:STR9 Commander 和 STM32 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 | 設置 IRPre 和 DRPre |
-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 Commander。J-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 Commander。J-Link 腳本文件主要用於連接到需要特殊連接序列的目標,然後才能與核心通信。詳見 J-Link Script Files。
用法 | 示例 |
---|---|
JLink.exe -JLinkScriptFile <File> | JLink.exe -JLinkScriptFile "D:\Default.JLinkScript" |
3.1.9 -JTAGConf
通過 IRPre 和 DRPre,以便在 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 msg 繼續運行 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
語法:Erasewm 寫測試字
語法:wm <NumWords>is 識別掃描鏈選擇寄存器的長度 (Identify length of scan chain select register) ms 測量掃描鏈 (scan chain) 的長度
語法:ms <Scan chain>mr 測量 RTCK 反應時間 (react time)。
語法:mrq 退出 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 讀配置字節
語法:rconflicense 顯示所有有效的已授權命令 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>