diff --git a/src/target/stm32f1.c b/src/target/stm32f1.c index 1513154..5241b2c 100644 --- a/src/target/stm32f1.c +++ b/src/target/stm32f1.c @@ -120,12 +120,21 @@ bool stm32f1_probe(target *t) t->idcode = target_mem_read32(t, DBGMCU_IDCODE) & 0xfff; switch(t->idcode) { case 0x410: /* Medium density */ - case 0x412: /* Low denisty */ + case 0x412: /* Low density */ case 0x420: /* Value Line, Low-/Medium density */ - t->driver = "STM32F1 medium density"; target_add_ram(t, 0x20000000, 0x5000); stm32f1_add_flash(t, 0x8000000, 0x20000, 0x400); target_add_commands(t, stm32f1_cmd_list, "STM32 LD/MD"); + /* Test for non-genuine parts with Core rev 2*/ + ADIv5_AP_t *ap = cortexm_ap(t); + if ((ap->idr >> 28) > 1) { + t->driver = "STM32F1 (clone) medium density"; +#if defined(PLATFORM_HAS_DEBUG) + DEBUG("Non-genuine STM32F1\n"); +#endif + } else { + t->driver = "STM32F1 medium density"; + } return true; case 0x414: /* High density */ case 0x418: /* Connectivity Line */