在 STM32F765 上使用引导加载程序时 J-Link 调试器出现问题

Issue with J-Link debugger while working with bootloader on STM32F765

我正在使用 ST 的 Nucleo 板上的 J-Link EDU 和 STLink 调试器。为了进行测试,引导加载程序代码位于 0x8000000 处,并跳转到主要应用程序代码所在的 0x8020000 处。当我使用Jlink EDU时,每次都无法成功烧写0x8020000处的flash,如果我修改程序并开始调试,Jlink会擦除flash但烧写不成功,bootloader跳转后,MCU获取 HardFault。现在无论我使用 Jlink 还是 STLINK(转换为 Jlink)都会发生这种情况。通常我看到它停留在 0xFFFFFFFE。此时JLINK已擦除应用程序代码但无法对其进行编程。

有趣的是,转换回 STlink 调试器并与 openocd 一起使用时,引导加载程序跳转到主应用程序代码并从那里进行调试没有任何问题。

我还发现,如果我通过STLink和OpenOCD在0x8020000处编写主应用程序代码,然后切换到JLINK EDU进行调试,只要JLINK不重新编写它就可以工作。如果在日志中,我看到JLINK刷写了代码,那么ST在从bootloader跳转后崩溃了。所以我肯定认为这与JLINK在调试期间如何擦除和编程ST有关。

我也试过用 JLINK 指挥官编程,但似乎也失败了。除非我完全擦除芯片。

我正在使用带有 GNU ARM Eclipse 插件的系统 Workbench 2.0 进行 Jlink 调试,截至目前最新的 ARM 工具链和 Jlink 616c。我在双组配置中使用带闪存的 STM32F765VI。

为了清楚起见,我还附上了 JLINK 和 STLINK 的 GDB 日志。我想使用 JLINK 进行调试,因为我可以在 eclipse 中使用 SWO 控制台,而在 OpenOCD 中它非常麻烦,所以想解决它。

尝试编程后 JLINK 调试失败:

SEGGER J-Link GDB Server V6.16c Command Line Version
JLinkARM.dll V6.16c (DLL compiled Jun 16 2017 18:14:49)

