ch32f1: Differentiate CH32F103 from CKS32F103 and APM32F103 based on REV ID (upper 16 bits of DBGMCU_IDCODE)

This commit is contained in:
Jonathan Giles 2022-08-22 09:28:10 -04:00 committed by Piotr Esden-Tempski
parent a86340790d
commit 9570b7d21e
1 changed files with 11 additions and 2 deletions

View File

@ -167,8 +167,17 @@ bool ch32f1_probe(target *t)
{
if ((t->cpuid & CPUID_PARTNO_MASK) != CORTEX_M3)
return false;
const uint32_t device_id = target_mem_read32(t, DBGMCU_IDCODE) & 0x00000fffU;
if (device_id != 0x410) // only ch32f103
const uint32_t dbgmcu_idcode = target_mem_read32(t, DBGMCU_IDCODE);
const uint32_t device_id = dbgmcu_idcode & 0x00000fffU;
const uint32_t revision_id = (dbgmcu_idcode & 0xffff0000U) >> 16;
DEBUG_WARN("DBGMCU_IDCODE %x, DEVID %x, REVID %x \n", dbgmcu_idcode, device_id, revision_id);
if (device_id != 0x410) // ch32f103, cks32f103, apm32f103
return false;
if (revision_id != 0x2000) // (hopefully!) only ch32f103
return false;
// try to flock (if this fails it is not a CH32 chip)