application: improve familly detection

This commit is contained in:
King Kévin 2020-03-08 18:18:27 +01:00
parent 1ac92ec4ac
commit 7030480482
1 changed files with 27 additions and 9 deletions

View File

@ -193,16 +193,34 @@ static void command_version(void* argument)
{
(void)argument; // we won't use the argument
printf("firmware date: %04u-%02u-%02u\n", BUILD_YEAR, BUILD_MONTH, BUILD_DAY); // show firmware build date
// get device identifier (DEV_ID)
// 0x412: low-density, 16-32 kB flash
// 0x410: medium-density, 64-128 kB flash
// 0x414: high-density, 256-512 kB flash
// 0x430: XL-density, 768-1024 kB flash
// 0x418: connectivity
puts("device family: ");
switch (DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK) {
case 0: // this is a known issue document in STM32F10xxC/D/E Errata sheet, without workaround
puts("unreadable\n");
case 0: // DBGMCU_IDCODE is only accessible in debug mode (this is a known issue documented in STM32F10xxC/D/E Errata sheet, without workaround)
if ((*(uint32_t*)0x1FFFF000 & 0xFFFE0000) == 0x20000000) { // non-connectivity system memory start detected (MSP address pointing to SRAM
switch (DESIG_FLASH_SIZE) {
case 16:
case 32:
puts("low-density\n");
break;
case 64:
case 128:
puts("medium-density\n");
break;
case 256:
case 512:
puts("high-density\n");
break;
case 768:
case 1024:
puts("XL-density\n");
break;
default:
printf("unknown\n");
break;
}
} else { // connectivity system memory start is at 0x1FFFB000
puts("connectivity\n");
}
break;
case 0x412:
puts("low-density\n");
@ -220,7 +238,7 @@ static void command_version(void* argument)
puts("connectivity\n");
break;
default:
puts("unknown\n");
printf("unknown (0x%04x)\n", DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK);
break;
}
// show flash size