1 /***************************************************************************
2 * Copyright (C) 2005 by Dominic Rath *
3 * Dominic.Rath@gmx.de *
5 * Copyright (C) 2008 by Spencer Oliver *
6 * spen@spen-soft.co.uk *
8 * Copyright (C) 2011 Øyvind Harboe *
9 * oyvind.harboe@zylin.com *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License for more details. *
21 * You should have received a copy of the GNU General Public License *
22 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
23 ***************************************************************************/
30 #include <helper/binarybuffer.h>
31 #include <target/algorithm.h>
32 #include <target/armv7m.h>
34 /* Regarding performance:
36 * Short story - it might be best to leave the performance at
39 * You may see a jump in speed if you change to using
40 * 32bit words for the block programming.
42 * Its a shame you cannot use the double word as its
43 * even faster - but you require external VPP for that mode.
45 * Having said all that 16bit writes give us the widest vdd
46 * operating range, so may be worth adding a note to that effect.
50 /* Danger!!!! The STM32F1x and STM32F2x series actually have
51 * quite different flash controllers.
53 * What's more scary is that the names of the registers and their
54 * addresses are the same, but the actual bits and what they do are
55 * can be very different.
57 * To reduce testing complexity and dangers of regressions,
58 * a separate file is used for stm32fx2x.
60 * Sector sizes in kiBytes:
61 * 1 MiByte part with 4 x 16, 1 x 64, 7 x 128.
62 * 1.5 MiByte part with 4 x 16, 1 x 64, 11 x 128.
63 * 2 MiByte part with 4 x 16, 1 x 64, 7 x 128, 4 x 16, 1 x 64, 7 x 128.
64 * 1 MiByte STM32F42x/43x part with DB1M Option set:
65 * 4 x 16, 1 x 64, 3 x 128, 4 x 16, 1 x 64, 3 x 128.
68 * 512 kiByte part with 4 x 16, 1 x 64, 3 x 128.
71 * 1 MiByte part with 4 x 32, 1 x 128, 3 x 256.
74 * 1 MiByte part in single bank mode with 4 x 32, 1 x 128, 3 x 256.
75 * 1 MiByte part in dual-bank mode two banks with 4 x 16, 1 x 64, 3 x 128 each.
76 * 2 MiByte part in single-bank mode with 4 x 32, 1 x 128, 7 x 256.
77 * 2 MiByte part in dual-bank mode two banks with 4 x 16, 1 x 64, 7 x 128 each.
79 * Protection size is sector size.
81 * Tested with STM3220F-EVAL board.
83 * STM32F4xx series for reference.
86 * http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf
89 * www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/
90 * PROGRAMMING_MANUAL/CD00233952.pdf
92 * STM32F7xx series for reference.
95 * http://www.st.com/web/en/resource/technical/document/reference_manual/DM00124865.pdf
98 * http://www.st.com/resource/en/reference_manual/dm00224583.pdf
101 * http://www.st.com/resource/en/reference_manual/dm00305666.pdf
104 * http://www.st.com/resource/en/reference_manual/dm00305990.pdf
106 * STM32F1x series - notice that this code was copy, pasted and knocked
107 * into a stm32f2x driver, so in case something has been converted or
108 * bugs haven't been fixed, here are the original manuals:
110 * RM0008 - Reference manual
112 * RM0042, the Flash programming manual for low-, medium- high-density and
113 * connectivity line STM32F10x devices
115 * PM0068, the Flash programming manual for XL-density STM32F10x devices.
119 /* Erase time can be as high as 1000ms, 10x this and it's toast... */
120 #define FLASH_ERASE_TIMEOUT 10000
121 #define FLASH_WRITE_TIMEOUT 5
123 /* Mass erase time can be as high as 32 s in x8 mode. */
124 #define FLASH_MASS_ERASE_TIMEOUT 33000
126 #define FLASH_BANK_BASE 0x80000000
128 #define STM32F2_OTP_SIZE 512
129 #define STM32F2_OTP_SECTOR_SIZE 32
130 #define STM32F2_OTP_BANK_BASE 0x1fff7800
131 #define STM32F2_OTP_LOCK_BASE ((STM32F2_OTP_BANK_BASE) + (STM32F2_OTP_SIZE))
133 /* see RM0410 section 3.6 "One-time programmable bytes" */
134 #define STM32F7_OTP_SECTOR_SIZE 64
135 #define STM32F7_OTP_SIZE 1024
136 #define STM32F7_OTP_BANK_BASE 0x1ff0f000
137 #define STM32F7_OTP_LOCK_BASE ((STM32F7_OTP_BANK_BASE) + (STM32F7_OTP_SIZE))
139 #define STM32_FLASH_BASE 0x40023c00
140 #define STM32_FLASH_ACR 0x40023c00
141 #define STM32_FLASH_KEYR 0x40023c04
142 #define STM32_FLASH_OPTKEYR 0x40023c08
143 #define STM32_FLASH_SR 0x40023c0C
144 #define STM32_FLASH_CR 0x40023c10
145 #define STM32_FLASH_OPTCR 0x40023c14
146 #define STM32_FLASH_OPTCR1 0x40023c18
147 #define STM32_FLASH_OPTCR2 0x40023c1c
149 /* FLASH_CR register bits */
150 #define FLASH_PG (1 << 0)
151 #define FLASH_SER (1 << 1)
152 #define FLASH_MER (1 << 2) /* MER/MER1 for f76x/77x */
153 #define FLASH_MER1 (1 << 15) /* MER2 for f76x/77x, confusing ... */
154 #define FLASH_STRT (1 << 16)
155 #define FLASH_PSIZE_8 (0 << 8)
156 #define FLASH_PSIZE_16 (1 << 8)
157 #define FLASH_PSIZE_32 (2 << 8)
158 #define FLASH_PSIZE_64 (3 << 8)
159 /* The sector number encoding is not straight binary for dual bank flash. */
160 #define FLASH_SNB(a) ((a) << 3)
161 #define FLASH_LOCK (1 << 31)
163 /* FLASH_SR register bits */
164 #define FLASH_BSY (1 << 16)
165 #define FLASH_PGSERR (1 << 7) /* Programming sequence error */
166 #define FLASH_PGPERR (1 << 6) /* Programming parallelism error */
167 #define FLASH_PGAERR (1 << 5) /* Programming alignment error */
168 #define FLASH_WRPERR (1 << 4) /* Write protection error */
169 #define FLASH_OPERR (1 << 1) /* Operation error */
171 #define FLASH_ERROR (FLASH_PGSERR | FLASH_PGPERR | FLASH_PGAERR | FLASH_WRPERR | FLASH_OPERR)
173 /* STM32_FLASH_OPTCR register bits */
174 #define OPTCR_LOCK (1 << 0)
175 #define OPTCR_START (1 << 1)
176 #define OPTCR_NDBANK (1 << 29) /* not dual bank mode */
177 #define OPTCR_DB1M (1 << 30) /* 1 MiB devices dual flash bank option */
178 #define OPTCR_SPRMOD (1 << 31) /* switches PCROPi/nWPRi interpretation */
180 /* STM32_FLASH_OPTCR2 register bits */
181 #define OPTCR2_PCROP_RDP (1 << 31) /* erase PCROP zone when decreasing RDP */
183 /* register unlock keys */
184 #define KEY1 0x45670123
185 #define KEY2 0xCDEF89AB
187 /* option register unlock key */
188 #define OPTKEY1 0x08192A3B
189 #define OPTKEY2 0x4C5D6E7F
191 struct stm32x_options
{
193 uint16_t user_options
; /* bit 0-7 usual options, bit 8-11 extra options */
196 uint32_t optcr2_pcrop
;
199 struct stm32x_flash_bank
{
200 struct stm32x_options option_bytes
;
203 bool has_large_mem
; /* F42x/43x/469/479/7xx in dual bank mode */
204 bool has_extra_options
; /* F42x/43x/469/479/7xx */
205 bool has_boot_addr
; /* F7xx */
206 bool has_optcr2_pcrop
; /* F72x/73x */
207 unsigned int protection_bits
; /* F413/423 */
208 uint32_t user_bank_size
;
211 static bool stm32x_is_otp(struct flash_bank
*bank
)
213 return bank
->base
== STM32F2_OTP_BANK_BASE
||
214 bank
->base
== STM32F7_OTP_BANK_BASE
;
217 static bool stm32x_otp_is_f7(struct flash_bank
*bank
)
219 return bank
->base
== STM32F7_OTP_BANK_BASE
;
222 static int stm32x_is_otp_unlocked(struct flash_bank
*bank
)
224 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
226 return stm32x_info
->otp_unlocked
;
229 static int stm32x_otp_disable(struct flash_bank
*bank
)
231 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
233 LOG_INFO("OTP memory bank #%u is disabled for write commands.",
235 stm32x_info
->otp_unlocked
= false;
239 static int stm32x_otp_enable(struct flash_bank
*bank
)
241 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
243 if (!stm32x_info
->otp_unlocked
) {
244 LOG_INFO("OTP memory bank #%u is is enabled for write commands.",
246 stm32x_info
->otp_unlocked
= true;
248 LOG_WARNING("OTP memory bank #%u is is already enabled for write commands.",
254 /* flash bank stm32x <base> <size> 0 0 <target#>
256 FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command
)
258 struct stm32x_flash_bank
*stm32x_info
;
261 return ERROR_COMMAND_SYNTAX_ERROR
;
263 stm32x_info
= malloc(sizeof(struct stm32x_flash_bank
));
264 bank
->driver_priv
= stm32x_info
;
266 stm32x_info
->probed
= false;
267 stm32x_info
->otp_unlocked
= false;
268 stm32x_info
->user_bank_size
= bank
->size
;
273 static inline int stm32x_get_flash_reg(struct flash_bank
*bank
, uint32_t reg
)
278 static inline int stm32x_get_flash_status(struct flash_bank
*bank
, uint32_t *status
)
280 struct target
*target
= bank
->target
;
281 return target_read_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_SR
), status
);
284 static int stm32x_wait_status_busy(struct flash_bank
*bank
, int timeout
)
286 struct target
*target
= bank
->target
;
288 int retval
= ERROR_OK
;
290 /* wait for busy to clear */
292 retval
= stm32x_get_flash_status(bank
, &status
);
293 if (retval
!= ERROR_OK
)
295 LOG_DEBUG("status: 0x%" PRIx32
, status
);
296 if ((status
& FLASH_BSY
) == 0)
298 if (timeout
-- <= 0) {
299 LOG_ERROR("timed out waiting for flash");
306 if (status
& FLASH_WRPERR
) {
307 LOG_ERROR("stm32x device protected");
311 /* Clear but report errors */
312 if (status
& FLASH_ERROR
) {
313 if (retval
== ERROR_OK
)
315 /* If this operation fails, we ignore it and report the original
318 target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_SR
),
319 status
& FLASH_ERROR
);
324 static int stm32x_unlock_reg(struct target
*target
)
328 /* first check if not already unlocked
329 * otherwise writing on STM32_FLASH_KEYR will fail
331 int retval
= target_read_u32(target
, STM32_FLASH_CR
, &ctrl
);
332 if (retval
!= ERROR_OK
)
335 if ((ctrl
& FLASH_LOCK
) == 0)
338 /* unlock flash registers */
339 retval
= target_write_u32(target
, STM32_FLASH_KEYR
, KEY1
);
340 if (retval
!= ERROR_OK
)
343 retval
= target_write_u32(target
, STM32_FLASH_KEYR
, KEY2
);
344 if (retval
!= ERROR_OK
)
347 retval
= target_read_u32(target
, STM32_FLASH_CR
, &ctrl
);
348 if (retval
!= ERROR_OK
)
351 if (ctrl
& FLASH_LOCK
) {
352 LOG_ERROR("flash not unlocked STM32_FLASH_CR: 0x%" PRIx32
, ctrl
);
353 return ERROR_TARGET_FAILURE
;
359 static int stm32x_unlock_option_reg(struct target
*target
)
363 int retval
= target_read_u32(target
, STM32_FLASH_OPTCR
, &ctrl
);
364 if (retval
!= ERROR_OK
)
367 if ((ctrl
& OPTCR_LOCK
) == 0)
370 /* unlock option registers */
371 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR
, OPTKEY1
);
372 if (retval
!= ERROR_OK
)
375 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR
, OPTKEY2
);
376 if (retval
!= ERROR_OK
)
379 retval
= target_read_u32(target
, STM32_FLASH_OPTCR
, &ctrl
);
380 if (retval
!= ERROR_OK
)
383 if (ctrl
& OPTCR_LOCK
) {
384 LOG_ERROR("options not unlocked STM32_FLASH_OPTCR: 0x%" PRIx32
, ctrl
);
385 return ERROR_TARGET_FAILURE
;
391 static int stm32x_read_options(struct flash_bank
*bank
)
394 struct stm32x_flash_bank
*stm32x_info
= NULL
;
395 struct target
*target
= bank
->target
;
397 stm32x_info
= bank
->driver_priv
;
399 /* read current option bytes */
400 int retval
= target_read_u32(target
, STM32_FLASH_OPTCR
, &optiondata
);
401 if (retval
!= ERROR_OK
)
404 /* caution: F2 implements 5 bits (WDG_SW only)
405 * whereas F7 6 bits (IWDG_SW and WWDG_SW) in user_options */
406 stm32x_info
->option_bytes
.user_options
= optiondata
& 0xfc;
407 stm32x_info
->option_bytes
.RDP
= (optiondata
>> 8) & 0xff;
408 stm32x_info
->option_bytes
.protection
=
409 (optiondata
>> 16) & (~(0xffff << stm32x_info
->protection_bits
) & 0xffff);
411 if (stm32x_info
->has_extra_options
) {
412 /* F42x/43x/469/479 and 7xx have up to 4 bits of extra options */
413 stm32x_info
->option_bytes
.user_options
|= (optiondata
>> 20) &
414 ((0xf00 << (stm32x_info
->protection_bits
- 12)) & 0xf00);
417 if (stm32x_info
->has_large_mem
|| stm32x_info
->has_boot_addr
) {
418 retval
= target_read_u32(target
, STM32_FLASH_OPTCR1
, &optiondata
);
419 if (retval
!= ERROR_OK
)
422 /* FLASH_OPTCR1 has quite different meanings ... */
423 if (stm32x_info
->has_boot_addr
) {
424 /* for F7xx it contains boot0 and boot1 */
425 stm32x_info
->option_bytes
.boot_addr
= optiondata
;
427 /* for F42x/43x/469/479 it contains 12 additional protection bits */
428 stm32x_info
->option_bytes
.protection
|= (optiondata
>> 4) & 0x00fff000;
432 if (stm32x_info
->has_optcr2_pcrop
) {
433 retval
= target_read_u32(target
, STM32_FLASH_OPTCR2
, &optiondata
);
434 if (retval
!= ERROR_OK
)
437 stm32x_info
->option_bytes
.optcr2_pcrop
= optiondata
;
438 if (stm32x_info
->has_optcr2_pcrop
&&
439 (stm32x_info
->option_bytes
.optcr2_pcrop
& ~OPTCR2_PCROP_RDP
)) {
440 LOG_INFO("PCROP Engaged");
443 stm32x_info
->option_bytes
.optcr2_pcrop
= 0x0;
446 if (stm32x_info
->option_bytes
.RDP
!= 0xAA)
447 LOG_INFO("Device Security Bit Set");
452 static int stm32x_write_options(struct flash_bank
*bank
)
454 struct stm32x_flash_bank
*stm32x_info
= NULL
;
455 struct target
*target
= bank
->target
;
456 uint32_t optiondata
, optiondata2
;
458 stm32x_info
= bank
->driver_priv
;
460 int retval
= stm32x_unlock_option_reg(target
);
461 if (retval
!= ERROR_OK
)
464 /* rebuild option data */
465 optiondata
= stm32x_info
->option_bytes
.user_options
& 0xfc;
466 optiondata
|= stm32x_info
->option_bytes
.RDP
<< 8;
467 optiondata
|= (stm32x_info
->option_bytes
.protection
&
468 (~(0xffff << stm32x_info
->protection_bits
))) << 16;
470 if (stm32x_info
->has_extra_options
) {
471 /* F42x/43x/469/479 and 7xx have up to 4 bits of extra options */
472 optiondata
|= (stm32x_info
->option_bytes
.user_options
&
473 ((0xf00 << (stm32x_info
->protection_bits
- 12)) & 0xf00)) << 20;
476 if (stm32x_info
->has_large_mem
|| stm32x_info
->has_boot_addr
) {
477 if (stm32x_info
->has_boot_addr
) {
478 /* F7xx uses FLASH_OPTCR1 for boot0 and boot1 ... */
479 optiondata2
= stm32x_info
->option_bytes
.boot_addr
;
481 /* F42x/43x/469/479 uses FLASH_OPTCR1 for additional protection bits */
482 optiondata2
= (stm32x_info
->option_bytes
.protection
& 0x00fff000) << 4;
485 retval
= target_write_u32(target
, STM32_FLASH_OPTCR1
, optiondata2
);
486 if (retval
!= ERROR_OK
)
490 /* program extra pcrop register */
491 if (stm32x_info
->has_optcr2_pcrop
) {
492 retval
= target_write_u32(target
, STM32_FLASH_OPTCR2
,
493 stm32x_info
->option_bytes
.optcr2_pcrop
);
494 if (retval
!= ERROR_OK
)
498 /* program options */
499 retval
= target_write_u32(target
, STM32_FLASH_OPTCR
, optiondata
);
500 if (retval
!= ERROR_OK
)
503 /* start programming cycle */
504 retval
= target_write_u32(target
, STM32_FLASH_OPTCR
, optiondata
| OPTCR_START
);
505 if (retval
!= ERROR_OK
)
508 /* wait for completion, this might trigger a security erase and take a while */
509 retval
= stm32x_wait_status_busy(bank
, FLASH_MASS_ERASE_TIMEOUT
);
510 if (retval
!= ERROR_OK
)
513 /* relock registers */
514 retval
= target_write_u32(target
, STM32_FLASH_OPTCR
, optiondata
| OPTCR_LOCK
);
515 if (retval
!= ERROR_OK
)
521 static int stm32x_otp_read_protect(struct flash_bank
*bank
)
523 struct target
*target
= bank
->target
;
528 lock_base
= stm32x_otp_is_f7(bank
) ? STM32F7_OTP_LOCK_BASE
529 : STM32F2_OTP_LOCK_BASE
;
531 for (unsigned int i
= 0; i
< bank
->num_sectors
; i
++) {
532 retval
= target_read_u8(target
, lock_base
+ i
, &lock
);
533 if (retval
!= ERROR_OK
)
535 bank
->sectors
[i
].is_protected
= !lock
;
541 static int stm32x_otp_protect(struct flash_bank
*bank
, unsigned int first
,
544 struct target
*target
= bank
->target
;
549 assert((first
<= last
) && (last
< bank
->num_sectors
));
551 lock_base
= stm32x_otp_is_f7(bank
) ? STM32F7_OTP_LOCK_BASE
552 : STM32F2_OTP_LOCK_BASE
;
554 for (i
= first
; first
<= last
; i
++) {
555 retval
= target_read_u8(target
, lock_base
+ i
, &lock
);
556 if (retval
!= ERROR_OK
)
562 retval
= target_write_u8(target
, lock_base
+ i
, lock
);
563 if (retval
!= ERROR_OK
)
570 static int stm32x_protect_check(struct flash_bank
*bank
)
572 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
573 struct flash_sector
*prot_blocks
;
574 unsigned int num_prot_blocks
;
577 /* if it's the OTP bank, look at the lock bits there */
578 if (stm32x_is_otp(bank
))
579 return stm32x_otp_read_protect(bank
);
581 /* read write protection settings */
582 retval
= stm32x_read_options(bank
);
583 if (retval
!= ERROR_OK
) {
584 LOG_DEBUG("unable to read option bytes");
588 if (bank
->prot_blocks
) {
589 num_prot_blocks
= bank
->num_prot_blocks
;
590 prot_blocks
= bank
->prot_blocks
;
592 num_prot_blocks
= bank
->num_sectors
;
593 prot_blocks
= bank
->sectors
;
596 for (unsigned int i
= 0; i
< num_prot_blocks
; i
++)
597 prot_blocks
[i
].is_protected
=
598 ~(stm32x_info
->option_bytes
.protection
>> i
) & 1;
603 static int stm32x_erase(struct flash_bank
*bank
, unsigned int first
,
606 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
607 struct target
*target
= bank
->target
;
609 if (stm32x_is_otp(bank
)) {
610 LOG_ERROR("Cannot erase OTP memory");
614 assert((first
<= last
) && (last
< bank
->num_sectors
));
616 if (bank
->target
->state
!= TARGET_HALTED
) {
617 LOG_ERROR("Target not halted");
618 return ERROR_TARGET_NOT_HALTED
;
622 retval
= stm32x_unlock_reg(target
);
623 if (retval
!= ERROR_OK
)
628 To erase a sector, follow the procedure below:
629 1. Check that no Flash memory operation is ongoing by checking the BSY bit in the
631 2. Set the SER bit and select the sector
632 you wish to erase (SNB) in the FLASH_CR register
633 3. Set the STRT bit in the FLASH_CR register
634 4. Wait for the BSY bit to be cleared
637 for (unsigned int i
= first
; i
<= last
; i
++) {
639 if (stm32x_info
->has_large_mem
&& i
>= 12)
640 snb
= (i
- 12) | 0x10;
644 retval
= target_write_u32(target
,
645 stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_SER
| FLASH_SNB(snb
) | FLASH_STRT
);
646 if (retval
!= ERROR_OK
)
649 retval
= stm32x_wait_status_busy(bank
, FLASH_ERASE_TIMEOUT
);
650 if (retval
!= ERROR_OK
)
653 bank
->sectors
[i
].is_erased
= 1;
656 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_LOCK
);
657 if (retval
!= ERROR_OK
)
663 static int stm32x_protect(struct flash_bank
*bank
, int set
, unsigned int first
,
666 struct target
*target
= bank
->target
;
667 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
669 if (target
->state
!= TARGET_HALTED
) {
670 LOG_ERROR("Target not halted");
671 return ERROR_TARGET_NOT_HALTED
;
674 if (stm32x_is_otp(bank
)) {
676 return ERROR_COMMAND_ARGUMENT_INVALID
;
678 return stm32x_otp_protect(bank
, first
, last
);
681 /* read protection settings */
682 int retval
= stm32x_read_options(bank
);
683 if (retval
!= ERROR_OK
) {
684 LOG_DEBUG("unable to read option bytes");
688 for (unsigned int i
= first
; i
<= last
; i
++) {
690 stm32x_info
->option_bytes
.protection
&= ~(1 << i
);
692 stm32x_info
->option_bytes
.protection
|= (1 << i
);
695 retval
= stm32x_write_options(bank
);
696 if (retval
!= ERROR_OK
)
702 static int stm32x_write_block(struct flash_bank
*bank
, const uint8_t *buffer
,
703 uint32_t offset
, uint32_t count
)
705 struct target
*target
= bank
->target
;
706 uint32_t buffer_size
= 16384;
707 struct working_area
*write_algorithm
;
708 struct working_area
*source
;
709 uint32_t address
= bank
->base
+ offset
;
710 struct reg_param reg_params
[5];
711 struct armv7m_algorithm armv7m_info
;
712 int retval
= ERROR_OK
;
714 static const uint8_t stm32x_flash_write_code
[] = {
715 #include "../../../contrib/loaders/flash/stm32/stm32f2x.inc"
718 if (stm32x_is_otp(bank
) && !stm32x_is_otp_unlocked(bank
)) {
719 LOG_ERROR("OTP memory bank is disabled for write commands.");
723 if (target_alloc_working_area(target
, sizeof(stm32x_flash_write_code
),
724 &write_algorithm
) != ERROR_OK
) {
725 LOG_WARNING("no working area available, can't do block memory writes");
726 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
729 retval
= target_write_buffer(target
, write_algorithm
->address
,
730 sizeof(stm32x_flash_write_code
),
731 stm32x_flash_write_code
);
732 if (retval
!= ERROR_OK
) {
733 target_free_working_area(target
, write_algorithm
);
738 while (target_alloc_working_area_try(target
, buffer_size
, &source
) != ERROR_OK
) {
740 if (buffer_size
<= 256) {
741 /* we already allocated the writing code, but failed to get a
742 * buffer, free the algorithm */
743 target_free_working_area(target
, write_algorithm
);
745 LOG_WARNING("no large enough working area available, can't do block memory writes");
746 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
750 armv7m_info
.common_magic
= ARMV7M_COMMON_MAGIC
;
751 armv7m_info
.core_mode
= ARM_MODE_THREAD
;
753 init_reg_param(®_params
[0], "r0", 32, PARAM_IN_OUT
); /* buffer start, status (out) */
754 init_reg_param(®_params
[1], "r1", 32, PARAM_OUT
); /* buffer end */
755 init_reg_param(®_params
[2], "r2", 32, PARAM_OUT
); /* target address */
756 init_reg_param(®_params
[3], "r3", 32, PARAM_OUT
); /* count (halfword-16bit) */
757 init_reg_param(®_params
[4], "r4", 32, PARAM_OUT
); /* flash base */
759 buf_set_u32(reg_params
[0].value
, 0, 32, source
->address
);
760 buf_set_u32(reg_params
[1].value
, 0, 32, source
->address
+ source
->size
);
761 buf_set_u32(reg_params
[2].value
, 0, 32, address
);
762 buf_set_u32(reg_params
[3].value
, 0, 32, count
);
763 buf_set_u32(reg_params
[4].value
, 0, 32, STM32_FLASH_BASE
);
765 retval
= target_run_flash_async_algorithm(target
, buffer
, count
, 2,
768 source
->address
, source
->size
,
769 write_algorithm
->address
, 0,
772 if (retval
== ERROR_FLASH_OPERATION_FAILED
) {
773 LOG_ERROR("error executing stm32x flash write algorithm");
775 uint32_t error
= buf_get_u32(reg_params
[0].value
, 0, 32) & FLASH_ERROR
;
777 if (error
& FLASH_WRPERR
)
778 LOG_ERROR("flash memory write protected");
781 LOG_ERROR("flash write failed = 0x%08" PRIx32
, error
);
782 /* Clear but report errors */
783 target_write_u32(target
, STM32_FLASH_SR
, error
);
788 target_free_working_area(target
, source
);
789 target_free_working_area(target
, write_algorithm
);
791 destroy_reg_param(®_params
[0]);
792 destroy_reg_param(®_params
[1]);
793 destroy_reg_param(®_params
[2]);
794 destroy_reg_param(®_params
[3]);
795 destroy_reg_param(®_params
[4]);
800 static int stm32x_write(struct flash_bank
*bank
, const uint8_t *buffer
,
801 uint32_t offset
, uint32_t count
)
803 struct target
*target
= bank
->target
;
804 uint32_t words_remaining
= (count
/ 2);
805 uint32_t bytes_remaining
= (count
& 0x00000001);
806 uint32_t address
= bank
->base
+ offset
;
807 uint32_t bytes_written
= 0;
810 if (bank
->target
->state
!= TARGET_HALTED
) {
811 LOG_ERROR("Target not halted");
812 return ERROR_TARGET_NOT_HALTED
;
816 LOG_WARNING("offset 0x%" PRIx32
" breaks required 2-byte alignment", offset
);
817 return ERROR_FLASH_DST_BREAKS_ALIGNMENT
;
820 retval
= stm32x_unlock_reg(target
);
821 if (retval
!= ERROR_OK
)
824 /* multiple half words (2-byte) to be programmed? */
825 if (words_remaining
> 0) {
826 /* try using a block write */
827 retval
= stm32x_write_block(bank
, buffer
, offset
, words_remaining
);
828 if (retval
!= ERROR_OK
) {
829 if (retval
== ERROR_TARGET_RESOURCE_NOT_AVAILABLE
) {
830 /* if block write failed (no sufficient working area),
831 * we use normal (slow) single dword accesses */
832 LOG_WARNING("couldn't use block writes, falling back to single memory accesses");
835 buffer
+= words_remaining
* 2;
836 address
+= words_remaining
* 2;
841 if ((retval
!= ERROR_OK
) && (retval
!= ERROR_TARGET_RESOURCE_NOT_AVAILABLE
))
846 The Flash memory programming sequence is as follows:
847 1. Check that no main Flash memory operation is ongoing by checking the BSY bit in the
849 2. Set the PG bit in the FLASH_CR register
850 3. Perform the data write operation(s) to the desired memory address (inside main
851 memory block or OTP area):
852 – – Half-word access in case of x16 parallelism
853 – Word access in case of x32 parallelism
856 Byte access in case of x8 parallelism
857 Double word access in case of x64 parallelism
858 Wait for the BSY bit to be cleared
860 while (words_remaining
> 0) {
862 memcpy(&value
, buffer
+ bytes_written
, sizeof(uint16_t));
864 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
),
865 FLASH_PG
| FLASH_PSIZE_16
);
866 if (retval
!= ERROR_OK
)
869 retval
= target_write_u16(target
, address
, value
);
870 if (retval
!= ERROR_OK
)
873 retval
= stm32x_wait_status_busy(bank
, FLASH_WRITE_TIMEOUT
);
874 if (retval
!= ERROR_OK
)
882 if (bytes_remaining
) {
883 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
),
884 FLASH_PG
| FLASH_PSIZE_8
);
885 if (retval
!= ERROR_OK
)
887 retval
= target_write_u8(target
, address
, buffer
[bytes_written
]);
888 if (retval
!= ERROR_OK
)
891 retval
= stm32x_wait_status_busy(bank
, FLASH_WRITE_TIMEOUT
);
892 if (retval
!= ERROR_OK
)
896 return target_write_u32(target
, STM32_FLASH_CR
, FLASH_LOCK
);
899 static void setup_sector(struct flash_bank
*bank
, unsigned int i
,
902 assert(i
< bank
->num_sectors
);
903 bank
->sectors
[i
].offset
= bank
->size
;
904 bank
->sectors
[i
].size
= size
;
905 bank
->size
+= bank
->sectors
[i
].size
;
906 LOG_DEBUG("sector %u: %ukBytes", i
, size
>> 10);
909 static uint16_t sector_size_in_kb(unsigned int i
, uint16_t max_sector_size_in_kb
)
912 return max_sector_size_in_kb
/ 8;
914 return max_sector_size_in_kb
/ 2;
915 return max_sector_size_in_kb
;
918 static unsigned int calculate_number_of_sectors(struct flash_bank
*bank
,
919 uint16_t flash_size_in_kb
,
920 uint16_t max_sector_size_in_kb
)
922 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
923 uint16_t remaining_flash_size_in_kb
= flash_size_in_kb
;
924 unsigned int nr_sectors
;
926 /* Dual Bank Flash has two identically-arranged banks of sectors. */
927 if (stm32x_info
->has_large_mem
)
928 remaining_flash_size_in_kb
/= 2;
930 for (nr_sectors
= 0; remaining_flash_size_in_kb
> 0; nr_sectors
++) {
931 uint16_t size_in_kb
= sector_size_in_kb(nr_sectors
, max_sector_size_in_kb
);
932 if (size_in_kb
> remaining_flash_size_in_kb
) {
933 LOG_INFO("%s Bank %" PRIu16
" kiB final sector clipped to %" PRIu16
" kiB",
934 stm32x_info
->has_large_mem
? "Dual" : "Single",
935 flash_size_in_kb
, remaining_flash_size_in_kb
);
936 remaining_flash_size_in_kb
= 0;
938 remaining_flash_size_in_kb
-= size_in_kb
;
942 return stm32x_info
->has_large_mem
? nr_sectors
*2 : nr_sectors
;
945 static void setup_bank(struct flash_bank
*bank
, unsigned int start
,
946 uint16_t flash_size_in_kb
, uint16_t max_sector_size_in_kb
)
948 uint16_t remaining_flash_size_in_kb
= flash_size_in_kb
;
949 unsigned int sector_index
= 0;
950 while (remaining_flash_size_in_kb
> 0) {
951 uint16_t size_in_kb
= sector_size_in_kb(sector_index
, max_sector_size_in_kb
);
952 if (size_in_kb
> remaining_flash_size_in_kb
) {
953 /* Clip last sector. Already warned in
954 * calculate_number_of_sectors. */
955 size_in_kb
= remaining_flash_size_in_kb
;
957 setup_sector(bank
, start
+ sector_index
, size_in_kb
* 1024);
958 remaining_flash_size_in_kb
-= size_in_kb
;
963 static int stm32x_get_device_id(struct flash_bank
*bank
, uint32_t *device_id
)
965 /* this checks for a stm32f4x errata issue where a
966 * stm32f2x DBGMCU_IDCODE is incorrectly returned.
967 * If the issue is detected target is forced to stm32f4x Rev A.
968 * Only effects Rev A silicon */
970 struct target
*target
= bank
->target
;
973 /* read stm32 device id register */
974 int retval
= target_read_u32(target
, 0xE0042000, device_id
);
975 if (retval
!= ERROR_OK
)
978 if ((*device_id
& 0xfff) == 0x411) {
979 /* read CPUID reg to check core type */
980 retval
= target_read_u32(target
, 0xE000ED00, &cpuid
);
981 if (retval
!= ERROR_OK
)
984 /* check for cortex_m4 */
985 if (((cpuid
>> 4) & 0xFFF) == 0xC24) {
986 *device_id
&= ~((0xFFFF << 16) | 0xfff);
987 *device_id
|= (0x1000 << 16) | 0x413;
988 LOG_INFO("stm32f4x errata detected - fixing incorrect MCU_IDCODE");
994 static int stm32x_probe(struct flash_bank
*bank
)
996 struct target
*target
= bank
->target
;
997 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
998 unsigned int num_prot_blocks
, num_sectors
;
999 uint16_t flash_size_in_kb
;
1000 uint16_t otp_size_in_b
;
1001 uint16_t otp_sector_size
;
1002 uint32_t flash_size_reg
= 0x1FFF7A22;
1003 uint16_t max_sector_size_in_kb
= 128;
1004 uint16_t max_flash_size_in_kb
;
1006 uint32_t base_address
= 0x08000000;
1008 stm32x_info
->probed
= false;
1009 stm32x_info
->has_large_mem
= false;
1010 stm32x_info
->has_boot_addr
= false;
1011 stm32x_info
->has_extra_options
= false;
1012 stm32x_info
->has_optcr2_pcrop
= false;
1013 stm32x_info
->protection_bits
= 12; /* max. number of nWRPi bits (in FLASH_OPTCR !!!) */
1014 num_prot_blocks
= 0;
1016 free(bank
->sectors
);
1017 bank
->num_sectors
= 0;
1018 bank
->sectors
= NULL
;
1020 free(bank
->prot_blocks
);
1021 bank
->num_prot_blocks
= 0;
1022 bank
->prot_blocks
= NULL
;
1024 /* if explicitly called out as OTP bank, short circuit probe */
1025 if (stm32x_is_otp(bank
)) {
1026 if (stm32x_otp_is_f7(bank
)) {
1027 otp_size_in_b
= STM32F7_OTP_SIZE
;
1028 otp_sector_size
= STM32F7_OTP_SECTOR_SIZE
;
1030 otp_size_in_b
= STM32F2_OTP_SIZE
;
1031 otp_sector_size
= STM32F2_OTP_SECTOR_SIZE
;
1034 num_sectors
= otp_size_in_b
/ otp_sector_size
;
1035 LOG_INFO("flash size = %" PRIu16
" bytes", otp_size_in_b
);
1037 assert(num_sectors
> 0);
1039 bank
->num_sectors
= num_sectors
;
1040 bank
->sectors
= calloc(sizeof(struct flash_sector
), num_sectors
);
1042 if (stm32x_otp_is_f7(bank
))
1043 bank
->size
= STM32F7_OTP_SIZE
;
1045 bank
->size
= STM32F2_OTP_SIZE
;
1047 for (unsigned int i
= 0; i
< num_sectors
; i
++) {
1048 bank
->sectors
[i
].offset
= i
* otp_sector_size
;
1049 bank
->sectors
[i
].size
= otp_sector_size
;
1050 bank
->sectors
[i
].is_erased
= 1;
1051 bank
->sectors
[i
].is_protected
= 0;
1054 stm32x_info
->probed
= true;
1058 /* read stm32 device id register */
1059 int retval
= stm32x_get_device_id(bank
, &device_id
);
1060 if (retval
!= ERROR_OK
)
1062 LOG_INFO("device id = 0x%08" PRIx32
, device_id
);
1063 device_id
&= 0xfff; /* only bits 0-11 are used further on */
1065 /* set max flash size depending on family, id taken from AN2606 */
1066 switch (device_id
) {
1067 case 0x411: /* F20x/21x */
1068 case 0x413: /* F40x/41x */
1069 max_flash_size_in_kb
= 1024;
1072 case 0x419: /* F42x/43x */
1073 case 0x434: /* F469/479 */
1074 stm32x_info
->has_extra_options
= true;
1075 max_flash_size_in_kb
= 2048;
1078 case 0x423: /* F401xB/C */
1079 max_flash_size_in_kb
= 256;
1082 case 0x421: /* F446 */
1083 case 0x431: /* F411 */
1084 case 0x433: /* F401xD/E */
1085 case 0x441: /* F412 */
1086 max_flash_size_in_kb
= 512;
1089 case 0x458: /* F410 */
1090 max_flash_size_in_kb
= 128;
1093 case 0x449: /* F74x/75x */
1094 max_flash_size_in_kb
= 1024;
1095 max_sector_size_in_kb
= 256;
1096 flash_size_reg
= 0x1FF0F442;
1097 stm32x_info
->has_extra_options
= true;
1098 stm32x_info
->has_boot_addr
= true;
1101 case 0x451: /* F76x/77x */
1102 max_flash_size_in_kb
= 2048;
1103 max_sector_size_in_kb
= 256;
1104 flash_size_reg
= 0x1FF0F442;
1105 stm32x_info
->has_extra_options
= true;
1106 stm32x_info
->has_boot_addr
= true;
1109 case 0x452: /* F72x/73x */
1110 max_flash_size_in_kb
= 512;
1111 flash_size_reg
= 0x1FF07A22; /* yes, 0x1FF*0*7A22, not 0x1FF*F*7A22 */
1112 stm32x_info
->has_extra_options
= true;
1113 stm32x_info
->has_boot_addr
= true;
1114 stm32x_info
->has_optcr2_pcrop
= true;
1117 case 0x463: /* F413x/423x */
1118 max_flash_size_in_kb
= 1536;
1119 stm32x_info
->has_extra_options
= true;
1120 stm32x_info
->protection_bits
= 15;
1121 num_prot_blocks
= 15;
1125 LOG_WARNING("Cannot identify target as a STM32 family.");
1129 /* get flash size from target. */
1130 retval
= target_read_u16(target
, flash_size_reg
, &flash_size_in_kb
);
1132 /* failed reading flash size or flash size invalid (early silicon),
1133 * default to max target family */
1134 if (retval
!= ERROR_OK
|| flash_size_in_kb
== 0xffff || flash_size_in_kb
== 0) {
1135 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming %" PRIu16
"k flash",
1136 max_flash_size_in_kb
);
1137 flash_size_in_kb
= max_flash_size_in_kb
;
1140 /* if the user sets the size manually then ignore the probed value
1141 * this allows us to work around devices that have a invalid flash size register value */
1142 if (stm32x_info
->user_bank_size
) {
1143 LOG_INFO("ignoring flash probed value, using configured bank size");
1144 flash_size_in_kb
= stm32x_info
->user_bank_size
/ 1024;
1147 LOG_INFO("flash size = %" PRIu16
" kbytes", flash_size_in_kb
);
1149 /* did we assign flash size? */
1150 assert(flash_size_in_kb
!= 0xffff);
1152 /* F42x/43x/469/479 1024 kiByte devices have a dual bank option */
1153 if ((device_id
== 0x419) || (device_id
== 0x434)) {
1154 uint32_t optiondata
;
1155 retval
= target_read_u32(target
, STM32_FLASH_OPTCR
, &optiondata
);
1156 if (retval
!= ERROR_OK
) {
1157 LOG_DEBUG("unable to read option bytes");
1160 if ((flash_size_in_kb
> 1024) || (optiondata
& OPTCR_DB1M
)) {
1161 stm32x_info
->has_large_mem
= true;
1162 LOG_INFO("Dual Bank %" PRIu16
" kiB STM32F42x/43x/469/479 found", flash_size_in_kb
);
1164 stm32x_info
->has_large_mem
= false;
1165 LOG_INFO("Single Bank %" PRIu16
" kiB STM32F42x/43x/469/479 found", flash_size_in_kb
);
1169 /* F76x/77x devices have a dual bank option */
1170 if (device_id
== 0x451) {
1171 uint32_t optiondata
;
1172 retval
= target_read_u32(target
, STM32_FLASH_OPTCR
, &optiondata
);
1173 if (retval
!= ERROR_OK
) {
1174 LOG_DEBUG("unable to read option bytes");
1177 if (optiondata
& OPTCR_NDBANK
) {
1178 stm32x_info
->has_large_mem
= false;
1179 LOG_INFO("Single Bank %" PRIu16
" kiB STM32F76x/77x found", flash_size_in_kb
);
1181 stm32x_info
->has_large_mem
= true;
1182 max_sector_size_in_kb
>>= 1; /* sector size divided by 2 in dual-bank mode */
1183 LOG_INFO("Dual Bank %" PRIu16
" kiB STM32F76x/77x found", flash_size_in_kb
);
1187 /* calculate numbers of pages */
1188 unsigned int num_pages
= calculate_number_of_sectors(
1189 bank
, flash_size_in_kb
, max_sector_size_in_kb
);
1191 bank
->base
= base_address
;
1192 bank
->num_sectors
= num_pages
;
1193 bank
->sectors
= calloc(num_pages
, sizeof(struct flash_sector
));
1194 for (unsigned int i
= 0; i
< num_pages
; i
++) {
1195 bank
->sectors
[i
].is_erased
= -1;
1196 bank
->sectors
[i
].is_protected
= 0;
1199 LOG_DEBUG("allocated %u sectors", num_pages
);
1201 /* F76x/77x in dual bank mode */
1202 if ((device_id
== 0x451) && stm32x_info
->has_large_mem
)
1203 num_prot_blocks
= num_pages
>> 1;
1205 if (num_prot_blocks
) {
1206 bank
->prot_blocks
= malloc(sizeof(struct flash_sector
) * num_prot_blocks
);
1207 for (unsigned int i
= 0; i
< num_prot_blocks
; i
++)
1208 bank
->prot_blocks
[i
].is_protected
= 0;
1209 LOG_DEBUG("allocated %u prot blocks", num_prot_blocks
);
1212 if (stm32x_info
->has_large_mem
) {
1214 setup_bank(bank
, 0, flash_size_in_kb
>> 1, max_sector_size_in_kb
);
1215 setup_bank(bank
, num_pages
>> 1, flash_size_in_kb
>> 1,
1216 max_sector_size_in_kb
);
1218 /* F767x/F77x in dual mode, one protection bit refers to two adjacent sectors */
1219 if (device_id
== 0x451) {
1220 for (unsigned int i
= 0; i
< num_prot_blocks
; i
++) {
1221 bank
->prot_blocks
[i
].offset
= bank
->sectors
[i
<< 1].offset
;
1222 bank
->prot_blocks
[i
].size
= bank
->sectors
[i
<< 1].size
1223 + bank
->sectors
[(i
<< 1) + 1].size
;
1228 setup_bank(bank
, 0, flash_size_in_kb
, max_sector_size_in_kb
);
1230 /* F413/F423, sectors 14 and 15 share one common protection bit */
1231 if (device_id
== 0x463) {
1232 for (unsigned int i
= 0; i
< num_prot_blocks
; i
++) {
1233 bank
->prot_blocks
[i
].offset
= bank
->sectors
[i
].offset
;
1234 bank
->prot_blocks
[i
].size
= bank
->sectors
[i
].size
;
1236 bank
->prot_blocks
[num_prot_blocks
- 1].size
<<= 1;
1239 bank
->num_prot_blocks
= num_prot_blocks
;
1240 assert((bank
->size
>> 10) == flash_size_in_kb
);
1242 stm32x_info
->probed
= true;
1246 static int stm32x_auto_probe(struct flash_bank
*bank
)
1248 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
1249 if (stm32x_info
->probed
)
1251 return stm32x_probe(bank
);
1254 static int get_stm32x_info(struct flash_bank
*bank
, struct command_invocation
*cmd
)
1256 uint32_t dbgmcu_idcode
;
1258 /* read stm32 device id register */
1259 int retval
= stm32x_get_device_id(bank
, &dbgmcu_idcode
);
1260 if (retval
!= ERROR_OK
)
1263 uint16_t device_id
= dbgmcu_idcode
& 0xfff;
1264 uint16_t rev_id
= dbgmcu_idcode
>> 16;
1265 const char *device_str
;
1266 const char *rev_str
= NULL
;
1268 switch (device_id
) {
1270 device_str
= "STM32F2xx";
1310 device_str
= "STM32F4xx";
1336 device_str
= "STM32F446";
1350 device_str
= "STM32F4xx (Low Power)";
1372 device_str
= "STM32F7[4|5]x";
1386 device_str
= "STM32F7[6|7]x";
1399 device_str
= "STM32F7[2|3]x";
1409 device_str
= "STM32F4[1|2]3";
1419 command_print_sameline(cmd
, "Cannot identify target as a STM32F2/4/7\n");
1423 if (rev_str
!= NULL
)
1424 command_print_sameline(cmd
, "%s - Rev: %s", device_str
, rev_str
);
1426 command_print_sameline(cmd
, "%s - Rev: unknown (0x%04" PRIx16
")", device_str
, rev_id
);
1431 COMMAND_HANDLER(stm32x_handle_lock_command
)
1433 struct target
*target
= NULL
;
1434 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1437 return ERROR_COMMAND_SYNTAX_ERROR
;
1439 struct flash_bank
*bank
;
1440 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1441 if (ERROR_OK
!= retval
)
1444 stm32x_info
= bank
->driver_priv
;
1445 target
= bank
->target
;
1447 if (target
->state
!= TARGET_HALTED
) {
1448 LOG_INFO("Target not halted");
1449 /* return ERROR_TARGET_NOT_HALTED; */
1452 if (stm32x_read_options(bank
) != ERROR_OK
) {
1453 command_print(CMD
, "%s failed to read options", bank
->driver
->name
);
1457 /* set readout protection */
1458 stm32x_info
->option_bytes
.RDP
= 0;
1460 if (stm32x_write_options(bank
) != ERROR_OK
) {
1461 command_print(CMD
, "%s failed to lock device", bank
->driver
->name
);
1465 command_print(CMD
, "%s locked", bank
->driver
->name
);
1470 COMMAND_HANDLER(stm32x_handle_unlock_command
)
1472 struct target
*target
= NULL
;
1473 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1476 return ERROR_COMMAND_SYNTAX_ERROR
;
1478 struct flash_bank
*bank
;
1479 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1480 if (ERROR_OK
!= retval
)
1483 stm32x_info
= bank
->driver_priv
;
1484 target
= bank
->target
;
1486 if (target
->state
!= TARGET_HALTED
) {
1487 LOG_INFO("Target not halted");
1488 /* return ERROR_TARGET_NOT_HALTED; */
1491 if (stm32x_read_options(bank
) != ERROR_OK
) {
1492 command_print(CMD
, "%s failed to read options", bank
->driver
->name
);
1496 /* clear readout protection and complementary option bytes
1497 * this will also force a device unlock if set */
1498 stm32x_info
->option_bytes
.RDP
= 0xAA;
1499 if (stm32x_info
->has_optcr2_pcrop
) {
1500 stm32x_info
->option_bytes
.optcr2_pcrop
= OPTCR2_PCROP_RDP
| (~1U << bank
->num_sectors
);
1503 if (stm32x_write_options(bank
) != ERROR_OK
) {
1504 command_print(CMD
, "%s failed to unlock device", bank
->driver
->name
);
1508 command_print(CMD
, "%s unlocked.\n"
1509 "INFO: a reset or power cycle is required "
1510 "for the new settings to take effect.", bank
->driver
->name
);
1515 static int stm32x_mass_erase(struct flash_bank
*bank
)
1519 struct target
*target
= bank
->target
;
1520 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1522 if (target
->state
!= TARGET_HALTED
) {
1523 LOG_ERROR("Target not halted");
1524 return ERROR_TARGET_NOT_HALTED
;
1527 stm32x_info
= bank
->driver_priv
;
1529 retval
= stm32x_unlock_reg(target
);
1530 if (retval
!= ERROR_OK
)
1533 /* mass erase flash memory */
1534 if (stm32x_info
->has_large_mem
)
1535 flash_mer
= FLASH_MER
| FLASH_MER1
;
1537 flash_mer
= FLASH_MER
;
1539 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), flash_mer
);
1540 if (retval
!= ERROR_OK
)
1542 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
),
1543 flash_mer
| FLASH_STRT
);
1544 if (retval
!= ERROR_OK
)
1547 retval
= stm32x_wait_status_busy(bank
, FLASH_MASS_ERASE_TIMEOUT
);
1548 if (retval
!= ERROR_OK
)
1551 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_LOCK
);
1552 if (retval
!= ERROR_OK
)
1558 COMMAND_HANDLER(stm32x_handle_mass_erase_command
)
1561 command_print(CMD
, "stm32x mass_erase <bank>");
1562 return ERROR_COMMAND_SYNTAX_ERROR
;
1565 struct flash_bank
*bank
;
1566 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1567 if (ERROR_OK
!= retval
)
1570 retval
= stm32x_mass_erase(bank
);
1571 if (retval
== ERROR_OK
) {
1572 /* set all sectors as erased */
1573 for (unsigned int i
= 0; i
< bank
->num_sectors
; i
++)
1574 bank
->sectors
[i
].is_erased
= 1;
1576 command_print(CMD
, "stm32x mass erase complete");
1578 command_print(CMD
, "stm32x mass erase failed");
1584 COMMAND_HANDLER(stm32f2x_handle_options_read_command
)
1587 struct flash_bank
*bank
;
1588 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1590 if (CMD_ARGC
!= 1) {
1591 command_print(CMD
, "stm32f2x options_read <bank>");
1592 return ERROR_COMMAND_SYNTAX_ERROR
;
1595 retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1596 if (ERROR_OK
!= retval
)
1599 retval
= stm32x_read_options(bank
);
1600 if (ERROR_OK
!= retval
)
1603 stm32x_info
= bank
->driver_priv
;
1604 if (stm32x_info
->has_extra_options
) {
1605 if (stm32x_info
->has_boot_addr
) {
1606 uint32_t boot_addr
= stm32x_info
->option_bytes
.boot_addr
;
1608 command_print(CMD
, "stm32f2x user_options 0x%03" PRIX16
","
1609 " boot_add0 0x%04" PRIX32
", boot_add1 0x%04" PRIX32
,
1610 stm32x_info
->option_bytes
.user_options
,
1611 boot_addr
& 0xffff, (boot_addr
& 0xffff0000) >> 16);
1612 if (stm32x_info
->has_optcr2_pcrop
) {
1613 command_print(CMD
, "stm32f2x optcr2_pcrop 0x%08" PRIX32
,
1614 stm32x_info
->option_bytes
.optcr2_pcrop
);
1617 command_print(CMD
, "stm32f2x user_options 0x%03" PRIX16
,
1618 stm32x_info
->option_bytes
.user_options
);
1621 command_print(CMD
, "stm32f2x user_options 0x%02" PRIX16
,
1622 stm32x_info
->option_bytes
.user_options
);
1629 COMMAND_HANDLER(stm32f2x_handle_options_write_command
)
1632 struct flash_bank
*bank
;
1633 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1634 uint16_t user_options
, boot_addr0
, boot_addr1
, options_mask
;
1637 command_print(CMD
, "stm32f2x options_write <bank> ...");
1638 return ERROR_COMMAND_SYNTAX_ERROR
;
1641 retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1642 if (ERROR_OK
!= retval
)
1645 retval
= stm32x_read_options(bank
);
1646 if (ERROR_OK
!= retval
)
1649 stm32x_info
= bank
->driver_priv
;
1650 if (stm32x_info
->has_boot_addr
) {
1651 if (CMD_ARGC
!= 4) {
1652 command_print(CMD
, "stm32f2x options_write <bank> <user_options>"
1653 " <boot_addr0> <boot_addr1>");
1654 return ERROR_COMMAND_SYNTAX_ERROR
;
1656 COMMAND_PARSE_NUMBER(u16
, CMD_ARGV
[2], boot_addr0
);
1657 COMMAND_PARSE_NUMBER(u16
, CMD_ARGV
[3], boot_addr1
);
1658 stm32x_info
->option_bytes
.boot_addr
= boot_addr0
| (((uint32_t) boot_addr1
) << 16);
1660 if (CMD_ARGC
!= 2) {
1661 command_print(CMD
, "stm32f2x options_write <bank> <user_options>");
1662 return ERROR_COMMAND_SYNTAX_ERROR
;
1666 COMMAND_PARSE_NUMBER(u16
, CMD_ARGV
[1], user_options
);
1667 options_mask
= !stm32x_info
->has_extra_options
? ~0xfc :
1668 ~(((0xf00 << (stm32x_info
->protection_bits
- 12)) | 0xff) & 0xffc);
1669 if (user_options
& options_mask
) {
1670 command_print(CMD
, "stm32f2x invalid user_options");
1671 return ERROR_COMMAND_ARGUMENT_INVALID
;
1674 stm32x_info
->option_bytes
.user_options
= user_options
;
1676 if (stm32x_write_options(bank
) != ERROR_OK
) {
1677 command_print(CMD
, "stm32f2x failed to write options");
1681 /* switching between single- and dual-bank modes requires re-probe */
1682 /* ... and reprogramming of whole flash */
1683 stm32x_info
->probed
= false;
1685 command_print(CMD
, "stm32f2x write options complete.\n"
1686 "INFO: a reset or power cycle is required "
1687 "for the new settings to take effect.");
1691 COMMAND_HANDLER(stm32f2x_handle_optcr2_write_command
)
1694 struct flash_bank
*bank
;
1695 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1696 uint32_t optcr2_pcrop
;
1698 if (CMD_ARGC
!= 2) {
1699 command_print(CMD
, "stm32f2x optcr2_write <bank> <optcr2_value>");
1700 return ERROR_COMMAND_SYNTAX_ERROR
;
1703 retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1704 if (ERROR_OK
!= retval
)
1707 stm32x_info
= bank
->driver_priv
;
1708 if (!stm32x_info
->has_optcr2_pcrop
) {
1709 command_print(CMD
, "no optcr2 register");
1710 return ERROR_COMMAND_ARGUMENT_INVALID
;
1713 command_print(CMD
, "INFO: To disable PCROP, set PCROP_RDP"
1714 " with PCROPi bits STILL SET, then\nlock device and"
1715 " finally unlock it. Clears PCROP and mass erases flash.");
1717 retval
= stm32x_read_options(bank
);
1718 if (ERROR_OK
!= retval
)
1721 COMMAND_PARSE_NUMBER(u32
, CMD_ARGV
[1], optcr2_pcrop
);
1722 stm32x_info
->option_bytes
.optcr2_pcrop
= optcr2_pcrop
;
1724 if (stm32x_write_options(bank
) != ERROR_OK
) {
1725 command_print(CMD
, "stm32f2x failed to write options");
1729 command_print(CMD
, "stm32f2x optcr2_write complete.");
1733 COMMAND_HANDLER(stm32x_handle_otp_command
)
1736 command_print(CMD
, "stm32x otp <bank> (enable|disable|show)");
1737 return ERROR_COMMAND_SYNTAX_ERROR
;
1740 struct flash_bank
*bank
;
1741 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1742 if (ERROR_OK
!= retval
)
1744 if (stm32x_is_otp(bank
)) {
1745 if (strcmp(CMD_ARGV
[1], "enable") == 0) {
1746 stm32x_otp_enable(bank
);
1747 } else if (strcmp(CMD_ARGV
[1], "disable") == 0) {
1748 stm32x_otp_disable(bank
);
1749 } else if (strcmp(CMD_ARGV
[1], "show") == 0) {
1751 "OTP memory bank #%u is %s for write commands.",
1753 stm32x_is_otp_unlocked(bank
) ? "enabled" : "disabled");
1755 return ERROR_COMMAND_SYNTAX_ERROR
;
1758 command_print(CMD
, "Failed: not an OTP bank.");
1764 static const struct command_registration stm32x_exec_command_handlers
[] = {
1767 .handler
= stm32x_handle_lock_command
,
1768 .mode
= COMMAND_EXEC
,
1770 .help
= "Lock entire flash device.",
1774 .handler
= stm32x_handle_unlock_command
,
1775 .mode
= COMMAND_EXEC
,
1777 .help
= "Unlock entire protected flash device.",
1780 .name
= "mass_erase",
1781 .handler
= stm32x_handle_mass_erase_command
,
1782 .mode
= COMMAND_EXEC
,
1784 .help
= "Erase entire flash device.",
1787 .name
= "options_read",
1788 .handler
= stm32f2x_handle_options_read_command
,
1789 .mode
= COMMAND_EXEC
,
1791 .help
= "Read and display device option bytes.",
1794 .name
= "options_write",
1795 .handler
= stm32f2x_handle_options_write_command
,
1796 .mode
= COMMAND_EXEC
,
1797 .usage
= "bank_id user_options [ boot_add0 boot_add1 ]",
1798 .help
= "Write option bytes",
1801 .name
= "optcr2_write",
1802 .handler
= stm32f2x_handle_optcr2_write_command
,
1803 .mode
= COMMAND_EXEC
,
1804 .usage
= "bank_id optcr2",
1805 .help
= "Write optcr2 word",
1809 .handler
= stm32x_handle_otp_command
,
1810 .mode
= COMMAND_EXEC
,
1812 .help
= "OTP (One Time Programmable) memory write enable/disable.",
1814 COMMAND_REGISTRATION_DONE
1817 static const struct command_registration stm32x_command_handlers
[] = {
1820 .mode
= COMMAND_ANY
,
1821 .help
= "stm32f2x flash command group",
1823 .chain
= stm32x_exec_command_handlers
,
1825 COMMAND_REGISTRATION_DONE
1828 const struct flash_driver stm32f2x_flash
= {
1830 .commands
= stm32x_command_handlers
,
1831 .flash_bank_command
= stm32x_flash_bank_command
,
1832 .erase
= stm32x_erase
,
1833 .protect
= stm32x_protect
,
1834 .write
= stm32x_write
,
1835 .read
= default_flash_read
,
1836 .probe
= stm32x_probe
,
1837 .auto_probe
= stm32x_auto_probe
,
1838 .erase_check
= default_flash_blank_check
,
1839 .protect_check
= stm32x_protect_check
,
1840 .info
= get_stm32x_info
,
1841 .free_driver_priv
= default_flash_free_driver_priv
,