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 by Andreas Fritiofson *
9 * andreas.fritiofson@gmail.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, write to the *
23 * Free Software Foundation, Inc., *
24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 ***************************************************************************/
32 #include <helper/binarybuffer.h>
33 #include <target/algorithm.h>
34 #include <target/armv7m.h>
36 /* stm32x register locations */
38 #define FLASH_REG_BASE_B0 0x40022000
39 #define FLASH_REG_BASE_B1 0x40022040
41 #define STM32_FLASH_ACR 0x00
42 #define STM32_FLASH_KEYR 0x04
43 #define STM32_FLASH_OPTKEYR 0x08
44 #define STM32_FLASH_SR 0x0C
45 #define STM32_FLASH_CR 0x10
46 #define STM32_FLASH_AR 0x14
47 #define STM32_FLASH_OBR 0x1C
48 #define STM32_FLASH_WRPR 0x20
50 /* TODO: Check if code using these really should be hard coded to bank 0.
51 * There are valid cases, on dual flash devices the protection of the
52 * second bank is done on the bank0 reg's. */
53 #define STM32_FLASH_ACR_B0 0x40022000
54 #define STM32_FLASH_KEYR_B0 0x40022004
55 #define STM32_FLASH_OPTKEYR_B0 0x40022008
56 #define STM32_FLASH_SR_B0 0x4002200C
57 #define STM32_FLASH_CR_B0 0x40022010
58 #define STM32_FLASH_AR_B0 0x40022014
59 #define STM32_FLASH_OBR_B0 0x4002201C
60 #define STM32_FLASH_WRPR_B0 0x40022020
62 /* option byte location */
64 #define STM32_OB_RDP 0x1FFFF800
65 #define STM32_OB_USER 0x1FFFF802
66 #define STM32_OB_DATA0 0x1FFFF804
67 #define STM32_OB_DATA1 0x1FFFF806
68 #define STM32_OB_WRP0 0x1FFFF808
69 #define STM32_OB_WRP1 0x1FFFF80A
70 #define STM32_OB_WRP2 0x1FFFF80C
71 #define STM32_OB_WRP3 0x1FFFF80E
73 /* FLASH_CR register bits */
75 #define FLASH_PG (1 << 0)
76 #define FLASH_PER (1 << 1)
77 #define FLASH_MER (1 << 2)
78 #define FLASH_OPTPG (1 << 4)
79 #define FLASH_OPTER (1 << 5)
80 #define FLASH_STRT (1 << 6)
81 #define FLASH_LOCK (1 << 7)
82 #define FLASH_OPTWRE (1 << 9)
84 /* FLASH_SR register bits */
86 #define FLASH_BSY (1 << 0)
87 #define FLASH_PGERR (1 << 2)
88 #define FLASH_WRPRTERR (1 << 4)
89 #define FLASH_EOP (1 << 5)
91 /* STM32_FLASH_OBR bit definitions (reading) */
96 #define OPT_RDRSTSTOP 3
97 #define OPT_RDRSTSTDBY 4
98 #define OPT_BFB2 5 /* dual flash bank only */
100 /* register unlock keys */
102 #define KEY1 0x45670123
103 #define KEY2 0xCDEF89AB
105 struct stm32x_options
{
107 uint16_t user_options
;
108 uint16_t protection
[4];
111 struct stm32x_flash_bank
{
112 struct stm32x_options option_bytes
;
113 struct working_area
*write_algorithm
;
118 /* used to access dual flash bank stm32xl */
119 uint32_t register_base
;
122 static int stm32x_mass_erase(struct flash_bank
*bank
);
124 /* flash bank stm32x <base> <size> 0 0 <target#>
126 FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command
)
128 struct stm32x_flash_bank
*stm32x_info
;
131 return ERROR_COMMAND_SYNTAX_ERROR
;
133 stm32x_info
= malloc(sizeof(struct stm32x_flash_bank
));
134 bank
->driver_priv
= stm32x_info
;
136 stm32x_info
->write_algorithm
= NULL
;
137 stm32x_info
->probed
= 0;
138 stm32x_info
->has_dual_banks
= false;
139 stm32x_info
->register_base
= FLASH_REG_BASE_B0
;
144 static inline int stm32x_get_flash_reg(struct flash_bank
*bank
, uint32_t reg
)
146 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
147 return reg
+ stm32x_info
->register_base
;
150 static inline int stm32x_get_flash_status(struct flash_bank
*bank
, uint32_t *status
)
152 struct target
*target
= bank
->target
;
153 return target_read_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_SR
), status
);
156 static int stm32x_wait_status_busy(struct flash_bank
*bank
, int timeout
)
158 struct target
*target
= bank
->target
;
160 int retval
= ERROR_OK
;
162 /* wait for busy to clear */
164 retval
= stm32x_get_flash_status(bank
, &status
);
165 if (retval
!= ERROR_OK
)
167 LOG_DEBUG("status: 0x%" PRIx32
"", status
);
168 if ((status
& FLASH_BSY
) == 0)
170 if (timeout
-- <= 0) {
171 LOG_ERROR("timed out waiting for flash");
177 if (status
& FLASH_WRPRTERR
) {
178 LOG_ERROR("stm32x device protected");
182 if (status
& FLASH_PGERR
) {
183 LOG_ERROR("stm32x device programming failed");
187 /* Clear but report errors */
188 if (status
& (FLASH_WRPRTERR
| FLASH_PGERR
)) {
189 /* If this operation fails, we ignore it and report the original
192 target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_SR
),
193 FLASH_WRPRTERR
| FLASH_PGERR
);
198 int stm32x_check_operation_supported(struct flash_bank
*bank
)
200 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
202 /* if we have a dual flash bank device then
203 * we need to perform option byte stuff on bank0 only */
204 if (stm32x_info
->register_base
!= FLASH_REG_BASE_B0
) {
205 LOG_ERROR("Option Byte Operation's must use bank0");
206 return ERROR_FLASH_OPERATION_FAILED
;
212 static int stm32x_read_options(struct flash_bank
*bank
)
215 struct stm32x_flash_bank
*stm32x_info
= NULL
;
216 struct target
*target
= bank
->target
;
218 stm32x_info
= bank
->driver_priv
;
220 /* read current option bytes */
221 int retval
= target_read_u32(target
, STM32_FLASH_OBR_B0
, &optiondata
);
222 if (retval
!= ERROR_OK
)
225 stm32x_info
->option_bytes
.user_options
= (uint16_t)0xFFF8 | ((optiondata
>> 2) & 0x07);
226 stm32x_info
->option_bytes
.RDP
= (optiondata
& (1 << OPT_READOUT
)) ? 0xFFFF : 0x5AA5;
228 if (optiondata
& (1 << OPT_READOUT
))
229 LOG_INFO("Device Security Bit Set");
231 /* each bit refers to a 4bank protection */
232 retval
= target_read_u32(target
, STM32_FLASH_WRPR_B0
, &optiondata
);
233 if (retval
!= ERROR_OK
)
236 stm32x_info
->option_bytes
.protection
[0] = (uint16_t)optiondata
;
237 stm32x_info
->option_bytes
.protection
[1] = (uint16_t)(optiondata
>> 8);
238 stm32x_info
->option_bytes
.protection
[2] = (uint16_t)(optiondata
>> 16);
239 stm32x_info
->option_bytes
.protection
[3] = (uint16_t)(optiondata
>> 24);
244 static int stm32x_erase_options(struct flash_bank
*bank
)
246 struct stm32x_flash_bank
*stm32x_info
= NULL
;
247 struct target
*target
= bank
->target
;
249 stm32x_info
= bank
->driver_priv
;
251 /* read current options */
252 stm32x_read_options(bank
);
254 /* unlock flash registers */
255 int retval
= target_write_u32(target
, STM32_FLASH_KEYR_B0
, KEY1
);
256 if (retval
!= ERROR_OK
)
259 retval
= target_write_u32(target
, STM32_FLASH_KEYR_B0
, KEY2
);
260 if (retval
!= ERROR_OK
)
263 /* unlock option flash registers */
264 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR_B0
, KEY1
);
265 if (retval
!= ERROR_OK
)
267 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR_B0
, KEY2
);
268 if (retval
!= ERROR_OK
)
271 /* erase option bytes */
272 retval
= target_write_u32(target
, STM32_FLASH_CR_B0
, FLASH_OPTER
| FLASH_OPTWRE
);
273 if (retval
!= ERROR_OK
)
275 retval
= target_write_u32(target
, STM32_FLASH_CR_B0
, FLASH_OPTER
| FLASH_STRT
| FLASH_OPTWRE
);
276 if (retval
!= ERROR_OK
)
279 retval
= stm32x_wait_status_busy(bank
, 10);
280 if (retval
!= ERROR_OK
)
283 /* clear readout protection and complementary option bytes
284 * this will also force a device unlock if set */
285 stm32x_info
->option_bytes
.RDP
= 0x5AA5;
290 static int stm32x_write_options(struct flash_bank
*bank
)
292 struct stm32x_flash_bank
*stm32x_info
= NULL
;
293 struct target
*target
= bank
->target
;
295 stm32x_info
= bank
->driver_priv
;
297 /* unlock flash registers */
298 int retval
= target_write_u32(target
, STM32_FLASH_KEYR_B0
, KEY1
);
299 if (retval
!= ERROR_OK
)
301 retval
= target_write_u32(target
, STM32_FLASH_KEYR_B0
, KEY2
);
302 if (retval
!= ERROR_OK
)
305 /* unlock option flash registers */
306 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR_B0
, KEY1
);
307 if (retval
!= ERROR_OK
)
309 retval
= target_write_u32(target
, STM32_FLASH_OPTKEYR_B0
, KEY2
);
310 if (retval
!= ERROR_OK
)
313 /* program option bytes */
314 retval
= target_write_u32(target
, STM32_FLASH_CR_B0
, FLASH_OPTPG
| FLASH_OPTWRE
);
315 if (retval
!= ERROR_OK
)
318 /* write user option byte */
319 retval
= target_write_u16(target
, STM32_OB_USER
, stm32x_info
->option_bytes
.user_options
);
320 if (retval
!= ERROR_OK
)
323 retval
= stm32x_wait_status_busy(bank
, 10);
324 if (retval
!= ERROR_OK
)
327 /* write protection byte 1 */
328 retval
= target_write_u16(target
, STM32_OB_WRP0
, stm32x_info
->option_bytes
.protection
[0]);
329 if (retval
!= ERROR_OK
)
332 retval
= stm32x_wait_status_busy(bank
, 10);
333 if (retval
!= ERROR_OK
)
336 /* write protection byte 2 */
337 retval
= target_write_u16(target
, STM32_OB_WRP1
, stm32x_info
->option_bytes
.protection
[1]);
338 if (retval
!= ERROR_OK
)
341 retval
= stm32x_wait_status_busy(bank
, 10);
342 if (retval
!= ERROR_OK
)
345 /* write protection byte 3 */
346 retval
= target_write_u16(target
, STM32_OB_WRP2
, stm32x_info
->option_bytes
.protection
[2]);
347 if (retval
!= ERROR_OK
)
350 retval
= stm32x_wait_status_busy(bank
, 10);
351 if (retval
!= ERROR_OK
)
354 /* write protection byte 4 */
355 retval
= target_write_u16(target
, STM32_OB_WRP3
, stm32x_info
->option_bytes
.protection
[3]);
356 if (retval
!= ERROR_OK
)
359 retval
= stm32x_wait_status_busy(bank
, 10);
360 if (retval
!= ERROR_OK
)
363 /* write readout protection bit */
364 retval
= target_write_u16(target
, STM32_OB_RDP
, stm32x_info
->option_bytes
.RDP
);
365 if (retval
!= ERROR_OK
)
368 retval
= stm32x_wait_status_busy(bank
, 10);
369 if (retval
!= ERROR_OK
)
372 retval
= target_write_u32(target
, STM32_FLASH_CR_B0
, FLASH_LOCK
);
373 if (retval
!= ERROR_OK
)
379 static int stm32x_protect_check(struct flash_bank
*bank
)
381 struct target
*target
= bank
->target
;
382 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
389 if (target
->state
!= TARGET_HALTED
) {
390 LOG_ERROR("Target not halted");
391 return ERROR_TARGET_NOT_HALTED
;
394 int retval
= stm32x_check_operation_supported(bank
);
395 if (ERROR_OK
!= retval
)
398 /* medium density - each bit refers to a 4bank protection
399 * high density - each bit refers to a 2bank protection */
400 retval
= target_read_u32(target
, STM32_FLASH_WRPR_B0
, &protection
);
401 if (retval
!= ERROR_OK
)
404 /* medium density - each protection bit is for 4 * 1K pages
405 * high density - each protection bit is for 2 * 2K pages */
406 num_bits
= (bank
->num_sectors
/ stm32x_info
->ppage_size
);
408 if (stm32x_info
->ppage_size
== 2) {
409 /* high density flash/connectivity line protection */
413 if (protection
& (1 << 31))
416 /* bit 31 controls sector 62 - 255 protection for high density
417 * bit 31 controls sector 62 - 127 protection for connectivity line */
418 for (s
= 62; s
< bank
->num_sectors
; s
++)
419 bank
->sectors
[s
].is_protected
= set
;
421 if (bank
->num_sectors
> 61)
424 for (i
= 0; i
< num_bits
; i
++) {
427 if (protection
& (1 << i
))
430 for (s
= 0; s
< stm32x_info
->ppage_size
; s
++)
431 bank
->sectors
[(i
* stm32x_info
->ppage_size
) + s
].is_protected
= set
;
434 /* low/medium density flash protection */
435 for (i
= 0; i
< num_bits
; i
++) {
438 if (protection
& (1 << i
))
441 for (s
= 0; s
< stm32x_info
->ppage_size
; s
++)
442 bank
->sectors
[(i
* stm32x_info
->ppage_size
) + s
].is_protected
= set
;
449 static int stm32x_erase(struct flash_bank
*bank
, int first
, int last
)
451 struct target
*target
= bank
->target
;
454 if (bank
->target
->state
!= TARGET_HALTED
) {
455 LOG_ERROR("Target not halted");
456 return ERROR_TARGET_NOT_HALTED
;
459 if ((first
== 0) && (last
== (bank
->num_sectors
- 1)))
460 return stm32x_mass_erase(bank
);
462 /* unlock flash registers */
463 int retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY1
);
464 if (retval
!= ERROR_OK
)
466 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY2
);
467 if (retval
!= ERROR_OK
)
470 for (i
= first
; i
<= last
; i
++) {
471 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_PER
);
472 if (retval
!= ERROR_OK
)
474 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_AR
),
475 bank
->base
+ bank
->sectors
[i
].offset
);
476 if (retval
!= ERROR_OK
)
478 retval
= target_write_u32(target
,
479 stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_PER
| FLASH_STRT
);
480 if (retval
!= ERROR_OK
)
483 retval
= stm32x_wait_status_busy(bank
, 100);
484 if (retval
!= ERROR_OK
)
487 bank
->sectors
[i
].is_erased
= 1;
490 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_LOCK
);
491 if (retval
!= ERROR_OK
)
497 static int stm32x_protect(struct flash_bank
*bank
, int set
, int first
, int last
)
499 struct stm32x_flash_bank
*stm32x_info
= NULL
;
500 struct target
*target
= bank
->target
;
501 uint16_t prot_reg
[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
506 stm32x_info
= bank
->driver_priv
;
508 if (target
->state
!= TARGET_HALTED
) {
509 LOG_ERROR("Target not halted");
510 return ERROR_TARGET_NOT_HALTED
;
513 int retval
= stm32x_check_operation_supported(bank
);
514 if (ERROR_OK
!= retval
)
517 if ((first
% stm32x_info
->ppage_size
) != 0) {
518 LOG_WARNING("aligned start protect sector to a %d sector boundary",
519 stm32x_info
->ppage_size
);
520 first
= first
- (first
% stm32x_info
->ppage_size
);
522 if (((last
+ 1) % stm32x_info
->ppage_size
) != 0) {
523 LOG_WARNING("aligned end protect sector to a %d sector boundary",
524 stm32x_info
->ppage_size
);
526 last
= last
- (last
% stm32x_info
->ppage_size
);
530 /* medium density - each bit refers to a 4bank protection
531 * high density - each bit refers to a 2bank protection */
532 retval
= target_read_u32(target
, STM32_FLASH_WRPR_B0
, &protection
);
533 if (retval
!= ERROR_OK
)
536 prot_reg
[0] = (uint16_t)protection
;
537 prot_reg
[1] = (uint16_t)(protection
>> 8);
538 prot_reg
[2] = (uint16_t)(protection
>> 16);
539 prot_reg
[3] = (uint16_t)(protection
>> 24);
541 if (stm32x_info
->ppage_size
== 2) {
542 /* high density flash */
544 /* bit 7 controls sector 62 - 255 protection */
547 prot_reg
[3] &= ~(1 << 7);
549 prot_reg
[3] |= (1 << 7);
557 for (i
= first
; i
<= last
; i
++) {
558 reg
= (i
/ stm32x_info
->ppage_size
) / 8;
559 bit
= (i
/ stm32x_info
->ppage_size
) - (reg
* 8);
562 prot_reg
[reg
] &= ~(1 << bit
);
564 prot_reg
[reg
] |= (1 << bit
);
567 /* medium density flash */
568 for (i
= first
; i
<= last
; i
++) {
569 reg
= (i
/ stm32x_info
->ppage_size
) / 8;
570 bit
= (i
/ stm32x_info
->ppage_size
) - (reg
* 8);
573 prot_reg
[reg
] &= ~(1 << bit
);
575 prot_reg
[reg
] |= (1 << bit
);
579 status
= stm32x_erase_options(bank
);
580 if (status
!= ERROR_OK
)
583 stm32x_info
->option_bytes
.protection
[0] = prot_reg
[0];
584 stm32x_info
->option_bytes
.protection
[1] = prot_reg
[1];
585 stm32x_info
->option_bytes
.protection
[2] = prot_reg
[2];
586 stm32x_info
->option_bytes
.protection
[3] = prot_reg
[3];
588 return stm32x_write_options(bank
);
591 static int stm32x_write_block(struct flash_bank
*bank
, uint8_t *buffer
,
592 uint32_t offset
, uint32_t count
)
594 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
595 struct target
*target
= bank
->target
;
596 uint32_t buffer_size
= 16384;
597 struct working_area
*source
;
598 uint32_t address
= bank
->base
+ offset
;
599 struct reg_param reg_params
[5];
600 struct armv7m_algorithm armv7m_info
;
601 int retval
= ERROR_OK
;
603 /* see contrib/loaders/flash/stm32f1x.S for src */
605 static const uint8_t stm32x_flash_write_code
[] = {
606 /* #define STM32_FLASH_CR_OFFSET 0x10 */
607 /* #define STM32_FLASH_SR_OFFSET 0x0C */
609 0x16, 0x68, /* ldr r6, [r2, #0] */
610 0x00, 0x2e, /* cmp r6, #0 */
611 0x1a, 0xd0, /* beq exit */
612 0x55, 0x68, /* ldr r5, [r2, #4] */
613 0xb5, 0x42, /* cmp r5, r6 */
614 0xf9, 0xd0, /* beq wait_fifo */
615 0x01, 0x26, /* movs r6, #1 */
616 0x06, 0x61, /* str r6, [r0, #STM32_FLASH_CR_OFFSET] */
617 0x2e, 0x88, /* ldrh r6, [r5, #0] */
618 0x26, 0x80, /* strh r6, [r4, #0] */
619 0x02, 0x35, /* adds r5, #2 */
620 0x02, 0x34, /* adds r4, #2 */
622 0xc6, 0x68, /* ldr r6, [r0, #STM32_FLASH_SR_OFFSET] */
623 0x01, 0x27, /* movs r7, #1 */
624 0x3e, 0x42, /* tst r6, r7 */
625 0xfb, 0xd1, /* bne busy */
626 0x14, 0x27, /* movs r7, #0x14 */
627 0x3e, 0x42, /* tst r6, r7 */
628 0x08, 0xd1, /* bne error */
629 0x9d, 0x42, /* cmp r5, r3 */
630 0x01, 0xd3, /* bcc no_wrap */
631 0x15, 0x46, /* mov r5, r2 */
632 0x08, 0x35, /* adds r5, #8 */
634 0x55, 0x60, /* str r5, [r2, #4] */
635 0x01, 0x39, /* subs r1, r1, #1 */
636 0x00, 0x29, /* cmp r1, #0 */
637 0x02, 0xd0, /* beq exit */
638 0xe3, 0xe7, /* b wait_fifo */
640 0x00, 0x20, /* movs r0, #0 */
641 0x50, 0x60, /* str r0, [r2, #4] */
643 0x30, 0x46, /* mov r0, r6 */
644 0x00, 0xbe, /* bkpt #0 */
647 /* flash write code */
648 if (target_alloc_working_area(target
, sizeof(stm32x_flash_write_code
),
649 &stm32x_info
->write_algorithm
) != ERROR_OK
) {
650 LOG_WARNING("no working area available, can't do block memory writes");
651 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
654 retval
= target_write_buffer(target
, stm32x_info
->write_algorithm
->address
,
655 sizeof(stm32x_flash_write_code
), (uint8_t *)stm32x_flash_write_code
);
656 if (retval
!= ERROR_OK
)
660 while (target_alloc_working_area_try(target
, buffer_size
, &source
) != ERROR_OK
) {
662 buffer_size
&= ~3UL; /* Make sure it's 4 byte aligned */
663 if (buffer_size
<= 256) {
664 /* if we already allocated the writing code, but failed to get a
665 * buffer, free the algorithm */
666 if (stm32x_info
->write_algorithm
)
667 target_free_working_area(target
, stm32x_info
->write_algorithm
);
669 LOG_WARNING("no large enough working area available, can't do block memory writes");
670 return ERROR_TARGET_RESOURCE_NOT_AVAILABLE
;
674 /* Set up working area. First word is write pointer, second word is read pointer,
675 * rest is fifo data area. */
676 uint32_t wp_addr
= source
->address
;
677 uint32_t rp_addr
= source
->address
+ 4;
678 uint32_t fifo_start_addr
= source
->address
+ 8;
679 uint32_t fifo_end_addr
= source
->address
+ source
->size
;
681 uint32_t wp
= fifo_start_addr
;
682 uint32_t rp
= fifo_start_addr
;
684 retval
= target_write_u32(target
, wp_addr
, wp
);
685 if (retval
!= ERROR_OK
)
687 retval
= target_write_u32(target
, rp_addr
, rp
);
688 if (retval
!= ERROR_OK
)
691 init_reg_param(®_params
[0], "r0", 32, PARAM_IN_OUT
); /* flash base (in), status (out) */
692 init_reg_param(®_params
[1], "r1", 32, PARAM_OUT
); /* count (halfword-16bit) */
693 init_reg_param(®_params
[2], "r2", 32, PARAM_OUT
); /* buffer start */
694 init_reg_param(®_params
[3], "r3", 32, PARAM_OUT
); /* buffer end */
695 init_reg_param(®_params
[4], "r4", 32, PARAM_IN_OUT
); /* target address */
697 buf_set_u32(reg_params
[0].value
, 0, 32, stm32x_info
->register_base
);
698 buf_set_u32(reg_params
[1].value
, 0, 32, count
);
699 buf_set_u32(reg_params
[2].value
, 0, 32, source
->address
);
700 buf_set_u32(reg_params
[3].value
, 0, 32, source
->address
+ source
->size
);
701 buf_set_u32(reg_params
[4].value
, 0, 32, address
);
703 armv7m_info
.common_magic
= ARMV7M_COMMON_MAGIC
;
704 armv7m_info
.core_mode
= ARMV7M_MODE_ANY
;
706 /* Start up algorithm on target and let it idle while writing the first chunk */
707 retval
= target_start_algorithm(target
, 0, NULL
, 5, reg_params
,
708 stm32x_info
->write_algorithm
->address
,
711 if (retval
!= ERROR_OK
) {
712 LOG_ERROR("error starting stm32x flash write algorithm");
717 retval
= target_read_u32(target
, rp_addr
, &rp
);
718 if (retval
!= ERROR_OK
) {
719 LOG_ERROR("failed to get read pointer");
723 LOG_DEBUG("count 0x%"PRIx32
" wp 0x%"PRIx32
" rp 0x%"PRIx32
, count
, wp
, rp
);
726 LOG_ERROR("flash write algorithm aborted by target");
727 retval
= ERROR_FLASH_OPERATION_FAILED
;
731 if ((rp
& 1) || rp
< fifo_start_addr
|| rp
>= fifo_end_addr
) {
732 LOG_ERROR("corrupted fifo read pointer 0x%"PRIx32
, rp
);
736 /* Count the number of bytes available in the fifo without
737 * crossing the wrap around. Make sure to not fill it completely,
738 * because that would make wp == rp and that's the empty condition. */
739 uint32_t thisrun_bytes
;
741 thisrun_bytes
= rp
- wp
- 2;
742 else if (rp
> fifo_start_addr
)
743 thisrun_bytes
= fifo_end_addr
- wp
;
745 thisrun_bytes
= fifo_end_addr
- wp
- 2;
747 if (thisrun_bytes
== 0) {
748 /* Throttle polling a bit if transfer is (much) faster than flash
749 * programming. The exact delay shouldn't matter as long as it's
750 * less than buffer size / flash speed. This is very unlikely to
751 * run when using high latency connections such as USB. */
756 /* Limit to the amount of data we actually want to write */
757 if (thisrun_bytes
> count
* 2)
758 thisrun_bytes
= count
* 2;
760 /* Write data to fifo */
761 retval
= target_write_buffer(target
, wp
, thisrun_bytes
, buffer
);
762 if (retval
!= ERROR_OK
)
765 /* Update counters and wrap write pointer */
766 buffer
+= thisrun_bytes
;
767 count
-= thisrun_bytes
/ 2;
769 if (wp
>= fifo_end_addr
)
770 wp
= fifo_start_addr
;
772 /* Store updated write pointer to target */
773 retval
= target_write_u32(target
, wp_addr
, wp
);
774 if (retval
!= ERROR_OK
)
778 if (retval
!= ERROR_OK
) {
779 /* abort flash write algorithm on target */
780 target_write_u32(target
, wp_addr
, 0);
783 int retval2
= target_wait_algorithm(target
, 0, NULL
, 5, reg_params
,
784 0, 10000, &armv7m_info
);
785 if (retval2
!= ERROR_OK
) {
786 LOG_ERROR("error waiting for stm32x flash write algorithm");
790 if (retval
== ERROR_FLASH_OPERATION_FAILED
) {
791 LOG_ERROR("flash write failed at address 0x%"PRIx32
,
792 buf_get_u32(reg_params
[4].value
, 0, 32));
794 if (buf_get_u32(reg_params
[0].value
, 0, 32) & FLASH_PGERR
) {
795 LOG_ERROR("flash memory not erased before writing");
796 /* Clear but report errors */
797 target_write_u32(target
, STM32_FLASH_SR_B0
, FLASH_PGERR
);
800 if (buf_get_u32(reg_params
[0].value
, 0, 32) & FLASH_WRPRTERR
) {
801 LOG_ERROR("flash memory write protected");
802 /* Clear but report errors */
803 target_write_u32(target
, STM32_FLASH_SR_B0
, FLASH_WRPRTERR
);
808 target_free_working_area(target
, source
);
809 target_free_working_area(target
, stm32x_info
->write_algorithm
);
811 destroy_reg_param(®_params
[0]);
812 destroy_reg_param(®_params
[1]);
813 destroy_reg_param(®_params
[2]);
814 destroy_reg_param(®_params
[3]);
815 destroy_reg_param(®_params
[4]);
820 static int stm32x_write(struct flash_bank
*bank
, uint8_t *buffer
,
821 uint32_t offset
, uint32_t count
)
823 struct target
*target
= bank
->target
;
824 uint32_t words_remaining
= (count
/ 2);
825 uint32_t bytes_remaining
= (count
& 0x00000001);
826 uint32_t address
= bank
->base
+ offset
;
827 uint32_t bytes_written
= 0;
830 if (bank
->target
->state
!= TARGET_HALTED
) {
831 LOG_ERROR("Target not halted");
832 return ERROR_TARGET_NOT_HALTED
;
836 LOG_WARNING("offset 0x%" PRIx32
" breaks required 2-byte alignment", offset
);
837 return ERROR_FLASH_DST_BREAKS_ALIGNMENT
;
840 /* unlock flash registers */
841 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY1
);
842 if (retval
!= ERROR_OK
)
844 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY2
);
845 if (retval
!= ERROR_OK
)
848 /* multiple half words (2-byte) to be programmed? */
849 if (words_remaining
> 0) {
850 /* try using a block write */
851 retval
= stm32x_write_block(bank
, buffer
, offset
, words_remaining
);
852 if (retval
!= ERROR_OK
) {
853 if (retval
== ERROR_TARGET_RESOURCE_NOT_AVAILABLE
) {
854 /* if block write failed (no sufficient working area),
855 * we use normal (slow) single dword accesses */
856 LOG_WARNING("couldn't use block writes, falling back to single memory accesses");
859 buffer
+= words_remaining
* 2;
860 address
+= words_remaining
* 2;
865 if ((retval
!= ERROR_OK
) && (retval
!= ERROR_TARGET_RESOURCE_NOT_AVAILABLE
))
868 while (words_remaining
> 0) {
870 memcpy(&value
, buffer
+ bytes_written
, sizeof(uint16_t));
872 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_PG
);
873 if (retval
!= ERROR_OK
)
875 retval
= target_write_u16(target
, address
, value
);
876 if (retval
!= ERROR_OK
)
879 retval
= stm32x_wait_status_busy(bank
, 5);
880 if (retval
!= ERROR_OK
)
888 if (bytes_remaining
) {
889 uint16_t value
= 0xffff;
890 memcpy(&value
, buffer
+ bytes_written
, bytes_remaining
);
892 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_PG
);
893 if (retval
!= ERROR_OK
)
895 retval
= target_write_u16(target
, address
, value
);
896 if (retval
!= ERROR_OK
)
899 retval
= stm32x_wait_status_busy(bank
, 5);
900 if (retval
!= ERROR_OK
)
904 return target_write_u32(target
, STM32_FLASH_CR_B0
, FLASH_LOCK
);
907 static int stm32x_probe(struct flash_bank
*bank
)
909 struct target
*target
= bank
->target
;
910 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
912 uint16_t flash_size_in_kb
;
915 uint32_t base_address
= 0x08000000;
917 stm32x_info
->probed
= 0;
918 stm32x_info
->register_base
= FLASH_REG_BASE_B0
;
920 /* read stm32 device id register */
921 int retval
= target_read_u32(target
, 0xE0042000, &device_id
);
922 if (retval
!= ERROR_OK
)
924 LOG_INFO("device id = 0x%08" PRIx32
"", device_id
);
926 /* get flash size from target. */
927 retval
= target_read_u16(target
, 0x1FFFF7E0, &flash_size_in_kb
);
928 if (retval
!= ERROR_OK
) {
929 LOG_WARNING("failed reading flash size, default to max target family");
930 /* failed reading flash size, default to max target family */
931 flash_size_in_kb
= 0xffff;
934 if ((device_id
& 0xfff) == 0x410) {
935 /* medium density - we have 1k pages
936 * 4 pages for a protection area */
938 stm32x_info
->ppage_size
= 4;
940 /* check for early silicon */
941 if (flash_size_in_kb
== 0xffff) {
942 /* number of sectors incorrect on revA */
943 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
944 flash_size_in_kb
= 128;
946 } else if ((device_id
& 0xfff) == 0x412) {
947 /* low density - we have 1k pages
948 * 4 pages for a protection area */
950 stm32x_info
->ppage_size
= 4;
952 /* check for early silicon */
953 if (flash_size_in_kb
== 0xffff) {
954 /* number of sectors incorrect on revA */
955 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash");
956 flash_size_in_kb
= 32;
958 } else if ((device_id
& 0xfff) == 0x414) {
959 /* high density - we have 2k pages
960 * 2 pages for a protection area */
962 stm32x_info
->ppage_size
= 2;
964 /* check for early silicon */
965 if (flash_size_in_kb
== 0xffff) {
966 /* number of sectors incorrect on revZ */
967 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
968 flash_size_in_kb
= 512;
970 } else if ((device_id
& 0xfff) == 0x418) {
971 /* connectivity line density - we have 2k pages
972 * 2 pages for a protection area */
974 stm32x_info
->ppage_size
= 2;
976 /* check for early silicon */
977 if (flash_size_in_kb
== 0xffff) {
978 /* number of sectors incorrect on revZ */
979 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash");
980 flash_size_in_kb
= 256;
982 } else if ((device_id
& 0xfff) == 0x420) {
983 /* value line density - we have 1k pages
984 * 4 pages for a protection area */
986 stm32x_info
->ppage_size
= 4;
988 /* check for early silicon */
989 if (flash_size_in_kb
== 0xffff) {
990 /* number of sectors may be incorrrect on early silicon */
991 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
992 flash_size_in_kb
= 128;
994 } else if ((device_id
& 0xfff) == 0x428) {
995 /* value line High density - we have 2k pages
996 * 4 pages for a protection area */
998 stm32x_info
->ppage_size
= 4;
1000 /* check for early silicon */
1001 if (flash_size_in_kb
== 0xffff) {
1002 /* number of sectors may be incorrrect on early silicon */
1003 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
1004 flash_size_in_kb
= 128;
1006 } else if ((device_id
& 0xfff) == 0x430) {
1007 /* xl line density - we have 2k pages
1008 * 2 pages for a protection area */
1010 stm32x_info
->ppage_size
= 2;
1011 stm32x_info
->has_dual_banks
= true;
1013 /* check for early silicon */
1014 if (flash_size_in_kb
== 0xffff) {
1015 /* number of sectors may be incorrrect on early silicon */
1016 LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 1024k flash");
1017 flash_size_in_kb
= 1024;
1020 /* split reported size into matching bank */
1021 if (bank
->base
!= 0x08080000) {
1022 /* bank 0 will be fixed 512k */
1023 flash_size_in_kb
= 512;
1025 flash_size_in_kb
-= 512;
1026 /* bank1 also uses a register offset */
1027 stm32x_info
->register_base
= FLASH_REG_BASE_B1
;
1028 base_address
= 0x08080000;
1031 LOG_WARNING("Cannot identify target as a STM32 family.");
1035 LOG_INFO("flash size = %dkbytes", flash_size_in_kb
);
1037 /* did we assign flash size? */
1038 assert(flash_size_in_kb
!= 0xffff);
1040 /* calculate numbers of pages */
1041 int num_pages
= flash_size_in_kb
* 1024 / page_size
;
1043 /* check that calculation result makes sense */
1044 assert(num_pages
> 0);
1046 if (bank
->sectors
) {
1047 free(bank
->sectors
);
1048 bank
->sectors
= NULL
;
1051 bank
->base
= base_address
;
1052 bank
->size
= (num_pages
* page_size
);
1053 bank
->num_sectors
= num_pages
;
1054 bank
->sectors
= malloc(sizeof(struct flash_sector
) * num_pages
);
1056 for (i
= 0; i
< num_pages
; i
++) {
1057 bank
->sectors
[i
].offset
= i
* page_size
;
1058 bank
->sectors
[i
].size
= page_size
;
1059 bank
->sectors
[i
].is_erased
= -1;
1060 bank
->sectors
[i
].is_protected
= 1;
1063 stm32x_info
->probed
= 1;
1068 static int stm32x_auto_probe(struct flash_bank
*bank
)
1070 struct stm32x_flash_bank
*stm32x_info
= bank
->driver_priv
;
1071 if (stm32x_info
->probed
)
1073 return stm32x_probe(bank
);
1077 COMMAND_HANDLER(stm32x_handle_part_id_command
)
1083 static int get_stm32x_info(struct flash_bank
*bank
, char *buf
, int buf_size
)
1085 struct target
*target
= bank
->target
;
1089 /* read stm32 device id register */
1090 int retval
= target_read_u32(target
, 0xE0042000, &device_id
);
1091 if (retval
!= ERROR_OK
)
1094 if ((device_id
& 0xfff) == 0x410) {
1095 printed
= snprintf(buf
, buf_size
, "stm32x (Medium Density) - Rev: ");
1097 buf_size
-= printed
;
1099 switch (device_id
>> 16) {
1101 snprintf(buf
, buf_size
, "A");
1105 snprintf(buf
, buf_size
, "B");
1109 snprintf(buf
, buf_size
, "Z");
1113 snprintf(buf
, buf_size
, "Y");
1117 snprintf(buf
, buf_size
, "unknown");
1120 } else if ((device_id
& 0xfff) == 0x412) {
1121 printed
= snprintf(buf
, buf_size
, "stm32x (Low Density) - Rev: ");
1123 buf_size
-= printed
;
1125 switch (device_id
>> 16) {
1127 snprintf(buf
, buf_size
, "A");
1131 snprintf(buf
, buf_size
, "unknown");
1134 } else if ((device_id
& 0xfff) == 0x414) {
1135 printed
= snprintf(buf
, buf_size
, "stm32x (High Density) - Rev: ");
1137 buf_size
-= printed
;
1139 switch (device_id
>> 16) {
1141 snprintf(buf
, buf_size
, "A");
1145 snprintf(buf
, buf_size
, "Z");
1149 snprintf(buf
, buf_size
, "unknown");
1152 } else if ((device_id
& 0xfff) == 0x418) {
1153 printed
= snprintf(buf
, buf_size
, "stm32x (Connectivity) - Rev: ");
1155 buf_size
-= printed
;
1157 switch (device_id
>> 16) {
1159 snprintf(buf
, buf_size
, "A");
1163 snprintf(buf
, buf_size
, "Z");
1167 snprintf(buf
, buf_size
, "unknown");
1170 } else if ((device_id
& 0xfff) == 0x420) {
1171 printed
= snprintf(buf
, buf_size
, "stm32x (Value) - Rev: ");
1173 buf_size
-= printed
;
1175 switch (device_id
>> 16) {
1177 snprintf(buf
, buf_size
, "A");
1181 snprintf(buf
, buf_size
, "Z");
1185 snprintf(buf
, buf_size
, "unknown");
1188 } else if ((device_id
& 0xfff) == 0x428) {
1189 printed
= snprintf(buf
, buf_size
, "stm32x (Value HD) - Rev: ");
1191 buf_size
-= printed
;
1193 switch (device_id
>> 16) {
1195 snprintf(buf
, buf_size
, "A");
1199 snprintf(buf
, buf_size
, "Z");
1203 snprintf(buf
, buf_size
, "unknown");
1206 } else if ((device_id
& 0xfff) == 0x430) {
1207 printed
= snprintf(buf
, buf_size
, "stm32x (XL) - Rev: ");
1209 buf_size
-= printed
;
1211 switch (device_id
>> 16) {
1213 snprintf(buf
, buf_size
, "A");
1217 snprintf(buf
, buf_size
, "unknown");
1221 snprintf(buf
, buf_size
, "Cannot identify target as a stm32x\n");
1228 COMMAND_HANDLER(stm32x_handle_lock_command
)
1230 struct target
*target
= NULL
;
1231 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1234 return ERROR_COMMAND_SYNTAX_ERROR
;
1236 struct flash_bank
*bank
;
1237 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1238 if (ERROR_OK
!= retval
)
1241 stm32x_info
= bank
->driver_priv
;
1243 target
= bank
->target
;
1245 if (target
->state
!= TARGET_HALTED
) {
1246 LOG_ERROR("Target not halted");
1247 return ERROR_TARGET_NOT_HALTED
;
1250 retval
= stm32x_check_operation_supported(bank
);
1251 if (ERROR_OK
!= retval
)
1254 if (stm32x_erase_options(bank
) != ERROR_OK
) {
1255 command_print(CMD_CTX
, "stm32x failed to erase options");
1259 /* set readout protection */
1260 stm32x_info
->option_bytes
.RDP
= 0;
1262 if (stm32x_write_options(bank
) != ERROR_OK
) {
1263 command_print(CMD_CTX
, "stm32x failed to lock device");
1267 command_print(CMD_CTX
, "stm32x locked");
1272 COMMAND_HANDLER(stm32x_handle_unlock_command
)
1274 struct target
*target
= NULL
;
1277 return ERROR_COMMAND_SYNTAX_ERROR
;
1279 struct flash_bank
*bank
;
1280 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1281 if (ERROR_OK
!= retval
)
1284 target
= bank
->target
;
1286 if (target
->state
!= TARGET_HALTED
) {
1287 LOG_ERROR("Target not halted");
1288 return ERROR_TARGET_NOT_HALTED
;
1291 retval
= stm32x_check_operation_supported(bank
);
1292 if (ERROR_OK
!= retval
)
1295 if (stm32x_erase_options(bank
) != ERROR_OK
) {
1296 command_print(CMD_CTX
, "stm32x failed to unlock device");
1300 if (stm32x_write_options(bank
) != ERROR_OK
) {
1301 command_print(CMD_CTX
, "stm32x failed to lock device");
1305 command_print(CMD_CTX
, "stm32x unlocked.\n"
1306 "INFO: a reset or power cycle is required "
1307 "for the new settings to take effect.");
1312 COMMAND_HANDLER(stm32x_handle_options_read_command
)
1314 uint32_t optionbyte
;
1315 struct target
*target
= NULL
;
1316 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1319 return ERROR_COMMAND_SYNTAX_ERROR
;
1321 struct flash_bank
*bank
;
1322 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1323 if (ERROR_OK
!= retval
)
1326 stm32x_info
= bank
->driver_priv
;
1328 target
= bank
->target
;
1330 if (target
->state
!= TARGET_HALTED
) {
1331 LOG_ERROR("Target not halted");
1332 return ERROR_TARGET_NOT_HALTED
;
1335 retval
= stm32x_check_operation_supported(bank
);
1336 if (ERROR_OK
!= retval
)
1339 retval
= target_read_u32(target
, STM32_FLASH_OBR_B0
, &optionbyte
);
1340 if (retval
!= ERROR_OK
)
1342 command_print(CMD_CTX
, "Option Byte: 0x%" PRIx32
"", optionbyte
);
1344 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_ERROR
, 1))
1345 command_print(CMD_CTX
, "Option Byte Complement Error");
1347 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_READOUT
, 1))
1348 command_print(CMD_CTX
, "Readout Protection On");
1350 command_print(CMD_CTX
, "Readout Protection Off");
1352 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_RDWDGSW
, 1))
1353 command_print(CMD_CTX
, "Software Watchdog");
1355 command_print(CMD_CTX
, "Hardware Watchdog");
1357 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_RDRSTSTOP
, 1))
1358 command_print(CMD_CTX
, "Stop: No reset generated");
1360 command_print(CMD_CTX
, "Stop: Reset generated");
1362 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_RDRSTSTDBY
, 1))
1363 command_print(CMD_CTX
, "Standby: No reset generated");
1365 command_print(CMD_CTX
, "Standby: Reset generated");
1367 if (stm32x_info
->has_dual_banks
) {
1368 if (buf_get_u32((uint8_t *)&optionbyte
, OPT_BFB2
, 1))
1369 command_print(CMD_CTX
, "Boot: Bank 0");
1371 command_print(CMD_CTX
, "Boot: Bank 1");
1377 COMMAND_HANDLER(stm32x_handle_options_write_command
)
1379 struct target
*target
= NULL
;
1380 struct stm32x_flash_bank
*stm32x_info
= NULL
;
1381 uint16_t optionbyte
= 0xF8;
1384 return ERROR_COMMAND_SYNTAX_ERROR
;
1386 struct flash_bank
*bank
;
1387 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1388 if (ERROR_OK
!= retval
)
1391 stm32x_info
= bank
->driver_priv
;
1393 target
= bank
->target
;
1395 if (target
->state
!= TARGET_HALTED
) {
1396 LOG_ERROR("Target not halted");
1397 return ERROR_TARGET_NOT_HALTED
;
1400 retval
= stm32x_check_operation_supported(bank
);
1401 if (ERROR_OK
!= retval
)
1404 /* REVISIT: ignores some options which we will display...
1405 * and doesn't insist on the specified syntax.
1409 if (strcmp(CMD_ARGV
[1], "SWWDG") == 0)
1410 optionbyte
|= (1 << 0);
1411 else /* REVISIT must be "HWWDG" then ... */
1412 optionbyte
&= ~(1 << 0);
1415 if (strcmp(CMD_ARGV
[2], "NORSTSTOP") == 0)
1416 optionbyte
|= (1 << 1);
1417 else /* REVISIT must be "RSTSTNDBY" then ... */
1418 optionbyte
&= ~(1 << 1);
1420 /* OPT_RDRSTSTDBY */
1421 if (strcmp(CMD_ARGV
[3], "NORSTSTNDBY") == 0)
1422 optionbyte
|= (1 << 2);
1423 else /* REVISIT must be "RSTSTOP" then ... */
1424 optionbyte
&= ~(1 << 2);
1426 if (CMD_ARGC
> 4 && stm32x_info
->has_dual_banks
) {
1428 if (strcmp(CMD_ARGV
[4], "BOOT0") == 0)
1429 optionbyte
|= (1 << 3);
1431 optionbyte
&= ~(1 << 3);
1434 if (stm32x_erase_options(bank
) != ERROR_OK
) {
1435 command_print(CMD_CTX
, "stm32x failed to erase options");
1439 stm32x_info
->option_bytes
.user_options
= optionbyte
;
1441 if (stm32x_write_options(bank
) != ERROR_OK
) {
1442 command_print(CMD_CTX
, "stm32x failed to write options");
1446 command_print(CMD_CTX
, "stm32x write options complete.\n"
1447 "INFO: a reset or power cycle is required "
1448 "for the new settings to take effect.");
1453 static int stm32x_mass_erase(struct flash_bank
*bank
)
1455 struct target
*target
= bank
->target
;
1457 if (target
->state
!= TARGET_HALTED
) {
1458 LOG_ERROR("Target not halted");
1459 return ERROR_TARGET_NOT_HALTED
;
1462 /* unlock option flash registers */
1463 int retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY1
);
1464 if (retval
!= ERROR_OK
)
1466 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_KEYR
), KEY2
);
1467 if (retval
!= ERROR_OK
)
1470 /* mass erase flash memory */
1471 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_MER
);
1472 if (retval
!= ERROR_OK
)
1474 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
),
1475 FLASH_MER
| FLASH_STRT
);
1476 if (retval
!= ERROR_OK
)
1479 retval
= stm32x_wait_status_busy(bank
, 100);
1480 if (retval
!= ERROR_OK
)
1483 retval
= target_write_u32(target
, stm32x_get_flash_reg(bank
, STM32_FLASH_CR
), FLASH_LOCK
);
1484 if (retval
!= ERROR_OK
)
1490 COMMAND_HANDLER(stm32x_handle_mass_erase_command
)
1495 return ERROR_COMMAND_SYNTAX_ERROR
;
1497 struct flash_bank
*bank
;
1498 int retval
= CALL_COMMAND_HANDLER(flash_command_get_bank
, 0, &bank
);
1499 if (ERROR_OK
!= retval
)
1502 retval
= stm32x_mass_erase(bank
);
1503 if (retval
== ERROR_OK
) {
1504 /* set all sectors as erased */
1505 for (i
= 0; i
< bank
->num_sectors
; i
++)
1506 bank
->sectors
[i
].is_erased
= 1;
1508 command_print(CMD_CTX
, "stm32x mass erase complete");
1510 command_print(CMD_CTX
, "stm32x mass erase failed");
1515 static const struct command_registration stm32x_exec_command_handlers
[] = {
1518 .handler
= stm32x_handle_lock_command
,
1519 .mode
= COMMAND_EXEC
,
1521 .help
= "Lock entire flash device.",
1525 .handler
= stm32x_handle_unlock_command
,
1526 .mode
= COMMAND_EXEC
,
1528 .help
= "Unlock entire protected flash device.",
1531 .name
= "mass_erase",
1532 .handler
= stm32x_handle_mass_erase_command
,
1533 .mode
= COMMAND_EXEC
,
1535 .help
= "Erase entire flash device.",
1538 .name
= "options_read",
1539 .handler
= stm32x_handle_options_read_command
,
1540 .mode
= COMMAND_EXEC
,
1542 .help
= "Read and display device option byte.",
1545 .name
= "options_write",
1546 .handler
= stm32x_handle_options_write_command
,
1547 .mode
= COMMAND_EXEC
,
1548 .usage
= "bank_id ('SWWDG'|'HWWDG') "
1549 "('RSTSTNDBY'|'NORSTSTNDBY') "
1550 "('RSTSTOP'|'NORSTSTOP')",
1551 .help
= "Replace bits in device option byte.",
1553 COMMAND_REGISTRATION_DONE
1556 static const struct command_registration stm32x_command_handlers
[] = {
1559 .mode
= COMMAND_ANY
,
1560 .help
= "stm32f1x flash command group",
1562 .chain
= stm32x_exec_command_handlers
,
1564 COMMAND_REGISTRATION_DONE
1567 struct flash_driver stm32f1x_flash
= {
1569 .commands
= stm32x_command_handlers
,
1570 .flash_bank_command
= stm32x_flash_bank_command
,
1571 .erase
= stm32x_erase
,
1572 .protect
= stm32x_protect
,
1573 .write
= stm32x_write
,
1574 .read
= default_flash_read
,
1575 .probe
= stm32x_probe
,
1576 .auto_probe
= stm32x_auto_probe
,
1577 .erase_check
= default_flash_mem_blank_check
,
1578 .protect_check
= stm32x_protect_check
,
1579 .info
= get_stm32x_info
,