WARNING: Unknown command line parameter -timeout found.
WARNING: Unknown command line parameter 0 found.
-----GDB Server start settings-----
GDBInit file:                  none
GDB Server Listening port:     2331
SWO raw output listening port: 2332
Terminal I/O port:             2333
Accept remote connection:      localhost only
Generate logfile:              off
Verify download:               on
Init regs on start:            on
Silent mode:                   off
Single run mode:               on
Target connection timeout:     0 ms
------J-Link related settings------
J-Link Host interface:         USB
J-Link script:                 none
J-Link settings file:          none
------Target related settings------
Target device:                 STM32F765VI
Target interface:              SWD
Target interface speed:        1000kHz
Target endian:                 little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link V10 compiled Jun 16 2017 16:15:19
Hardware: V10.10
S/N: 260101191
OEM: SEGGER-EDU
Feature(s): FlashBP, GDB
Checking target voltage...
Target voltage: 3.35 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...Connected to 127.0.0.1
Reading all registers
Read 4 bytes @ address 0x00000000 (Data = 0x51E9FF66)
Read 2 bytes @ address 0x00000000 (Data = 0xFF66)
Target interface speed set to 1000 kHz
Resetting target
Halting target CPU...
...Target halted (PC = 0x080023CC)
R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
R12= 00000000, R13= 20080000, MSP= 20080000, PSP= 00000000
R14(LR) = FFFFFFFF, R15(PC) = 080023CC
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading all registers
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Target interface speed set to 15000 kHz
Flash breakpoints enabled
SWO disabled succesfully.
SWO enabled succesfully.
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Downloading 520 bytes @ address 0x08020000 - Verified OK
Downloading 16064 bytes @ address 0x08020210 - Verified OK
Downloading 16096 bytes @ address 0x080240D0 - Verified OK
Downloading 16048 bytes @ address 0x08027FB0 - Verified OK
Downloading 16112 bytes @ address 0x0802BE60 - Verified OK
Downloading 16096 bytes @ address 0x0802FD50 - Verified OK
Downloading 16112 bytes @ address 0x08033C30 - Verified OK
Downloading 16144 bytes @ address 0x08037B20 - Verified OK
Downloading 16000 bytes @ address 0x0803BA30 - Verified OK
Downloading 15920 bytes @ address 0x0803F8B0 - Verified OK
Downloading 16176 bytes @ address 0x080436E0 - Verified OK
Downloading 16064 bytes @ address 0x08047610 - Verified OK
Downloading 16032 bytes @ address 0x0804B4D0 - Verified OK
Downloading 15696 bytes @ address 0x0804F370 - Verified OK
Downloading 16032 bytes @ address 0x080530C0 - Verified OK
Downloading 16176 bytes @ address 0x08056F60 - Verified OK
Downloading 16064 bytes @ address 0x0805AE90 - Verified OK
Downloading 16064 bytes @ address 0x0805ED50 - Verified OK
Downloading 16128 bytes @ address 0x08062C10 - Verified OK
Downloading 16176 bytes @ address 0x08066B10 - Verified OK
Downloading 16112 bytes @ address 0x0806AA40 - Verified OK
Downloading 16304 bytes @ address 0x0806E930 - Verified OK
Downloading 16272 bytes @ address 0x080728E0 - Verified OK
Downloading 16048 bytes @ address 0x08076870 - Verified OK
Downloading 16080 bytes @ address 0x0807A720 - Verified OK
Downloading 16048 bytes @ address 0x0807E5F0 - Verified OK
Downloading 16048 bytes @ address 0x080824A0 - Verified OK
Downloading 14616 bytes @ address 0x08086350 - Verified OK
Downloading 16144 bytes @ address 0x08089C80 - Verified OK
Downloading 16224 bytes @ address 0x0808DB90 - Verified OK
Downloading 16128 bytes @ address 0x08091AF0 - Verified OK
Downloading 16288 bytes @ address 0x080959F0 - Verified OK
Downloading 16272 bytes @ address 0x08099990 - Verified OK
Downloading 16256 bytes @ address 0x0809D920 - Verified OK
Downloading 14880 bytes @ address 0x080A18A0 - Verified OK
Downloading 8 bytes @ address 0x080A52C0 - Verified OK
Downloading 4 bytes @ address 0x080A52C8 - Verified OK
Downloading 4 bytes @ address 0x080A52CC - Verified OK
Downloading 1068 bytes @ address 0x080A52D0 - Verified OK
Comparing flash   [....................] Done.
Erasing flash     [....................] Done.
Programming flash [....................] Done.
Verifying flash   [....................] Done.
Writing register (PC = 0x08083ED0)
Read 4 bytes @ address 0x08083ED0 (Data = 0xE0032100)
Read 2 bytes @ address 0x08083ED0 (Data = 0x2100)
Read 2 bytes @ address 0x0807BAAE (Data = 0xF44F)
Read 2 bytes @ address 0x0807BAAE (Data = 0xF44F)
Read 2 bytes @ address 0x0807BAFA (Data = 0xF44F)
Read 2 bytes @ address 0x0807BAFA (Data = 0xF44F)
Read 2 bytes @ address 0x08080814 (Data = 0x4B14)
Read 4 bytes @ address 0x08080868 (Data = 0x2002B994)
Read 2 bytes @ address 0x08080814 (Data = 0x4B14)
Read 2 bytes @ address 0x0807BB44 (Data = 0x687B)
Read 2 bytes @ address 0x0807BBB2 (Data = 0xF897)
Resetting target
Halting target CPU...
...Target halted (PC = 0x080023CC)
Read 2 bytes @ address 0x08080814 (Data = 0x4B14)
Read 4 bytes @ address 0x08080868 (Data = 0x2002B994)
Read 2 bytes @ address 0x08080814 (Data = 0x4B14)
Read 4 bytes @ address 0x08080868 (Data = 0x2002B994)
Read 2 bytes @ address 0x08080814 (Data = 0x4B14)
R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
R12= 00000000, R13= 20080000, MSP= 20080000, PSP= 00000000
R14(LR) = FFFFFFFF, R15(PC) = 080023CC
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading all registers
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Setting breakpoint @ address 0x0807BAAE, Size = 2, BPHandle = 0x0001
Setting breakpoint @ address 0x0807BAFA, Size = 2, BPHandle = 0x0002
Setting breakpoint @ address 0x0807BBB2, Size = 2, BPHandle = 0x0003
Setting breakpoint @ address 0x08080814, Size = 2, BPHandle = 0x0004
Starting target CPU...
...Target halted (DBGRQ, PC = 0xFFFFFFFE)
Reading all registers
WARNING: Failed to read memory @ address 0xFFFFFFFE
Removing breakpoint @ address 0x0807BAAE, Size = 2
Removing breakpoint @ address 0x0807BAFA, Size = 2
Removing breakpoint @ address 0x0807BBB2, Size = 2
Removing breakpoint @ address 0x08080814, Size = 2
WARNING: Failed to read memory @ address 0xFFFFFFF4
Reading 64 bytes @ address 0xFFFFFFC0
WARNING: Failed to read memory @ address 0xFFFFFFC0
WARNING: Failed to read memory @ address 0xFFFFFFF0
Reading 64 bytes @ address 0xFFFFFFC0
WARNING: Failed to read memory @ address 0xFFFFFFC0
WARNING: Failed to read memory @ address 0xFFFFFFF0

