Flash, FRAM and EEPROM driver for STM32 QUAD-/OCTOSPI interface 21/4321/15
authorAndreas Bolsch <hyphen0break@gmail.com>
Wed, 21 Dec 2016 09:35:58 +0000 (10:35 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Sun, 8 Nov 2020 22:46:00 +0000 (22:46 +0000)
commite44539d66c8929679321704768125df9ba7d5f67
tree245a9cc6b5fd9b734ae47bcacf568f8fb33e61c2
parent475f42051e13d64bc4d1960306ad1d2ea3c7962a
Flash, FRAM and EEPROM driver for STM32 QUAD-/OCTOSPI interface

- write speed up to 150 kByte/s on STM32F469I-disco (due to
  SWD clock and USB connection), up to 1 MByte/s on Nucleo-F767ZI
  with external STLink-V3 or Nucleo-G474RE with two W25Q256FV in
  dual 4-line mode or STM32H73BI-Disco in octal mode
- tested with STM32L476G-disco (64MBit flash, 3-byte addr),
  STM32F412G-Disco, STM32F469I-Disco, STM32F746G-Disco, and
  STM32L476G-Disco (all 128Mbit flash, 3-byte addr),
  STM32F723E-Disco, STM32F769I-Disco (512Mbit flash, 4-byte addr)
  STM32L4R9I-Disco, STM32L4P5G-Disco (512MBit octo-flash, DTR, 4-byte addr)
  STM32H745I-Disco, STM32H747I-Disco (two 512MBit flash, 4-byte addr)
  STM32H73BI-Disco, STM32H735G-Disco (512MBit octo-flash, DTR, 4-byte addr)
- suitable cfg for Discovery boards included
- limited parsing of SFDP data if flash device not hardcoded
  (tested only in single/quad mode as most devices either don't
  support SFDP at all or have empty(!) SFDP memory)
- 'set' command for auto detection override (e. g. for EEPROMs)
- 'cmd' command for arbitrary SPI commands (reconfiguration, testing etc.)
- makefile for creation of binary loader files
- tcl/board/stm32f469discovery.cfg superseded by stm32f469i-disco.cfg
- tcl/board/stm32f7discovery.cfg removed as name is ambiguous
  (superseded by stm32f746g-disco.cfg vs. stm32f769i-disco.cfg)
- dual 4-line mode tested on Nucleo-F767ZI, Nucleo-H743ZI and Nucleo-H7A3ZI-Q
  with two W25Q256FV, and on Nucleo-L496ZP-P and Nucleo-L4R5ZI
  with two W25Q128FV, sample cfg files included and on STM32H745I-Disco,
  STM32H747I-Disco, STM32H750B-Disco
- read/verify/erase_check uses indirect read mode to work around silicon bug in
  H7, L4+ and MP1 memory mapped mode (last bytes not readable, accessing last
  bytes causes debug interface to hang)
- octospi supported only in single/dual 1-line, 2-line, 4-line
  and single 8-line modes, (not in hyper flash mode)

Requirements:
GPIOs must be initialized appropriately, and SPI flash chip be configured
appropriately (1-line ..., QPI, 4-byte addresses ...). This is board/chip
specific, cf. included cfg files. The driver infers most parameters from
current setting in CR, CCR, ... registers.

Change-Id: I54858fbbe8758c3a5fe58812e93f5f39514704f8
Signed-off-by: Andreas Bolsch <hyphen0break@gmail.com>
Reviewed-on: http://openocd.zylin.com/4321
Tested-by: jenkins
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Christopher Head <chead@zaber.com>
57 files changed:
contrib/loaders/flash/stmqspi/Makefile [new file with mode: 0644]
contrib/loaders/flash/stmqspi/gpio_conf_stm32.pl [new file with mode: 0755]
contrib/loaders/flash/stmqspi/stmoctospi_crc32.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_crc32.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_erase_check.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_erase_check.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_read.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_read.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_write.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmoctospi_write.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_crc32.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_crc32.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_erase_check.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_erase_check.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_read.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_read.inc [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_write.S [new file with mode: 0644]
contrib/loaders/flash/stmqspi/stmqspi_write.inc [new file with mode: 0644]
doc/openocd.texi
src/flash/nor/Makefile.am
src/flash/nor/core.c
src/flash/nor/core.h
src/flash/nor/driver.h
src/flash/nor/drivers.c
src/flash/nor/imp.h
src/flash/nor/sfdp.c [new file with mode: 0644]
src/flash/nor/sfdp.h [new file with mode: 0644]
src/flash/nor/spi.h
src/flash/nor/stmqspi.c [new file with mode: 0644]
src/flash/nor/stmqspi.h [new file with mode: 0644]
src/flash/nor/stmsmi.c
src/flash/nor/tcl.c
src/target/image.c
src/target/image.h
src/target/target.c
src/target/target.h
tcl/board/b-l475e-iot01a.cfg [new file with mode: 0644]
tcl/board/stm32f412g-disco.cfg [new file with mode: 0644]
tcl/board/stm32f413h-disco.cfg [new file with mode: 0644]
tcl/board/stm32f469i-disco.cfg [new file with mode: 0644]
tcl/board/stm32f723e-disco.cfg [new file with mode: 0644]
tcl/board/stm32f746g-disco.cfg [new file with mode: 0644]
tcl/board/stm32f769i-disco.cfg [new file with mode: 0644]
tcl/board/stm32h735g-disco.cfg [new file with mode: 0644]
tcl/board/stm32h745i-disco.cfg [new file with mode: 0644]
tcl/board/stm32h747i-disco.cfg [new file with mode: 0644]
tcl/board/stm32h750b-disco.cfg [new file with mode: 0644]
tcl/board/stm32h7b3i-disco.cfg [new file with mode: 0644]
tcl/board/stm32h7x_dual_qspi.cfg [new file with mode: 0644]
tcl/board/stm32l476g-disco.cfg [new file with mode: 0644]
tcl/board/stm32l496g-disco.cfg [new file with mode: 0644]
tcl/board/stm32l4p5g-disco.cfg [new file with mode: 0644]
tcl/board/stm32l4r9i-disco.cfg [new file with mode: 0644]
tcl/target/stm32f4x.cfg
tcl/target/stm32f7x.cfg
tcl/target/stm32h7x.cfg
tcl/target/stm32l4x.cfg

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)