Skip to content

Latest commit

 

History

History
116 lines (78 loc) · 3.99 KB

MCU.md

File metadata and controls

116 lines (78 loc) · 3.99 KB

Atmel AVR Microcontroller

Unique Serial ID - Hidden Serial Number

The datasheet of the Atmega328pb chip has a section 'Serial Number' how explain every chip have a unique device ID with 10 bytes.

The datasheet of the Atmega328p chip does not say anything about the serial number, but I tested using the same Z-pointer Address on the datasheet of the Atmega328pb.

Apparently, the chip Atmega328p have a hidden serial number with 9 bytes, and others AVR Microcontroller maybe too, like the table below.

Z-pointer Address Atmega328pb Atmega328p
0x000E Byte 0 Byte 0
0x000F Byte 1 Byte 1
0x0010 Byte 2 Byte 2
0x0011 Byte 3 Byte 3
0x0012 Byte 4 Byte 4
0x0013 Byte 5 Byte 5
0x0014 Byte 6 -
0x0015 Byte 7 Byte 6
0x0016 Byte 8 Byte 7
0x0017 Byte 9 Byte 8

Tested Microcontroller

  • Atmega328pb - 10 bytes
  • Atmega328p - 9 bytes (Not Unique)
  • Atmega2560 - 9 bytes (Not Unique)
  • Attiny85 - 9 bytes (Not Unique)

Disclaimer

The Atmega328p, Atmega2560, Attiny85 does not have a 'Serial Number' on the datasheet, this mean it's possible to have two microcontroller with the same UniqueId.

Atmel SAM ARM Microcontroller

Atmel SAM3X8E is used in Arduino Due.

The Unique Identifier is located in the first 128 bits of the Flash memory mapping. So, at the address 0x400000-0x400003.

"Each device integrates its own 128-bit unique identifier. These bits are factory configured and cannot be changed by the user. The ERASE pin has no effect on the unique identifier." Datasheet Section 7.2.3.7

Tested Microcontroller

  • Atmel SAM3X8E ARM Cortex-M3 - 16 bytes

Atmel SAMD ARM Microcontroller

Each device has a unique 128-bit serial number which is a concatenation of four 32-bit words contained at the following addresses:

- SAMD21 SAMD51
Word 0 0x0080A00C 0x008061FC
Word 1 0x0080A040 0x00806010
Word 2 0x0080A044 0x00806014
Word 3 0x0080A048 0x00806018

The uniqueness of the serial number is guaranteed only when using all 128 bits.

Tested Microcontroller

STM32 Microcontroller

STM32 32-bit Arm Cortex MCUs has a unique 96-bit serial number which is a concatenation of three 32-bit words, the address is different depending on the microcontroller.

The Arduino Core STM32 has the functions HAL_GetUIDw0(), HAL_GetUIDw1() and HAL_GetUIDw2() for 96-bit UID.

Tested Microcontroller

  • STM32F103C8 (BluePill Board) - 12 bytes
  • STM32L073RZ (Nucleo L073RZ) - 12 bytes

Espressif ESP Microcontroller

ESP microcontroller has basically two versions, ESP8266 and ESP32, each one has a specific function to request the chip id.

  • ESP8266 - ESP.getChipId() - 4 bytes
  • ESP32 - ESP.getEfuseMac() - 6 bytes
UniqueID ESP8266 ESP32
Byte 0 Byte 0 Byte 5
Byte 1 Byte 1 Byte 4
Byte 2 Byte 2 Byte 3
Byte 3 Byte 3 Byte 2
Byte 4 - Byte 1
Byte 5 - Byte 0

To make the variable UniqueID8 to work probably the library uses the default bytes to 0x00.

UniqueID8 ESP8266 ESP32
Byte 0 0x00 0x00
Byte 1 0x00 0x00
Byte 2 0x00 Byte 5
Byte 3 0x00 Byte 4
Byte 4 Byte 0 Byte 3
Byte 5 Byte 1 Byte 2
Byte 6 Byte 2 Byte 1
Byte 7 Byte 3 Byte 0

Tested Microcontroller

  • ESP8266 - 4 bytes
  • ESP32 - 6 bytes

Teensy

Todo

Raspberry Pi Pico - RP2040

Todo