Having a vendor-programmed unique device ID in microcontrollers is a requirement for numerous use cases. These including firmware update, many security uses, wired and wireless networking, and so on.
This survey attempts to document unique ID capabilities in a number of common (mostly) Arm Cortex-M device families.
In addition to unique IDs, any registers or fields that can be used to identify the part number are documented.
Summary of ID Sizes
Vendor | Device | Unique ID Size |
---|---|---|
Ambiq Micro | Apollo3 Blue Plus | 64-bit |
Cypress | PSoC3 | 64-bit |
Cypress | PSoC6 | 128-bit |
Nordic Semi | nRF52840 | 64-bit |
Nordic Semi | nRF5340 | 64-bit |
NXP | i.MX RT1064 | 64-bit |
NXP | LPC55S69 | 128-bit |
NXP | MK64F | 128-bit |
Silicon Labs | EFR32xG22 | 48-bit + 64-bit |
STMicro | STM32 | 96-bit |
64-bit unique ID
- 0x4002_0004: MCUCTRL_CHIPID0
- 0x4002_0008: MCUCTRL_CHIPID1
Part ID
- 0x4002_0000: MCUCTRL_CHIPPN
- 0x4002_000C: MCUCTRL_CHIPREV
- 0x4002_0010: MCUCTRL_VENDORID
64-bit unique ID:
- 0x000C_0100 - Y location of die on the wafer (row number)
- 0x000C_0101 - X location of die on the wafer (column number)
- 0x000C_0102 - Wafer Number: 1 to 24
- 0x000C_0103 - LSB of lot number/wafer start
- 0x000C_0104 - MSB of lot number/wafer start
- 0x000C_0105 - Work week: 1 to 53
- 0x000C_0106 - [7:4] Fab Number: 4 or 5 & [3:0] Year: 0 to 9
- 0x000C_0107 - Marketing part number - minor: 000 to 999
Page 1639 of the PSoC® 3 Registers TRM: http://www.cypress.com/?rID=37833
128-bit unique ID
- 0x1600_14B8: SFLASH_DEVICE_UID0-15
Not clear if this ID is programmed by Cypress or must be programmed by the customer.
Part ID
- 0xF100_0FE0: Part number[7:0]
- 0xF100_0FE4: Part number[3:0]
- 0xF100_0FE8: Revision[7:4]
- 0xF100_0FEC: Rev and Minor Revision Field[7:4]
- 0x1600_0002: Silicon ID
- 0x4021_0500: Protection state [2:0]
64-bit unique ID
- 0x1000_0060: DEVICEID[0]
- 0x1000_0064: DEVICEID[1]
Page 33 of nRF52840 Product Specification v1.1
Part ID
- 0x1000_0100: INFO.PART
- 0x1000_0104: INFO.VARIANT
- 0x1000_0108: INFO.PACKAGE
Page 34 of nRF52840 Product Specification v1.1
64-bit unique ID
- 0x00FF_0204: INFO.DEVICEID[0]
- 0x00FF_0208: INFO.DEVICEID[1]
Page 132 of nRF5340 Objective Product Specification v0.6
The FICR for the Network core at base 0x01FF_0200 also defines DEVICEID fields, but they were programmed with all 0xFs on the device that was tested.
Part ID
- 0x00FF_020C: INFO.PART
- 0x00FF_0210: INFO.VARIANT
- 0x00FF_0214: INFO.PACKAGE
Page 132 of nRF5340 Objective Product Specification v0.6
64-bit unique ID
- 0x401F_4410[31:0]: LOT_NO_ENC[31:0]
- 0x401F_4420[10:0]: LOT_NO_ENC[42:11]
- 0x401F_4420[15:11]: WAFER_NO
- 0x401F_4420[23:16]: DIE-Y-COORDINATE
- 0x401F_4420[31:24]: DIE-X-COORDINATE
2x 48-bit MAC addresses
- 0x401F_4620, 0x401F_4630 (documentation is unclear)
Part ID
- 0x401F_4430[19:16]: SI_REV
128-bit RFC4122 compliant random UUID (version 4).
0x0009_FC70-0x0009_FC7C: in flash PFR region
Page 1016 of UM11126 Rev 1.9
Part ID
- 0x4000_0FF8: SYSCON.DEVICE_ID0
- 0x4000_0FFC: SYSCON.DIEID
Page 98 of UM11126 Rev 1.9
128-bit unique ID
- 0x4004_8054: SIM_UIDH
- 0x4004_8058: SIM_UIDMH
- 0x4004_805C: SIM_UIDML
- 0x4004_8060: SIM_UIDL
Part ID
- 0x4004_8024: SIM_SDID
EUI48
- 0x4003_0040: DEVINFO_EUI48L
- 0x4003_0044: DEVINFO_EUI48H
EUI64
- 0x4003_0040: DEVINFO_EUI64L
- 0x4003_0044: DEVINFO_EUI64H
Part ID
-
0x4003_0004: DEVINFO_PART
-
0x4003_0010: DEVINFO_PKGINFO
-
0x0000_11FC: DBG_SYSID (only accessible through special DBG APB-AP)
96-bit unique ID
- UID[31:0]: X and Y coordinates on the wafer
- UID[39:32]: WAF_NUM[7:0] Wafer number (8-bit unsigned number)
- UID[63:40]: LOT_NUM[23:0] Lot number (ASCII encoded)
- UID[95:64]: LOT_NUM[55:24]
Page 2099 of RM0438 Rev 1
Apparently all STM32 devices have a similar 96-bit unique ID.