diff --git a/src/target/cortexm.c b/src/target/cortexm.c index 2288063..6aa44ff 100644 --- a/src/target/cortexm.c +++ b/src/target/cortexm.c @@ -55,6 +55,9 @@ #include #endif +#define PROBE(x) \ + do { if ((x)(t)) {return true;} else target_check_error(t); } while (0) + static const char cortexm_driver_str[] = "ARM Cortex-M"; static bool cortexm_vector_catch(target *t, int argc, char *argv[]); @@ -209,6 +212,17 @@ static const char tdesc_cortex_mf[] = " " ""; +/* + Probe STM32F103 clones + */ +static bool stm32f1_clones_probe(target *t) +{ + PROBE(ch32f1_probe); + PROBE(stm32f1_probe); /* Care for other STM32F1 clones (?) */ + return false; +} + + ADIv5_AP_t *cortexm_ap(target *t) { return ((struct cortexm_priv *)t->priv)->ap; @@ -378,8 +392,6 @@ bool cortexm_probe(ADIv5_AP_t *ap) } else { target_check_error(t); } -#define PROBE(x) \ - do { if ((x)(t)) {return true;} else target_check_error(t); } while (0) switch (ap->ap_designer) { case AP_DESIGNER_FREESCALE: @@ -442,7 +454,7 @@ bool cortexm_probe(ADIv5_AP_t *ap) PROBE(rp_probe); PROBE(lpc11xx_probe); /* LPC8 */ } else if (ap->ap_partno == 0x4c3) { /* Cortex-M3 ROM */ - PROBE(stm32f1_probe); /* Care for STM32F1 clones */ + PROBE(stm32f1_clones_probe); /* Care for STM32F1 clones */ PROBE(lpc15xx_probe); /* Thanks to JojoS for testing */ } else if (ap->ap_partno == 0x471) { /* Cortex-M0 ROM */ PROBE(lpc11xx_probe); /* LPC24C11 */ diff --git a/src/target/stm32f1.c b/src/target/stm32f1.c index 76bfb1a..13425d1 100644 --- a/src/target/stm32f1.c +++ b/src/target/stm32f1.c @@ -97,7 +97,9 @@ static int stm32f1_flash_write(struct target_flash *f, #define FLASHSIZE 0x1FFFF7E0 #define FLASHSIZE_F0 0x1FFFF7CC - +// +#include "stm32f1_ch32.c" +// static void stm32f1_add_flash(target *t, uint32_t addr, size_t length, size_t erasesize) { diff --git a/src/target/target_internal.h b/src/target/target_internal.h index 17f9580..b92e141 100644 --- a/src/target/target_internal.h +++ b/src/target/target_internal.h @@ -173,6 +173,7 @@ int tc_system(target *t, target_addr cmd, size_t cmdlen); /* Probe for various targets. * Actual functions implemented in their respective drivers. */ +bool ch32f1_probe(target *t); // will catch all the clones bool gd32f1_probe(target *t); bool stm32f1_probe(target *t); bool stm32f4_probe(target *t);