Hi @ilg Thanks for your reply. We tried to flash the binaries with the official STM tool. That worked without problems:
 In response to @dail: > (Paul Fertser) I suspect a bug in this version of STLINK firmware (as it's > not like the failing operation is writing to the wrong place or the wrong size, the target has enough RAM). Have you tried upgrading it to the latest? Yes, we did that today. Unfortunately, it didn't help. > (Paul Fertser) Have you tried using stlink-dap.cfg instead? Yes, we tried that today as well. No effect. For now, it looks like the problem is not the binaries themselves. It's something in OpenOCD. Some kind of regression. Thanks for all your help. Kind regards, Kristof Mulier --- ** [tickets:#392] Regression in OpenOCD 0.11.0 and 0.12.0** **Status:** new **Milestone:** 0.11.0 **Created:** Mon Apr 17, 2023 11:47 AM UTC by Kristof Mulier **Last Updated:** Mon Apr 17, 2023 11:47 AM UTC **Owner:** nobody We discovered a regression in `OpenOCD 0.11.0` and `0.12.0`. Some `.elf` files can be flashed with `OpenOCD 0.10.0` while versions `0.11.0` and `0.12.0` are unable to flash the same `.elf` file. Below I'll explain everything you need to know, to reproduce the problem. --- # 1. System and OpenOCD builds I'm working on a Windows 11 laptop. The OpenOCDs I'm using are all downloaded from Liviu Ionescu's xPack project: https://github.com/xpack-dev-tools/openocd-xpack/releases When I refer to `OpenOCD 0.10.0`, `0.11.0` and `0.12.0`, I actualy mean this: - **`OpenOCD 0.10.0`** Downloaded as: `xpack-openocd-0.10.0-15-win32-x64.zip` The `--version` output is: ``` xPack OpenOCD, x86_64 Open On-Chip Debugger 0.10.0+dev (2020-10-13-17:29) ``` - **`OpenOCD 0.11.0`** Downloaded as: `xpack-openocd-0.11.0-5-win32-x64.zip` The `--version` output is: ``` xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-09-01-17:58) ``` - **`OpenOCD 0.12.0`** Downloaded as: `xpack-openocd-0.12.0-1-win32-x64.zip` The `--version` output is: ``` xPack Open On-Chip Debugger 0.12.0-01004-g9ea7f3d64-dirty (2023-01-30-15:04) ``` --- # 2. Demonstration of the problem The target board is a `NUCLEO-F303K8`, which has a `STM32F303K8` chip onboard:  We have prepared two projects for this demonstration: - **`f303-working`**: This project works with all the OpenOCD versions - up to and including `OpenOCD 0.12.0` - **`f303-failing`**: This project works with `OpenOCD 0.10.0`, but not with `OpenOCD 0.11.0` and `0.12.0`. Both projects are <a href="https://embeetle.com">Embeetle projects</a>. However, I'll explain here how to flash the project's binaries without Embeetle involved. - **f303-working** For the **f303-working** project, just download the `.elf` file from this source: https://new.embeetle/downloads/misc/openocd_problem/f303-working.elf Next, you need the `openocd_probe.cfg` and `openocd_chip.cfg` files. They're very simple: > ```sh > # openocd_probe.cfg > source [find interface/stlink.cfg] > transport select hla_swd > ``` > ```sh > # openocd_chip.cfg > source [find target/stm32f3x.cfg] > reset_config srst_only > ``` Put the `f303-working.elf`, `openocd_probe.cfg` and `openocd_chip.cfg` files all in the same folder. Then issue the following command: ```sh $ openocd -f openocd_probe.cfg -f openocd_chip.cfg -c "program {f303-working.elf} verify reset; shutdown;" ``` As you will notice, this `f303-working.elf` firmware can be flashed with both `OpenOCD 0.10.0`, `0.11.0` and `0.12.0`. The output is: > ```sh > xPack Open On-Chip Debugger 0.12.0-01004-g9ea7f3d64-dirty (2023-01-30-15:04) > Licensed under GNU GPL v2 > For bug reports, read > http://openocd.org/doc/doxygen/bugs.html > hla_swd > Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD > srst_only separate srst_nogate srst_open_drain connect_deassert_srst > > Info : clock speed 1000 kHz > Info : STLINK V2J25M14 (API v2) VID:PID 0483:374B > Info : Target voltage: 3.249572 > Info : [stm32f3x.cpu] Cortex-M4 r0p1 processor detected > Info : [stm32f3x.cpu] target has 6 breakpoints, 4 watchpoints > Info : starting gdb server for stm32f3x.cpu on 3333 > Info : Listening on port 3333 for gdb connections > [stm32f3x.cpu] halted due to breakpoint, current mode: Thread > xPSR: 0x61000000 pc: 0x2000003a msp: 0xfffffffc > Info : Unable to match requested speed 1000 kHz, using 950 kHz > Info : Unable to match requested speed 1000 kHz, using 950 kHz > [stm32f3x.cpu] halted due to debug-request, current mode: Thread > xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc > Info : Unable to match requested speed 8000 kHz, using 4000 kHz > Info : Unable to match requested speed 8000 kHz, using 4000 kHz > ** Programming Started ** > Info : device id = 0x10016438 > Info : flash size = 64 KiB > Warn : Adding extra erase range, 0x080014a0 .. 0x080017ff > ** Programming Finished ** > ** Verify Started ** > ** Verified OK ** > ** Resetting Target ** > Info : Unable to match requested speed 1000 kHz, using 950 kHz > Info : Unable to match requested speed 1000 kHz, using 950 kHz > shutdown command invoked > ``` <br> - **f303-failing** For the **f303-failing** project, just replace the `f303-working.elf` file with the `f303-failing.elf` file from this source: https://new.embeetle/downloads/misc/openocd_problem/f303-failing.elf Everthing else remains the same. With `OpenOCD 0.10.0`, the output is also the same (flashing works). But with `OpenOCD 0.11.0` and `0.12.0`, you'll get the following output: > ```sh > xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-09-01-17:58) > Licensed under GNU GPL v2 > For bug reports, read > http://openocd.org/doc/doxygen/bugs.html > hla_swd > Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD > srst_only separate srst_nogate srst_open_drain connect_deassert_srst > > Info : clock speed 1000 kHz > Info : STLINK V2J25M14 (API v2) VID:PID 0483:374B > Info : Target voltage: 3.249572 > Info : [stm32f3x.cpu] Cortex-M4 r0p1 processor detected > Info : [stm32f3x.cpu] target has 6 breakpoints, 4 watchpoints > Info : starting gdb server for stm32f3x.cpu on 3333 > Info : Listening on port 3333 for gdb connections > Info : Unable to match requested speed 1000 kHz, using 950 kHz > Info : Unable to match requested speed 1000 kHz, using 950 kHz > target halted due to debug-request, current mode: Thread > xPSR: 0x01000000 pc: 0x08001384 msp: 0x20003000 > Info : Unable to match requested speed 8000 kHz, using 4000 kHz > Info : Unable to match requested speed 8000 kHz, using 4000 kHz > ** Programming Started ** > Info : device id = 0x10016438 > Info : flash size = 64 KiB > Warn : Adding extra erase range, 0x08003198 .. 0x080037ff > Error: error writing to flash at address 0x08000000 at offset 0x00000000 > embedded:startup.tcl:1435: Error: ** Programming Failed ** > in procedure 'program' > in procedure 'program_error' called at file "embedded:startup.tcl", line 1500 > at file "embedded:startup.tcl", line 1435 > ``` --- # 3. Resources You can download the entire Embeetle projects here: - https://new.embeetle/downloads/misc/openocd_problem/f303-working.7z - https://new.embeetle/downloads/misc/openocd_problem/f303-failing.7z Aside from the `.elf` file, you can also find the `.bin`, `.hex` and `.map` files here: - https://new.embeetle/downloads/misc/openocd_problem/f303-working.elf - https://new.embeetle/downloads/misc/openocd_problem/f303-working.bin - https://new.embeetle/downloads/misc/openocd_problem/f303-working.hex - https://new.embeetle/downloads/misc/openocd_problem/f303-working.map - https://new.embeetle/downloads/misc/openocd_problem/f303-failing.elf - https://new.embeetle/downloads/misc/openocd_problem/f303-failing.bin - https://new.embeetle/downloads/misc/openocd_problem/f303-failing.hex - https://new.embeetle/downloads/misc/openocd_problem/f303-failing.map I've run `OpenOCD 0.12.0` on both projects with the `-d` flag to obtain debug output: - https://new.embeetle/downloads/misc/openocd_problem/f303-working-openocd-debug-output.txt - https://new.embeetle/downloads/misc/openocd_problem/f303-failing-openocd-debug-output.txt --- Sent from sourceforge.net because openocd-devel@lists.sourceforge.net is subscribed to https://sourceforge.net/p/openocd/tickets/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/openocd/admin/tickets/options. Or, if this is a mailing list, you can unsubscribe from the mailing list.