Skip to main content
Jeff Herman
Visitor II
Jan 21, 2019 5:10 PM UTC
Question

On the STM32F777 I am trying to determine if there is a readable silicon revision level.

 I realize that I can read the ID Code Register at 0xE0042000, but I am not sure how the silicon revision is indicated for a specific device. Is it readable though the codes on the device itself?

This topic has been closed for replies.

4 replies

Tesla DeLorean
Guru
Jan 21, 2019 5:22 PM UTC
//****************************************************************************
 
void CORECheck(void) // sourcer32@gmail.com
{
 uint32_t cpuid = SCB->CPUID;
 uint32_t var, pat;
 
 printf("CPUID %08X DEVID %03X REVID %04X\n", cpuid, DBGMCU->IDCODE & 0xFFF, (DBGMCU->IDCODE >> 16) & 0xFFFF);
 
 pat = (cpuid & 0x0000000F);
 var = (cpuid & 0x00F00000) >> 20;
 
 if ((cpuid & 0xFF000000) == 0x41000000) // ARM
 {
 switch((cpuid & 0x0000FFF0) >> 4)
 {
 case 0xC20 : printf("Cortex M0 r%dp%d\n", var, pat); break;
 case 0xC60 : printf("Cortex M0+ r%dp%d\n", var, pat); break;
 case 0xC21 : printf("Cortex M1 r%dp%d\n", var, pat); break;
 case 0xC23 : printf("Cortex M3 r%dp%d\n", var, pat); break;
 case 0xC24 : printf("Cortex M4 r%dp%d\n", var, pat); break;
 case 0xC27 : printf("Cortex M7 r%dp%d\n", var, pat); break;
 
 default : printf("Unknown CORE\n");
 }
 }
 else
 printf("Unknown CORE IMPLEMENTER\n");
}
 
//****************************************************************************
 
// FPU Programmer Model
// http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0489b/Chdhfiah.html
 
void FPUCheck(void) // sourcer32@gmail.com
{
 uint32_t mvfr0;
 
 printf("%08X %08X %08X\n%08X %08X %08X\n",
 *(volatile uint32_t *)0xE000EF34, // FPCCR 0xC0000000
 *(volatile uint32_t *)0xE000EF38, // FPCAR
 *(volatile uint32_t *)0xE000EF3C, // FPDSCR
 *(volatile uint32_t *)0xE000EF40, // MVFR0 0x10110021 vs 0x10110221
 *(volatile uint32_t *)0xE000EF44, // MVFR1 0x11000011 vs 0x12000011
 *(volatile uint32_t *)0xE000EF48); // MVFR2 0x00000040
 
 mvfr0 = *(volatile uint32_t *)0xE000EF40;
 
 switch(mvfr0)
 {
 case 0x00000000 : puts("No FPU"); break;
 case 0x10110021 : puts("FPU-S Single-precision only"); break;
 case 0x10110221 : puts("FPU-D Single-precision and Double-precision"); break;
 default : puts("Unknown FPU");
 }
}
 
//****************************************************************************
 
void IDCODECheck(void) // sourcer32@gmail.com
{
 uint32_t idcode = DBGMCU->IDCODE & 0xFFF;
 
 switch(idcode)
 {
 case 0x423 :
 case 0x433 : printf("STM32F401\n"); break;
 case 0x431 : printf("STM32F411\n"); break;
 case 0x411 : printf("STM32F457 or F20x\n"); break;
 case 0x413 : printf("STM32F405 or F407\n"); break;
 case 0x419 : printf("STM32F429 or F439\n"); break;
 case 0x421 : printf("STM32F446\n"); break;
 case 0x434 : printf("STM32F469\n"); break;
 case 0x441 : printf("STM32F412\n"); break;
 case 0x440 : printf("STM32F030x8\n"); break;
 case 0x442 : printf("STM32F030xC\n"); break;
 case 0x444 : printf("STM32F030x4 or F030x6\n"); break;
 case 0x445 : printf("STM32F070x6\n"); break;
 case 0x448 : printf("STM32F070x8\n"); break;
 case 0x417 : printf("STM32L0 Cat 3\n"); break;
 case 0x447 : printf("STM32L0 Cat 5\n"); break;
 case 0x435 : printf("STM32L43xxx or L44xxx\n"); break;
 case 0x415 : printf("STM32L475xx, L476xx or L486xx\n"); break;
 case 0x461 : printf("STM32L496xx or L4A6xx\n"); break;
 case 0x462 : printf("STM32L45xxx or L46xxx\n"); break;
 case 0x470 : printf("STM32L4Rxxx or L4Sxxx\n"); break;
 case 0x449 : printf("STM32F74xxx or F75xxx\n"); break;
 case 0x451 : printf("STM32F76xxx or F77xxx\n"); break;
 case 0x452 : printf("STM32F72xxx or F73xxx\n"); break;
 case 0x450 : printf("STM32H7xx\n"); break;
 default : printf("Unknown STM32\n");
 }
}
 
//****************************************************************************

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Guru
Jan 21, 2019 5:31 PM UTC

From the F746

  1. STM32 1024 KB FLASH, 320 KB RAM, 002B003A-32345109-37343138 UNIQUE
  2. CPUID 410FC271 DEVID 449
  3. Cortex M7 r0p1
  4. C0000000 FFFFFFF8 00000000
  5. 10110021 11000011 00000040
  6. FPU-S Single-precision only

From the F767

  1. STM32 2048 KB FLASH, 512 KB RAM, 001B002A-33355109-36343130 UNIQUE
  2. CPUID 411FC270 DEVID 451
  3. Cortex M7 r1p0
  4. C0000000 FFFFFFF8 00000000
  5. 10110221 12000011 00000040
  6. FPU-D Single-precision and Double-precision

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
Tesla DeLorean
Guru
Jan 22, 2019 2:14 AM UTC

A cleaner list of CM7 parts in ST's portfolio

H743XI Z
CPUID 411FC271 DEVID 450 REVID 1001
Cortex M7 r1p1
STM32H7xx
C0000018 20000F48 00000000
10110221 12000011 00000040
FPU-D Single-precision and Double-precision
 
F746ZG
CPUID 410FC271 DEVID 449 REVID 1001
Cortex M7 r0p1
STM32F74xxx or F75xxx
C0000000 FFFFFFF8 00000000
10110021 11000011 00000040
FPU-S Single-precision only
 
F767ZI
CPUID 411FC270 DEVID 451 REVID 1000
Cortex M7 r1p0
STM32F76xxx or F77xxx
C0000000 FFFFFFF8 00000000
10110221 12000011 00000040
FPU-D Single-precision and Double-precision
 
F722ZE
CPUID 411FC271 DEVID 452 REVID 1000
Cortex M7 r1p1
STM32F72xxx or F73xxx
C0000000 FFFFFFF8 00000000
10110021 11000011 00000040
FPU-S Single-precision only

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
waclawek.jan
Super User
Jan 21, 2019 10:39 PM UTC

0690X000006DBIhQAO.png