RT-Thread论坛
直播中

刘燕

8年用户 1467经验值
私信 关注
[问答]

JLINK烧录很慢,需要30多S是为什么?

开始下载程序:2025-10-20 21:28:28
Download Start Address: 0x08000000
D:RT-ThreadStudio>”D:/RT-ThreadStudio/repo/Extract/Debugger_Support_Packages/SEGGER/J-Link/v8.48JLink.exe” -device STM32F103ZE -ExitOnError -CommanderScript C:Users35238DesktopStm32_demodemo/.metadata/Temp/rtthread_download_init.jlink
SEGGER J-Link Commander V8.48 (Compiled Jul  2 2025 12:04:01)
DLL version V8.48, compiled Jul  2 2025 12:03:07
J-Link Commander will now exit on Error
J-Link Command File read successfully.
Processing script file…
J-Link>si 1
J-Link connection not established yet but required for command.
Connecting to J-Link via USB…O.K.
Firmware: J-Link V9 compiled May  7 2021 16:26:12
Hardware version: V9.40
J-Link uptime (since boot): N/A (Not supported by this model)
S/N: 69401057
License(s): RDI, GDB, FlashDL, FlashBP, JFlash
VTref=3.258V
Selecting SWD as current target interface.
J-Link>exec device=STM32F103ZE
Device “STM32F103ZE” selected.
J-Link>speed auto
Selecting auto as target interface speed
J-Link>r
Target connection not established yet but required for command.
Device “STM32F103ZE” selected.
Connecting to target via SWD
InitTarget() start
SWD selected. Executing JTAG -> SWD switching sequence.
DAP initialized successfully.
InitTarget() end - Took 21.5ms
Found SW-DP with ID 0x1BA01477
DPIDR: 0x1BA01477
CoreSight SoC-400 or earlier
Scanning AP map to find all available APs
AP[1]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x14770011, ADDR: 0x00000000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
Found Cortex-M3 r1p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
[0][0]: E000E000 CID B105E00D PID 001BB000 SCS
[0][1]: E0001000 CID B105E00D PID 001BB002 DWT
[0][2]: E0002000 CID B105E00D PID 000BB003 FPB
[0][3]: E0000000 CID B105E00D PID 001BB001 ITM
[0][4]: E0040000 CID B105900D PID 001BB923 TPIU-Lite
[0][5]: E0041000 CID B105900D PID 101BB924 ETM-M3
Memory zones:
  Zone: “Default” Description: Default access mode
Cortex-M3 identified.
Reset delay: 0 ms
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
J-Link>h
PC = 08008244, CycleCnt = 00000000
R0 = 00000000, R1 = 00000000, R2 = 20000CC0, R3 = 00000001
R4 = DEADBEEF, R5 = DEADBEEF, R6 = DEADBEEF, R7 = 20000CA8
R8 = DEADBEEF, R9 = DEADBEEF, R10= DEADBEEF, R11= DEADBEEF
R12= 00000000
SP(R13)= 20000B20, MSP= 20000B20, PSP= 20000CA8, R14(LR) = FFFFFFFF
XPSR = 01000000: APSR = nzcvq, EPSR = 01000000, IPSR = 000 (NoException)
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
FPU regs: FPU not enabled / not implemented on connected CPU.
J-Link>loadbin “D:RT-ThreadStudioworkspacetestDebugrtthread.bin” 0x08000000
‘loadbin’: Performing implicit reset & halt of MCU.
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
Downloading file [D:RT-ThreadStudioworkspacetestDebugrtthread.bin]…
J-Link: Flash download: Bank 0 @ 0x08000000: Skipped. Contents already match
O.K.
J-Link>setpc 0x08000000
J-Link>r
Reset delay: 0 ms
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
J-Link>g
Memory map ‘after startup completion point’ is active
J-Link>q
Script processing completed.
OnDisconnectTarget() start
OnDisconnectTarget() end - Took 529us
执行完毕, 耗时:4096ms.
开始下载程序:2025-10-20 21:28:35
Download Start Address: 0x08000000
D:RT-ThreadStudio>”D:/RT-ThreadStudio/repo/Extract/Debugger_Support_Packages/SEGGER/J-Link/v8.48JLink.exe” -device STM32F103ZE -ExitOnError -CommanderScript C:Users35238DesktopStm32_demodemo/.metadata/Temp/rtthread_download_init.jlink
SEGGER J-Link Commander V8.48 (Compiled Jul  2 2025 12:04:01)
DLL version V8.48, compiled Jul  2 2025 12:03:07
J-Link Commander will now exit on Error
J-Link Command File read successfully.
Processing script file…
J-Link>si 1
J-Link connection not established yet but required for command.
Connecting to J-Link via USB…O.K.
Firmware: J-Link V9 compiled May  7 2021 16:26:12
Hardware version: V9.40
J-Link uptime (since boot): N/A (Not supported by this model)
S/N: 69401057
License(s): RDI, GDB, FlashDL, FlashBP, JFlash
VTref=3.258V
Selecting SWD as current target interface.
J-Link>exec device=STM32F103ZE
Device “STM32F103ZE” selected.
J-Link>speed auto
Selecting auto as target interface speed
J-Link>r
Target connection not established yet but required for command.
Device “STM32F103ZE” selected.
Connecting to target via SWD
InitTarget() start
SWD selected. Executing JTAG -> SWD switching sequence.
DAP initialized successfully.
InitTarget() end - Took 21.6ms
Found SW-DP with ID 0x1BA01477
DPIDR: 0x1BA01477
CoreSight SoC-400 or earlier
Scanning AP map to find all available APs
AP[1]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x14770011, ADDR: 0x00000000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x411FC231. Implementer code: 0x41 (ARM)
Found Cortex-M3 r1p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
[0][0]: E000E000 CID B105E00D PID 001BB000 SCS
[0][1]: E0001000 CID B105E00D PID 001BB002 DWT
[0][2]: E0002000 CID B105E00D PID 000BB003 FPB
[0][3]: E0000000 CID B105E00D PID 001BB001 ITM
[0][4]: E0040000 CID B105900D PID 001BB923 TPIU-Lite
[0][5]: E0041000 CID B105900D PID 101BB924 ETM-M3
Memory zones:
  Zone: “Default” Description: Default access mode
