Skip to content

Instantly share code, notes, and snippets.

@flit
Last active March 5, 2024 08:42
Show Gist options
  • Save flit/c44980d20586460bb09b284c891f9ae6 to your computer and use it in GitHub Desktop.
Save flit/c44980d20586460bb09b284c891f9ae6 to your computer and use it in GitHub Desktop.
Survey of Arm Cortex-M MCU unique ID support

MCU Unique ID Survey

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

Ambiq Micro Apollo3 Blue Plus

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

Cypress PSoC3

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

Cypress PSoC6

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]

Nordic nRF52840

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

Nordic nRF5340

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

NXP i.MX RT1064

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

NXP LPC55S69

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

NXP Kinetis MK64F

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

Silicon Labs EFR32xG22

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)

STMicroelectronics STM32L5

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment