Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

STM32H7x option_write reads incorrect address in flash

Open
#45 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
c

Research direction

Start in src/flash/nor/stm32h7x.c and compare stm32h7_read_flash_reg_by_index, used by option_write, with stm32x_read_flash_reg, used by option_read. Reproduce with the STM32H757BIT6 configuration, then run the documented stm32h7x option_read and option_write commands across the referenced commits. Done means option_write reads the correct flash address and updates the option byte as expected.

Written by the indexing model from the issue text.

Description

A recently added support for STM32H7R/H7Sx MCUs (https://github.com/STMicroelectronics/OpenOCD/commit/aa109db19ffd22eb05e18b010140fb562934533b) broke stm32h7x option_write command on STM32H757BIT6. I tested stm32h7x option_write command with 3 different commits:

Hardware

  • STM32H757BIT6 - dual core
  • STLINK-V3MINIE

Software

OpenOCD is running in a Docker container:

RUN git clone https://github.com/STMicroelectronics/OpenOCD.git && \
    cd OpenOCD && \
    git checkout insert_git_commit_here && \
    ./bootstrap && \
    ./configure --enable-stlink && \
    make -j$(nproc) && \
    make install && \
    cd .. && \
    rm -rf OpenOCD

I am running OpenOCD with the following command
openocd -f openocd_stm32h757.cfg

I am connecting to the OpenOCD with telnet
telnet 127.0.0.1 4444

Configuration file:
# openocd_stm32h757.cfg
source [find interface/stlink-dap.cfg]
transport select dapdirect_swd
source [find target/stm32h7x_dual_bank.cfg]
reset_config srst_only 

Test results

I tried disabling booting of CM4 by changing option byte FLASH_OPTSR_PRG and also tried stm32h7x option_write example in the OpenOCD documentation section 12.5.2. The output of the commands tested with different commits are shown in a table below. Only commit b62cbc2 produced expected results and wrote the option byte.

Command Most recent https://github.com/STMicroelectronics/OpenOCD/commit/0a084c29345576911fb8d10fcbd158d0361b6186 STM32H7R/H7Sx support https://github.com/STMicroelectronics/OpenOCD/commit/aa109db19ffd22eb05e18b010140fb562934533b Prior to adding support https://github.com/STMicroelectronics/OpenOCD/commit/b62cbc2e853189e730fd94e6d9c0a1d3ceb2661f
reset - - -
stm32h7x option_read 0 0x1c Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1bc6aaf0
stm32h7x option_write 0 0x20 0x00000000 0x00400000 Failed to read memory at 0x51e3be78
error while reading from address 0x51e3be78
Failed to read memory at 0xe000edf4
error while reading from address 0x856d9473
-
stm32h7x option_read 0 0x1c Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1b86aaf0
stm32h7x option_write 0 0x20 0x8000000 0x8000000 Failed to read memory at 0x51e3be78
error while reading from address 0x51e3be78
Failed to read memory at 0xe000edf4
error while reading from address 0x856d9473
-
stm32h7x option_read 0 0x1c Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1bc6aaf0 Option Register: <0x5200201c> = 0x1b86aaf0

Observations

Different functions are used in src/flash/nor/stm32h7x.c for reading values for commands option_read and option_write.

commit OpenOCD command function in stm32h7x.c
aa109db stm32h7x option_read stm32x_read_flash_reg
aa109db stm32h7x option_write stm32h7_read_flash_reg_by_index
b310b3b stm32h7x option_read stm32x_read_flash_reg
b310b3b stm32h7x option_write stm32x_read_flash_reg

Conclusion

It seems function stm32h7_read_flash_reg_by_index in src/flash/nor/stm32h7x.c used in option_write command reads incorrect address from flash.

Thanks in advance!

Dominant language
C
Stars
202
Forks
57
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from STMicroelectronics/OpenOCD

All issues in STMicroelectronics/OpenOCD

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.