Showing results for 
Search instead for 
Did you mean: 

STM32F779 "Package Data Register" always returns the same




RM0410 says:



45.3 Package data register
Base address: 0x1FFF 7BF0
Address offset: 0x00
Read only = 0xXXXX where X is factory-programmed

Bits 15:11 Reserved, must be kept at reset value.
Bits 10:8 PGK[2:0]: Package type
0x111: STM32F767 and STM32F777 LQFP208 and TFBGA216 package
0x110: STM32F769 and STM32F779 LQFP208 and TFBGA216 package
0x101: STM32F767 and STM32F777 LQFP176 package
0x100: STM32F769 and STM32F779 LQFP176 package
0x011: WLCSP180 package
0x010: LQFP144 package
0x001: LQFP100 package
0x000: Reserved
Bits 7:0 Reserved, must be kept at reset value.

I have two custom boards here.


One with a STM32F779NI (TFBGA216 ) and one STM32F779AI (WLCSP180)

At the RM0410 it says "Base address: 0x1FFF 7BF0" but at the stm32f779xx.h it has a define "#define PACKAGE_BASE 0x1FF0F7E0UL"

When i try to check if the board has the NI or the AI on it, it returns 0x600 on both MCU types:

volatile uint32_t packagetype = *(( uint32_t *)PACKAGE_BASE) & 0x0700;


What is wrong here? How can i find out if the MCU is type NI or AI?


Thank you very much.

ST Employee

Hello @Exit0815 ,

The RM0410 Rev4 will be updated to correct the Base address: 0x1FFF 7BF0. It should be: 0x1FF0 F7E0.


When your question is answered, please close this topic by clicking "Accept as Solution".

Hello @Imen.D,


Thanks for your answer. So the stm32f779xx.h is correct.

But then there is still the problem that this returns always 0x600, with the AI and the NI MCU:

volatile uint32_t packagetype = *(( uint32_t *)PACKAGE_BASE) & 0x0700;

where PACKAGE_BASE is: 

#define PACKAGE_BASE 0x1FF0F7E0UL /*!< Package size register base address */

Am i doing something wrong?