Cortex-M3 identified.
Reset delay: 0 ms
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
J-Link>h
PC = 08008244, CycleCnt = 00000000
R0 = 00000000, R1 = 00000000, R2 = 20001498, R3 = 00000000
R4 = DEADBEEF, R5 = DEADBEEF, R6 = DEADBEEF, R7 = 20000CA8
R8 = DEADBEEF, R9 = DEADBEEF, R10= DEADBEEF, R11= DEADBEEF
R12= 00000000
SP(R13)= 20000B20, MSP= 20000B20, PSP= 20000CA8, R14(LR) = FFFFFFFF
XPSR = 01000000: APSR = nzcvq, EPSR = 01000000, IPSR = 000 (NoException)
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
FPU regs: FPU not enabled / not implemented on connected CPU.
J-Link>loadbin “D:RT-ThreadStudioworkspacetestDebugrtthread.bin” 0x08000000
‘loadbin’: Performing implicit reset & halt of MCU.
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
Downloading file [D:RT-ThreadStudioworkspacetestDebugrtthread.bin]…
J-Link: Flash download: Bank 0 @ 0x08000000: Skipped. Contents already match
O.K.
J-Link>setpc 0x08000000
J-Link>r
Reset delay: 0 ms
Reset type: NORMAL (https://wiki.segger.com/J-Link_Reset_Strategies)
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
J-Link>g
Memory map ‘after startup completion point’ is active
J-Link>q
Script processing completed.
OnDisconnectTarget() start
OnDisconnectTarget() end - Took 565us
执行完毕, 耗时:35633ms.
为什么两次速度差这么多

回帖(2)

李宇昂

2025-11-12 16:36:47

  • JLINK 有自动探测,选择速率的机制.可能两次的速率不一样
  • 另外flash擦除后再次写入会很快,不然还需要一个擦除的时间
举报

陈秀英

2025-11-14 17:36:47

烧录过程耗时较长(30秒)可能有以下几个原因及解决方法:


1. 接口速度设置过低



  • 问题原因:J-Link默认速度可能较低(如400 kHz),未发挥硬件潜力。

  • 解决方法

    • 在烧录脚本(rtthread_download_init.jlink)中添加速度设置命令:
      Speed 4000    // 设置为4000 kHz(STM32F103支持的最高SWD速度)

    • 或在RT-Thread Studio中修改配置:
      项目属性 → C/C++构建 → 设置 → 烧录 → J-Link Settings → Speed (kHz) → 设置为4000



2. Flash编程算法效率低



  • 问题原因:默认擦除/写入算法可能以低速逐页操作。

  • 解决方法

    • 启用快速编程:在脚本中添加:
      Exec SetFlashProgMode 1   // 启用快速编程(需芯片支持)

    • 调整擦除范围:避免全片擦除,改用扇区擦除:
      Erase 0x08000000-0x0807FFFF // 仅擦除必要区域



3. 文件路径或名称问题



  • 问题原因:日志中存在特殊字符(>)和空格路径(C:Users35238DesktopStm32_demodemo),可能导致解析延迟。

  • 解决方法

    • 将工程移到纯英文无空格路径(如D:ProjectsSTM32_Demo)。

    • 检查RT-Thread Studio安装路径是否为纯英文(避免D:/RT-ThreadStudio/...中的空格)。



4. 硬件连接不稳定



  • 问题原因:线缆过长、接触不良或干扰导致通信重试。

  • 解决方法

    • 缩短SWD线缆长度(<20 cm),使用屏蔽线。

    • 检查目标板供电稳定,确保NRST和GND连接可靠。

    • 尝试降低速度测试稳定性(如先设1000kHz,再逐步升高)。



5. 驱动程序或固件过旧



  • 问题原因:J-Link V8.48(2015年)版本较老,可能存在效率问题。

  • 解决方法


6. 添加进度反馈


在脚本中插入SetProgressCallback 500,每500ms输出进度,定位耗时步骤:


   SetProgressCallback 500
   LoadFile "your_firmware.bin", 0x08000000

优化后的脚本示例


Speed 4000
SetFlashProgMode 1
SetProgressCallback 500
Erase 0x08000000-0x0803FFFF  // 按需调整范围
LoadFile "firmware.bin", 0x08000000
VerifyFile "firmware.bin", 0x08000000
Exit

其他建议



  • 禁用校验:若不需烧录后校验,移除VerifyFile命令。

  • 对比测试:用J-Flash软件手动烧录相同文件,对比耗时(快速验证是否为环境问题)。

  • 查看详细日志:在命令行添加-Verbose参数输出完整时序信息:
    JLink.exe -device STM32F103ZE -Verbose -CommanderScript init.jlink


通过以上调整,通常可将烧录时间缩短至5秒以内。重点优化接口速度、编程算法和路径问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分