diff --git a/doc/openocd.texi b/doc/openocd.texi index 9aa7522f0..a5b0a12a4 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -5243,6 +5243,14 @@ the chip identification register, and autoconfigures itself. flash bank $_FLASHNAME stm32f1x 0 0 0 0 $_TARGETNAME @end example +Note that some devices have been found that have a flash size register that contains +an invalid value, to workaround this issue you can override the probed value used by +the flash driver. + +@example +flash bank $_FLASHNAME stm32f1x 0 0x20000 0 0 $_TARGETNAME +@end example + If you have a target with dual flash banks then define the second bank as per the following example. @example @@ -5283,6 +5291,14 @@ include internal flash and use ARM Cortex-M3/M4 cores. The driver automatically recognizes a number of these chips using the chip identification register, and autoconfigures itself. +Note that some devices have been found that have a flash size register that contains +an invalid value, to workaround this issue you can override the probed value used by +the flash driver. + +@example +flash bank $_FLASHNAME stm32f2x 0 0x20000 0 0 $_TARGETNAME +@end example + Some stm32f2x-specific commands are defined: @deffn Command {stm32f2x lock} num @@ -5296,6 +5312,21 @@ The @var{num} parameter is a value shown by @command{flash banks}. @end deffn @end deffn +@deffn {Flash Driver} stm32lx +All members of the STM32L microcontroller families from ST Microelectronics +include internal flash and use ARM Cortex-M3 cores. +The driver automatically recognizes a number of these chips using +the chip identification register, and autoconfigures itself. + +Note that some devices have been found that have a flash size register that contains +an invalid value, to workaround this issue you can override the probed value used by +the flash driver. + +@example +flash bank $_FLASHNAME stm32lx 0 0x20000 0 0 $_TARGETNAME +@end example +@end deffn + @deffn {Flash Driver} str7x All members of the STR7 microcontroller family from ST Microelectronics include internal flash and use ARM7TDMI cores. diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 17df121b7..13affcda7 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -956,6 +956,13 @@ static int stm32x_probe(struct flash_bank *bank) } } + /* if the user sets the size manually then ignore the probed value + * this allows us to work around devices that have a invalid flash size register value */ + if (bank->size) { + LOG_INFO("ignoring flash probed value, using configured bank size"); + flash_size_in_kb = bank->size / 1024; + } + LOG_INFO("flash size = %dkbytes", flash_size_in_kb); /* did we assign flash size? */ diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c index 7a4352fdd..1d59e3c02 100644 --- a/src/flash/nor/stm32f2x.c +++ b/src/flash/nor/stm32f2x.c @@ -791,6 +791,13 @@ static int stm32x_probe(struct flash_bank *bank) flash_size_in_kb = max_flash_size_in_kb; } + /* if the user sets the size manually then ignore the probed value + * this allows us to work around devices that have a invalid flash size register value */ + if (bank->size) { + LOG_INFO("ignoring flash probed value, using configured bank size"); + flash_size_in_kb = bank->size / 1024; + } + LOG_INFO("flash size = %dkbytes", flash_size_in_kb); /* did we assign flash size? */ diff --git a/src/flash/nor/stm32lx.c b/src/flash/nor/stm32lx.c index ebc7534e8..f871a361c 100644 --- a/src/flash/nor/stm32lx.c +++ b/src/flash/nor/stm32lx.c @@ -552,6 +552,13 @@ static int stm32lx_probe(struct flash_bank *bank) flash_size_in_kb = max_flash_size_in_kb; } + /* if the user sets the size manually then ignore the probed value + * this allows us to work around devices that have a invalid flash size register value */ + if (bank->size) { + LOG_INFO("ignoring flash probed value, using configured bank size"); + flash_size_in_kb = bank->size / 1024; + } + /* STM32L - we have 32 sectors, 16 pages per sector -> 512 pages * 16 pages for a protection area */