Giter VIP home page Giter VIP logo

arduinouniqueid's Introduction

ArduinoUniqueID

This Library gets the Unique ID / Manufacture Serial Number from the Atmel AVR, SAM, SAMD, and ESP Microcontroller.

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
  • Atmega2560 - 9 bytes
  • Attiny85 - 9 bytes

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

Atmel SAMD21 is used in Arduino Zero / Arduino M0.

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

  • Word 0: 0x0080A00C
  • Word 1: 0x0080A040
  • Word 2: 0x0080A044
  • Word 3: 0x0080A048

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

Tested Microcontroller

  • Atmel SAMD21 ARM Cortex-M0 - 16 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 propably 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

Installation

Examples

The library comes with examples. After installing the library you need to restart the Arduino IDE before they can be found under File > Examples > ArduinoUniqueID.


Reference

Include Library

#include <ArduinoUniqueID.h>

Variable: UniqueID & UniqueIDsize

UniqueID has UniqueIDsize bytes array of the Unique Serial ID.

for(size_t i = 0; i < UniqueIDsize; i++)
  Serial.println(UniqueID[i], HEX);

Method: UniqueIDdump

Print the hexadecimal bytes of the Unique Serial ID on the Stream.

void UniqueIDdump(Stream);

Variable: UniqueID8

UniqueID8 has the last 8 bytes array of the Unique Serial ID.

for(size_t i = 0; i < 8; i++)
  Serial.println(UniqueID8[i], HEX);

Method: UniqueID8dump

Print the last eight hexadecimal bytes of the Unique Serial ID on the Stream.

void UniqueID8dump(Stream);

Do you like this library? Please star this project on GitHub!

arduinouniqueid's People

Contributors

ricaun avatar timgremalm avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.