- if ((device_id & 0x7ff) != 0x411)
- {
- LOG_WARNING("Cannot identify target as a STM32 family, try the other STM32 drivers.");
+ /* get flash size from target. */
+ retval = target_read_u16(target, 0x1FFF7A10, &flash_size_in_kb);
+ if (retval != ERROR_OK) {
+ LOG_WARNING("failed reading flash size, default to max target family");
+ /* failed reading flash size, default to max target family */
+ flash_size_in_kb = 0xffff;
+ }
+
+ if ((device_id & 0x7ff) == 0x411) {
+ /* check for early silicon */
+ if (flash_size_in_kb == 0xffff) {
+ /* number of sectors may be incorrrect on early silicon */
+ LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
+ flash_size_in_kb = 512;
+ }
+ } else {
+ LOG_WARNING("Cannot identify target as a STM32 family.");