JLINK调试成功如果不闪:

SEGGER J-Link GDB Server V6.16c Command Line Version
JLinkARM.dll V6.16c (DLL compiled Jun 16 2017 18:14:49)

WARNING: Unknown command line parameter -timeout found.
WARNING: Unknown command line parameter 0 found.
-----GDB Server start settings-----
GDBInit file:                  none
GDB Server Listening port:     2331
SWO raw output listening port: 2332
Terminal I/O port:             2333
Accept remote connection:      localhost only
Generate logfile:              off
Verify download:               on
Init regs on start:            on
Silent mode:                   off
Single run mode:               on
Target connection timeout:     0 ms
------J-Link related settings------
J-Link Host interface:         USB
J-Link script:                 none
J-Link settings file:          none
------Target related settings------
Target device:                 STM32F765VI
Target interface:              SWD
Target interface speed:        1000kHz
Target endian:                 little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link V10 compiled Jun 16 2017 16:15:19
Hardware: V10.10
S/N: 260101191
OEM: SEGGER-EDU
Feature(s): FlashBP, GDB
Checking target voltage...
Target voltage: 3.35 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...Connected to 127.0.0.1
Reading all registers
Read 4 bytes @ address 0x00000000 (Data = 0x51E9FF66)
Read 2 bytes @ address 0x00000000 (Data = 0xFF66)
Target interface speed set to 1000 kHz
Resetting target
Halting target CPU...
...Target halted (PC = 0x080023CC)
R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
R12= 00000000, R13= 20080000, MSP= 20080000, PSP= 00000000
R14(LR) = FFFFFFFF, R15(PC) = 080023CC
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading all registers
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Target interface speed set to 15000 kHz
Flash breakpoints enabled
SWO disabled succesfully.
SWO enabled succesfully.
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Downloading 520 bytes @ address 0x08020000 - Verified OK
Downloading 16064 bytes @ address 0x08020210 - Verified OK
Downloading 16096 bytes @ address 0x080240D0 - Verified OK
Downloading 16048 bytes @ address 0x08027FB0 - Verified OK
Downloading 16112 bytes @ address 0x0802BE60 - Verified OK
Downloading 16096 bytes @ address 0x0802FD50 - Verified OK
Downloading 16112 bytes @ address 0x08033C30 - Verified OK
Downloading 16144 bytes @ address 0x08037B20 - Verified OK
Downloading 16000 bytes @ address 0x0803BA30 - Verified OK
Downloading 15920 bytes @ address 0x0803F8B0 - Verified OK
Downloading 16176 bytes @ address 0x080436E0 - Verified OK
Downloading 16064 bytes @ address 0x08047610 - Verified OK
Downloading 16032 bytes @ address 0x0804B4D0 - Verified OK
Downloading 15696 bytes @ address 0x0804F370 - Verified OK
Downloading 16032 bytes @ address 0x080530C0 - Verified OK
Downloading 16176 bytes @ address 0x08056F60 - Verified OK
Downloading 16064 bytes @ address 0x0805AE90 - Verified OK
Downloading 16064 bytes @ address 0x0805ED50 - Verified OK
Downloading 16128 bytes @ address 0x08062C10 - Verified OK
Downloading 16176 bytes @ address 0x08066B10 - Verified OK
Downloading 16112 bytes @ address 0x0806AA40 - Verified OK
Downloading 16304 bytes @ address 0x0806E930 - Verified OK
Downloading 16272 bytes @ address 0x080728E0 - Verified OK
Downloading 16048 bytes @ address 0x08076870 - Verified OK
Downloading 16080 bytes @ address 0x0807A720 - Verified OK
Downloading 16048 bytes @ address 0x0807E5F0 - Verified OK
Downloading 16048 bytes @ address 0x080824A0 - Verified OK
Downloading 14616 bytes @ address 0x08086350 - Verified OK
Downloading 16144 bytes @ address 0x08089C80 - Verified OK
Downloading 16224 bytes @ address 0x0808DB90 - Verified OK
Downloading 16128 bytes @ address 0x08091AF0 - Verified OK
Downloading 16288 bytes @ address 0x080959F0 - Verified OK
Downloading 16272 bytes @ address 0x08099990 - Verified OK
Downloading 16256 bytes @ address 0x0809D920 - Verified OK
Downloading 14880 bytes @ address 0x080A18A0 - Verified OK
Downloading 8 bytes @ address 0x080A52C0 - Verified OK
Downloading 4 bytes @ address 0x080A52C8 - Verified OK
Downloading 4 bytes @ address 0x080A52CC - Verified OK
Downloading 1068 bytes @ address 0x080A52D0 - Verified OK
Comparing flash   [....................] Done.
Verifying flash   [....................] Done.
Writing register (PC = 0x08083ED0)
Read 4 bytes @ address 0x08083ED0 (Data = 0xD034F8DF)
Read 2 bytes @ address 0x08083ED0 (Data = 0xF8DF)
Read 2 bytes @ address 0x08083ED2 (Data = 0xD034)
Read 2 bytes @ address 0x0807BAAE (Data = 0xF44F)
Read 2 bytes @ address 0x0807BAAE (Data = 0xF44F)
Read 2 bytes @ address 0x0807BB44 (Data = 0x687B)
Read 2 bytes @ address 0x0807BBB2 (Data = 0xF897)
Read 2 bytes @ address 0x0807BAFA (Data = 0xF44F)
Read 2 bytes @ address 0x0807BAFA (Data = 0xF44F)
Resetting target
Halting target CPU...
...Target halted (PC = 0x080023CC)
Read 2 bytes @ address 0x08080814 (Data = 0x4B15)
Read 4 bytes @ address 0x0808086C (Data = 0x2002B994)
Read 2 bytes @ address 0x08080814 (Data = 0x4B15)
Read 4 bytes @ address 0x0808086C (Data = 0x2002B994)
Read 2 bytes @ address 0x08080814 (Data = 0x4B15)
R0 = 00000000, R1 = 00000000, R2 = 00000000, R3 = 00000000
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
R12= 00000000, R13= 20080000, MSP= 20080000, PSP= 00000000
R14(LR) = FFFFFFFF, R15(PC) = 080023CC
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
Reading all registers
Read 4 bytes @ address 0x080023CC (Data = 0xD034F8DF)
Read 2 bytes @ address 0x080023CC (Data = 0xF8DF)
Setting breakpoint @ address 0x0807BAAE, Size = 2, BPHandle = 0x0001
Setting breakpoint @ address 0x0807BAFA, Size = 2, BPHandle = 0x0002
Setting breakpoint @ address 0x0807BBB2, Size = 2, BPHandle = 0x0003
Setting breakpoint @ address 0x08080814, Size = 2, BPHandle = 0x0004
Starting target CPU...
...Breakpoint reached @ address 0x08080814
Reading all registers
Read 4 bytes @ address 0x08080814 (Data = 0x68184B15)
Removing breakpoint @ address 0x0807BAAE, Size = 2
Removing breakpoint @ address 0x0807BAFA, Size = 2
Removing breakpoint @ address 0x0807BBB2, Size = 2
Removing breakpoint @ address 0x08080814, Size = 2
Reading 64 bytes @ address 0x20003A40
Read 4 bytes @ address 0x0802ED40 (Data = 0xB083B480)
Reading 64 bytes @ address 0x200039C0
Read 4 bytes @ address 0x0802ED40 (Data = 0xB083B480)

