<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>J-LINK on Hacper&#39;s Blog</title>
    <link>https://hacperme.com/tags/j-link/</link>
    <description>Recent content in J-LINK on Hacper&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 23 May 2025 00:49:37 +0800</lastBuildDate>
    <atom:link href="https://hacperme.com/tags/j-link/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>J-Link 命令行工具烧写 N32G430 MCU 固件</title>
      <link>https://hacperme.com/posts/notes/2025/20250523_n32g430_jlink_cmd/</link>
      <pubDate>Fri, 23 May 2025 00:49:37 +0800</pubDate>
      <guid>https://hacperme.com/posts/notes/2025/20250523_n32g430_jlink_cmd/</guid>
      <description>J-Link 命令行工具烧写 N32G430 MCU 固件</description>
      <content:encoded><![CDATA[<p>J-Link 提供一个叫做 J-Link Commander (JLink.exe) 的命令行工具，可以使用 J-Link Command File (.jlink script) 方式批量自动化烧录。</p>
<p>创建一个.jlink后缀的 J-Link 脚本：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">USB</span>
</span></span><span class="line"><span class="cl"><span class="n">Device</span> <span class="n">N32G430K8</span>
</span></span><span class="line"><span class="cl"><span class="n">If</span> <span class="n">SWD</span>
</span></span><span class="line"><span class="cl"><span class="n">Speed</span> <span class="mi">4000</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span>
</span></span><span class="line"><span class="cl"><span class="n">h</span>
</span></span><span class="line"><span class="cl"><span class="n">loadbin</span> <span class="n">firmware</span><span class="o">.</span><span class="n">bin</span><span class="p">,</span> <span class="mh">0x08000000</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span>
</span></span><span class="line"><span class="cl"><span class="n">g</span>
</span></span><span class="line"><span class="cl"><span class="n">exit</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>在命令行调用指令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">JLink.exe -CommanderScript C:<span class="se">\U</span>sers<span class="se">\x</span>xxx<span class="se">\D</span>esktop<span class="se">\j</span>.jlink
</span></span></code></pre></td></tr></table>
</div>
</div><p>烧写固件示例 log:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span><span class="lnt">72
</span><span class="lnt">73
</span><span class="lnt">74
</span><span class="lnt">75
</span><span class="lnt">76
</span><span class="lnt">77
</span><span class="lnt">78
</span><span class="lnt">79
</span><span class="lnt">80
</span><span class="lnt">81
</span><span class="lnt">82
</span><span class="lnt">83
</span><span class="lnt">84
</span><span class="lnt">85
</span><span class="lnt">86
</span><span class="lnt">87
</span><span class="lnt">88
</span><span class="lnt">89
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">~<span class="se">\D</span>esktop via 🐍 v2.7.18
</span></span><span class="line"><span class="cl">❯ JLink.exe -CommanderScript C:<span class="se">\U</span>sers<span class="se">\x</span>xxx<span class="se">\D</span>esktop<span class="se">\j</span>.jlink
</span></span><span class="line"><span class="cl">SEGGER J-Link Commander V7.94a <span class="o">(</span>Compiled Dec  <span class="m">6</span> <span class="m">2023</span> 16:07:38<span class="o">)</span>
</span></span><span class="line"><span class="cl">DLL version V7.94a, compiled Dec  <span class="m">6</span> <span class="m">2023</span> 16:06:16
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">J-Link Command File <span class="nb">read</span> successfully.
</span></span><span class="line"><span class="cl">Processing script file...
</span></span><span class="line"><span class="cl">J-Link&gt;USB
</span></span><span class="line"><span class="cl">Connecting to J-Link via USB...O.K.
</span></span><span class="line"><span class="cl">Firmware: J-Link OB-STM32F072-CortexM compiled Jan  <span class="m">7</span> <span class="m">2019</span> 14:09:37
</span></span><span class="line"><span class="cl">Hardware version: V1.00
</span></span><span class="line"><span class="cl">J-Link uptime <span class="o">(</span>since boot<span class="o">)</span>: N/A <span class="o">(</span>Not supported by this model<span class="o">)</span>
</span></span><span class="line"><span class="cl">S/N: -1
</span></span><span class="line"><span class="cl">License<span class="o">(</span>s<span class="o">)</span>: GDB, RDI, FlashBP, FlashDL, JFlash, RDDI
</span></span><span class="line"><span class="cl"><span class="nv">VTref</span><span class="o">=</span>3.300V
</span></span><span class="line"><span class="cl">J-Link&gt;Device N32G430K8
</span></span><span class="line"><span class="cl">J-Link&gt;If SWD
</span></span><span class="line"><span class="cl">Selecting SWD as current target interface.
</span></span><span class="line"><span class="cl">J-Link&gt;Speed <span class="m">4000</span>
</span></span><span class="line"><span class="cl">Selecting <span class="m">4000</span> kHz as target interface speed
</span></span><span class="line"><span class="cl">J-Link&gt;r
</span></span><span class="line"><span class="cl">Target connection not established yet but required <span class="k">for</span> command.
</span></span><span class="line"><span class="cl">Device <span class="s2">&#34;N32G430K8&#34;</span> selected.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Connecting to target via SWD
</span></span><span class="line"><span class="cl">Found SW-DP with ID 0x2BA01477
</span></span><span class="line"><span class="cl">DPv0 detected
</span></span><span class="line"><span class="cl">CoreSight SoC-400 or earlier
</span></span><span class="line"><span class="cl">Scanning AP map to find all available APs
</span></span><span class="line"><span class="cl">AP<span class="o">[</span>1<span class="o">]</span>: Stopped AP scan as end of AP map has been reached
</span></span><span class="line"><span class="cl">AP<span class="o">[</span>0<span class="o">]</span>: AHB-AP <span class="o">(</span>IDR: 0x24770011<span class="o">)</span>
</span></span><span class="line"><span class="cl">Iterating through AP map to find AHB-AP to use
</span></span><span class="line"><span class="cl">AP<span class="o">[</span>0<span class="o">]</span>: Core found
</span></span><span class="line"><span class="cl">AP<span class="o">[</span>0<span class="o">]</span>: AHB-AP ROM base: 0xE00FF000
</span></span><span class="line"><span class="cl">CPUID register: 0x410FC241. Implementer code: 0x41 <span class="o">(</span>ARM<span class="o">)</span>
</span></span><span class="line"><span class="cl">Found Cortex-M4 r0p1, Little endian.
</span></span><span class="line"><span class="cl">FPUnit: <span class="m">6</span> code <span class="o">(</span>BP<span class="o">)</span> slots and <span class="m">2</span> literal slots
</span></span><span class="line"><span class="cl">CoreSight components:
</span></span><span class="line"><span class="cl">ROMTbl<span class="o">[</span>0<span class="o">]</span> @ E00FF000
</span></span><span class="line"><span class="cl"><span class="o">[</span>0<span class="o">][</span>0<span class="o">]</span>: E000E000 CID B105E00D PID 000BB00C SCS-M7
</span></span><span class="line"><span class="cl"><span class="o">[</span>0<span class="o">][</span>1<span class="o">]</span>: E0001000 CID B105E00D PID 003BB002 DWT
</span></span><span class="line"><span class="cl"><span class="o">[</span>0<span class="o">][</span>2<span class="o">]</span>: E0002000 CID B105E00D PID 002BB003 FPB
</span></span><span class="line"><span class="cl"><span class="o">[</span>0<span class="o">][</span>3<span class="o">]</span>: E0000000 CID B105E00D PID 003BB001 ITM
</span></span><span class="line"><span class="cl"><span class="o">[</span>0<span class="o">][</span>4<span class="o">]</span>: E0040000 CID B105900D PID 000BB9A1 TPIU
</span></span><span class="line"><span class="cl">Memory zones:
</span></span><span class="line"><span class="cl">  Zone: <span class="s2">&#34;Default&#34;</span> Description: Default access mode
</span></span><span class="line"><span class="cl">Cortex-M4 identified.
</span></span><span class="line"><span class="cl">Reset delay: <span class="m">0</span> ms
</span></span><span class="line"><span class="cl">Reset <span class="nb">type</span> NORMAL: Resets core <span class="p">&amp;</span> peripherals via SYSRESETREQ <span class="p">&amp;</span> VECTRESET bit.
</span></span><span class="line"><span class="cl">Reset: Halt core after reset via DEMCR.VC_CORERESET.
</span></span><span class="line"><span class="cl">Reset: Reset device via AIRCR.SYSRESETREQ.
</span></span><span class="line"><span class="cl">J-Link&gt;h
</span></span><span class="line"><span class="cl"><span class="nv">PC</span> <span class="o">=</span> 08003244, <span class="nv">CycleCnt</span> <span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">R0</span> <span class="o">=</span> 00000000, <span class="nv">R1</span> <span class="o">=</span> 00000000, <span class="nv">R2</span> <span class="o">=</span> 00000000, <span class="nv">R3</span> <span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">R4</span> <span class="o">=</span> 00000000, <span class="nv">R5</span> <span class="o">=</span> 00000000, <span class="nv">R6</span> <span class="o">=</span> 00000000, <span class="nv">R7</span> <span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">R8</span> <span class="o">=</span> 00000000, <span class="nv">R9</span> <span class="o">=</span> 00000000, <span class="nv">R10</span><span class="o">=</span> 00000000, <span class="nv">R11</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">R12</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl">SP<span class="o">(</span>R13<span class="o">)=</span> 20004000, <span class="nv">MSP</span><span class="o">=</span> 20004000, <span class="nv">PSP</span><span class="o">=</span> 00000000, R14<span class="o">(</span>LR<span class="o">)</span> <span class="o">=</span> FFFFFFFF
</span></span><span class="line"><span class="cl"><span class="nv">XPSR</span> <span class="o">=</span> 01000000: <span class="nv">APSR</span> <span class="o">=</span> nzcvq, <span class="nv">EPSR</span> <span class="o">=</span> 01000000, <span class="nv">IPSR</span> <span class="o">=</span> <span class="m">000</span> <span class="o">(</span>NoException<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">CFBP</span> <span class="o">=</span> 00000000, <span class="nv">CONTROL</span> <span class="o">=</span> 00, <span class="nv">FAULTMASK</span> <span class="o">=</span> 00, <span class="nv">BASEPRI</span> <span class="o">=</span> 00, <span class="nv">PRIMASK</span> <span class="o">=</span> <span class="m">00</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">FPS0</span> <span class="o">=</span> 00000000, <span class="nv">FPS1</span> <span class="o">=</span> 00000000, <span class="nv">FPS2</span> <span class="o">=</span> 00000000, <span class="nv">FPS3</span> <span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS4</span> <span class="o">=</span> 00000000, <span class="nv">FPS5</span> <span class="o">=</span> 00000000, <span class="nv">FPS6</span> <span class="o">=</span> 00000000, <span class="nv">FPS7</span> <span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS8</span> <span class="o">=</span> 00000000, <span class="nv">FPS9</span> <span class="o">=</span> 00000000, <span class="nv">FPS10</span><span class="o">=</span> 00000000, <span class="nv">FPS11</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS12</span><span class="o">=</span> 00000000, <span class="nv">FPS13</span><span class="o">=</span> 00000000, <span class="nv">FPS14</span><span class="o">=</span> 00000000, <span class="nv">FPS15</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS16</span><span class="o">=</span> 00000000, <span class="nv">FPS17</span><span class="o">=</span> 00000000, <span class="nv">FPS18</span><span class="o">=</span> 00000000, <span class="nv">FPS19</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS20</span><span class="o">=</span> 00000000, <span class="nv">FPS21</span><span class="o">=</span> 00000000, <span class="nv">FPS22</span><span class="o">=</span> 00000000, <span class="nv">FPS23</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS24</span><span class="o">=</span> 00000000, <span class="nv">FPS25</span><span class="o">=</span> 00000000, <span class="nv">FPS26</span><span class="o">=</span> 00000000, <span class="nv">FPS27</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPS28</span><span class="o">=</span> 00000000, <span class="nv">FPS29</span><span class="o">=</span> 00000000, <span class="nv">FPS30</span><span class="o">=</span> 00000000, <span class="nv">FPS31</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl"><span class="nv">FPSCR</span><span class="o">=</span> <span class="m">00000000</span>
</span></span><span class="line"><span class="cl">J-Link&gt;loadbin firmware.bin, 0x08000000
</span></span><span class="line"><span class="cl"><span class="s1">&#39;loadbin&#39;</span>: Performing implicit reset <span class="p">&amp;</span> halt of MCU.
</span></span><span class="line"><span class="cl">Reset: Halt core after reset via DEMCR.VC_CORERESET.
</span></span><span class="line"><span class="cl">Reset: Reset device via AIRCR.SYSRESETREQ.
</span></span><span class="line"><span class="cl">Downloading file <span class="o">[</span>firmware.bin<span class="o">]</span>...
</span></span><span class="line"><span class="cl">J-Link: Flash download: Bank <span class="m">0</span> @ 0x08000000: Skipped. Contents already match
</span></span><span class="line"><span class="cl">O.K.
</span></span><span class="line"><span class="cl">J-Link&gt;r
</span></span><span class="line"><span class="cl">Reset delay: <span class="m">0</span> ms
</span></span><span class="line"><span class="cl">Reset <span class="nb">type</span> NORMAL: Resets core <span class="p">&amp;</span> peripherals via SYSRESETREQ <span class="p">&amp;</span> VECTRESET bit.
</span></span><span class="line"><span class="cl">Reset: Halt core after reset via DEMCR.VC_CORERESET.
</span></span><span class="line"><span class="cl">Reset: Reset device via AIRCR.SYSRESETREQ.
</span></span><span class="line"><span class="cl">J-Link&gt;g
</span></span><span class="line"><span class="cl">Memory map <span class="s1">&#39;after startup completion point&#39;</span> is active
</span></span><span class="line"><span class="cl">J-Link&gt;exit
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Script processing completed.
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
