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
,
Linking to existing account procedure
If you already have an account and want to add another login method
you
MUST first sign in with your existing account and
then change URL to read
https://review.openocd.org/login/?link
to get to this page again but this time it'll work for linking. Thank you.
SSH host keys fingerprints
1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=.. |
|+o.. . |
|*.o . . |
|+B . . . |
|Bo. = o S |
|Oo.+ + = |
|oB=.* = . o |
| =+=.+ + E |
|. .=o . o |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)