STLINK调试成功

Open On-Chip Debugger 0.10.0-dev-00278-ga53935e-dirty (2017-05-09-09:25)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 4000 kHz
adapter_nsrst_delay: 100
Info : clock speed 4000 kHz
Info : STLINK v2 JTAG v27 API v2 M v15 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 0.023669
Error: target voltage may be too low for reliable debugging
Info : STM32F765VITx.cpu: hardware has 8 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection on tcp/3333
STM32F765VITx.cpu: target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080023cc msp: 0x20080000
Info : flash size probed value 2048
Info : flash size probed value 2048
STM32F765VITx.cpu: target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080023cc msp: 0x20080000
STM32F765VITx.cpu: target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080023cc msp: 0x20080000
Info : Padding image section 0 with 8 bytes
Info : Padding image section 1 with 24 bytes
STM32F765VITx.cpu: target state: halted
target halted due to breakpoint, current mode: Thread 
xPSR: 0x61000000 pc: 0x20000084 msp: 0x20080000
Warn : keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (4290). Workaround: increase "set remotetimeout" in GDB
STM32F765VITx.cpu: target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080023cc msp: 0x20080000

JLINK指挥官失败日志

SEGGER J-Link Commander V6.16c (Compiled Jun 16 2017 18:15:26)
DLL version V6.16c, compiled Jun 16 2017 18:14:49

