application: improve version description

This commit is contained in:
King Kévin 2020-03-15 14:11:55 +01:00
parent a689229acb
commit e228f1f37b
1 changed files with 89 additions and 14 deletions

View File

@ -193,54 +193,125 @@ static void command_version(void* argument)
{ {
(void)argument; // we won't use the 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 printf("firmware date: %04u-%02u-%02u\n", BUILD_YEAR, BUILD_MONTH, BUILD_DAY); // show firmware build date
puts("device family: "); puts("chip family: ");
switch (DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK) { switch (DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK) {
case 0: // DBGMCU_IDCODE is only accessible in debug mode (this is a known issue documented in STM32F10xxC/D/E Errata sheet, without workaround) 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 if ((*(uint32_t*)0x1FFFF000 & 0xFFFE0000) == 0x20000000) { // non-connectivity system memory start detected (MSP address pointing to SRAM
switch (DESIG_FLASH_SIZE) { switch (DESIG_FLASH_SIZE) {
case 16: case 16:
case 32: case 32:
puts("low-density\n"); puts("low-density");
break; break;
case 64: case 64:
case 128: case 128:
puts("medium-density\n"); puts("medium-density");
break; break;
case 256: case 256:
case 512: case 512:
puts("high-density\n"); puts("high-density");
break; break;
case 768: case 768:
case 1024: case 1024:
puts("XL-density\n"); puts("XL-density");
break; break;
default: default:
printf("unknown\n"); printf("unknown");
break; break;
} }
} else { // connectivity system memory start is at 0x1FFFB000 } else { // connectivity system memory start is at 0x1FFFB000
puts("connectivity\n"); puts("connectivity");
} }
break; break;
case 0x412: case 0x412:
puts("low-density\n"); puts("low-density");
break; break;
case 0x410: case 0x410:
puts("medium-density\n"); puts("medium-density");
break; break;
case 0x414: case 0x414:
puts("high-density\n"); puts("high-density");
break; break;
case 0x430: case 0x430:
puts("XL-density\n"); puts("XL-density");
break; break;
case 0x418: case 0x418:
puts("connectivity\n"); puts("connectivity");
break;
case 0x444:
puts("STM32F03x");
break;
case 0x445:
puts("STM32F04x");
break;
case 0x440:
puts("STM32F05x");
break;
case 0x448:
puts("STM32F07x");
break;
case 0x442:
puts("STM32F09x");
break; break;
default: default:
printf("unknown (0x%04x)\n", DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK); puts("unknown");
break; break;
} }
printf(" (DEV_ID=0x%04x)\n", DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK);
puts("chip revision: ");
const uint16_t rev_id = DBGMCU_IDCODE >> 16;
switch (DBGMCU_IDCODE & DBGMCU_IDCODE_DEV_ID_MASK) {
case 0x412:
if (0x1000 == rev_id) {
putc('A');
} else {
puts("unknown");
}
break;
case 0x410:
if (0x0000 == rev_id) {
putc('A');
} else if (0x2000 == rev_id) {
putc('B');
} else if (0x2001 == rev_id) {
putc('Z');
} else if (0x2003 == rev_id) {
puts("1/2/3/X/Y");
} else {
puts("unknown");
}
break;
case 0x414:
if (0x1000 == rev_id) {
puts("A/1");
} else if (0x1001 == rev_id) {
putc('Z');
} else if (0x1003 == rev_id) {
puts("1/2/3/X/Y");
} else {
puts("unknown");
}
break;
case 0x430:
if (0x1003 == rev_id) {
puts("A/1");
} else {
puts("unknown");
}
break;
case 0x418:
if (0x1000 == rev_id) {
putc('A');
} else if (0x1001 == rev_id) {
putc('Z');
} else {
puts("unknown");
}
break;
default:
printf("unknown");
break;
}
printf(" (REV_ID=0x%04x)\n", rev_id);
// show flash size // show flash size
puts("flash size: "); puts("flash size: ");
if (0xffff == DESIG_FLASH_SIZE) { if (0xffff == DESIG_FLASH_SIZE) {
@ -249,7 +320,11 @@ static void command_version(void* argument)
printf("%u KB\n", DESIG_FLASH_SIZE); printf("%u KB\n", DESIG_FLASH_SIZE);
} }
// display device identity // display device identity
printf("device id: %08x%08x%08x\n", DESIG_UNIQUE_ID0, DESIG_UNIQUE_ID1, DESIG_UNIQUE_ID2); printf("device id: %08x%08x%04x%04x\n", DESIG_UNIQUE_ID2, DESIG_UNIQUE_ID1, DESIG_UNIQUE_ID0 & 0xffff, DESIG_UNIQUE_ID0 >> 16);
// from RM0091 STM32F0x8 reference manual
printf("- X,Y wafer coordinate: %08x\n", DESIG_UNIQUE_ID0);
printf("- lot number: %c%c%c%c%c%c%c\n", DESIG_UNIQUE_ID2 >> 24, DESIG_UNIQUE_ID2 >> 16, DESIG_UNIQUE_ID2 >> 8, DESIG_UNIQUE_ID2 >> 0, DESIG_UNIQUE_ID1 >> 24, DESIG_UNIQUE_ID1 >> 16, DESIG_UNIQUE_ID1 >> 8);
printf("- wafer number: %u\n", DESIG_UNIQUE_ID1 & 0xff);
} }
static void command_uptime(void* argument) static void command_uptime(void* argument)