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



我正在使用意法半导体Nucleo板上的J-Link EDU和STLink调试器。为了进行测试,引导加载程序代码存在于0x8000000,并且只是跳转到存在主应用程序代码的0x8020000。当我使用 Jlink EDU 时,它无法每次都成功0x8020000对闪存进行编程,如果我修改程序并开始调试,Jlink 会擦除闪存但没有成功编程,并且在引导加载程序进行跳转后,MCU 会出现硬故障。现在,无论我使用 Jlink 还是 STLINK(转换为 Jlink),都会发生这种情况。通常我看到它卡在0xFFFFFFFE。此时,JLINK已经删除了应用程序代码,但无法对其进行编程。

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

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

我还尝试使用 JLINK commander 编程,但似乎也失败了。除非我完全擦除芯片。

我正在使用带有GNU ARM Eclipse插件的系统工作台2.0进行Jlink调试,使用截至此日期的最新ARM工具链和Jlink 616c进行Jlink调试。我正在使用双组配置的带闪存的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:UsersUserworkspace_10DC_Booster_F756DebugDC_Booster_F756.bin,0x08020000
Downloading file [C:UsersUserworkspace_10DC_Booster_F756DebugDC_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:UsersUserworkspace_10DC_Booster_F756DebugDC_Booster_F756.bin,0x08020000
Loading binary file C:UsersUserworkspace_10DC_Booster_F756DebugDC_Booster_F756.bin
Reading 546556 bytes data from target memory @ 0x08020000.
Verify failed @ address 0x08065522.
Expected FE read 00J-Link>

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

  • 首先,使用616f以后的最新版本
  • 从Jlink wiki下载预编译的二进制文件(ST STM32F7xxxx_2MB_DualBank.elf)并将其放入包含Jlink.exe和JLinkDevices的文件夹中.xml
  • 编辑 JLinkDevices.xml 以包含与 MCU 相关的信息,并指示它使用预编译的二进制文件,而不是 Jlink 中的默认二进制文件。在开头的数据库标记下添加以下内容:<!-- This entry will overwrite the existing device entry in the J-Link software, so that a custom flash algorithm is used for the internal flash --> <Device>
    <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" /> </Device>

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

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

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

两者都完美无缺。

相关内容

  • 没有找到相关文章

最新更新