Connecting to J-Link via USB...O.K.
Firmware: J-Link V10 compiled Jun 16 2017 16:15:19
Hardware version: V10.10
S/N: 260101191
License(s): FlashBP, GDB
OEM: SEGGER-EDU
VTref = 3.348V


Type "connect" to establish a target connection, '?' for help
J-Link>connect
Please specify device / core. <Default>: STM32F765VI
Type '?' for selection dialog
Device>
Please specify target interface:
  J) JTAG (Default)
  S) SWD
TIF>s
Specify target interface speed [kHz]. <Default>: 4000 kHz
Speed>
Device "STM32F765VI" selected.


Connecting to target via SWD
Found SW-DP with ID 0x5BA02477
Found SW-DP with ID 0x5BA02477
Scanning APs, stopping at first AHB-AP found.
AP[0] IDR: 0x74770001 (AHB-AP)
AHB-AP ROM: 0xE00FD000 (Base addr. of first ROM table)
CPUID reg: 0x411FC270. Implementer code: 0x41 (ARM)
Found Cortex-M7 r1p0, Little endian.
FPUnit: 8 code (BP) slots and 0 literal slots
CoreSight components:
ROMTbl[0] @ E00FD000
ROMTbl[0][0]: E00FE000, CID: B105100D, PID: 000BB4C8 ROM Table
ROMTbl[1] @ E00FE000
ROMTbl[1][0]: E00FF000, CID: B105100D, PID: 000BB4C7 ROM Table
ROMTbl[2] @ E00FF000
ROMTbl[2][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS
ROMTbl[2][1]: E0001000, CID: B105E00D, PID: 000BB002 DWT
ROMTbl[2][2]: E0002000, CID: B105E00D, PID: 000BB00E FPB
ROMTbl[2][3]: E0000000, CID: B105E00D, PID: 000BB001 ITM
ROMTbl[1][1]: E0041000, CID: B105900D, PID: 001BB975 ETM-M7
ROMTbl[0][1]: E0040000, CID: B105900D, PID: 000BB9A9 TPIU-M7
Cache: Separate I- and D-cache.
I-Cache L1: 16 KB, 256 Sets, 32 Bytes/Line, 2-Way
D-Cache L1: 16 KB, 128 Sets, 32 Bytes/Line, 4-Way
Cortex-M7 identified.
J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
Setting AIRCR.SYSRESETREQ
J-Link>loadbin C:\Users\User\workspace_10\DC_Booster_F756\Debug\DC_Booster_F756.bin,0x08020000
Downloading file [C:\Users\User\workspace_10\DC_Booster_F756\Debug\DC_Booster_F756.bin]...
J-Link: Flash download: Flash programming performed for 2 ranges (131072 bytes)
J-Link: Flash download: Total time needed: 6.157s (Prepare: 0.022s, Compare: 0.081s, Erase: 4.931s, Program: 1.116s, Verify: 0.000s, Restore: 0.005s)
J-Link: Flash download: Restarting flash programming due to program error (possibly skipped erasure of half-way erased sector).
J-Link: Flash download: Skip optimizations disabled for second try.
Error while programming flash: Programming failed.
J-Link>verifybin C:\Users\User\workspace_10\DC_Booster_F756\Debug\DC_Booster_F756.bin,0x08020000
Loading binary file C:\Users\User\workspace_10\DC_Booster_F756\Debug\DC_Booster_F756.bin
Reading 546556 bytes data from target memory @ 0x08020000.
Verify failed @ address 0x08065522.
Expected FE read 00J-Link>

根据第一个日志,在我看来 J-Link 擦除闪存,然后从地址 0x08020000 对其进行编程 -> 没有引导加载程序,在 0x08000000 处没有任何可执行的 -> 直接跳转到 hardFault (尽管在向量 table 中没有找到处理程序并且 CPU 锁定了)。我不是 J-Link 的专家,但我们在类似的工具链中使用它,场景如下:

  • BSL 和应用程序二进制文件使用一个简单的工具组合在一起,并由 J-Link 一起闪存。之后可以通过连接到 运行 目标来调试其中任何一个。
  • BSL 被排除并替换为 'stub' 仅跳转到应用程序

两者都完美无缺。

我联系了 Segger 的人,他们创建了一个 wiki 页面,详细说明了如何解决这个问题。为了让 Jlink 了解 STM32F7 设备上的双银行配置,Jlink Open Flash 加载程序必须与包含双银行配置信息的自定义脚本一起使用。完成后,当程序从引导加载程序跳转到主应用程序时,Jlink 调试器就没有问题了。以下是让 Jlink 与 STM32F765VI 在 Dual Bank 模式下运行的步骤。

  • 首先,使用 616f 以上的最新版本
  • Jlink wiki 下载预编译的二进制文件 (ST STM32F7xxxx_2MB_DualBank.elf) 并将其放置到包含 Jlink.exe 和 JLinkDevices.xml
  • 的文件夹中
  • 编辑 JLinkDevices.xml 以包含与 MCU 相关的信息并指示它使用预编译的二进制文件而不是 Jlink 中的默认二进制文件。在开始的数据库标签下添加以下内容: <!-- 该条目将覆盖 J-Link 软件中现有的设备条目,因此自定义闪存算法用于内部闪存 --> <设备><br> <ChipInfo Vendor="ST" Name="STM32F765VI" Core="JLINK_CORE_CORTEX_M7" /> <FlashBankInfo Name="Internes Flash" BaseAddr="0x08000000" MaxSize="0x00200000 " Loader="ST_STM32F7xxxx_2MB_DualBank.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" /> </设备>

  • 如果您安装了多个版本的 Jlink,请确保您使用的是已编辑 JLinkDevices.xml 的版本,以便在调试会话中使用预编译的二进制文件。