Created
December 4, 2016 16:59
-
-
Save pingud98/251fcf22d5c74c2af8515abdd382fd1e to your computer and use it in GitHub Desktop.
How to get the Unique ID from an Arduino DUE board
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Code borrowed from http://forum.arduino.cc/index.php?topic=289190.0 | |
Awesome work Mark T!*/ | |
__attribute__ ((section (".ramfunc"))) | |
void _EEFC_ReadUniqueID( unsigned int * pdwUniqueID ) | |
{ | |
unsigned int status ; | |
/* Send the Start Read unique Identifier command (STUI) by writing the Flash Command Register with the STUI command.*/ | |
EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI; | |
do | |
{ | |
status = EFC1->EEFC_FSR ; | |
} while ( (status & EEFC_FSR_FRDY) == EEFC_FSR_FRDY ) ; | |
/* The Unique Identifier is located in the first 128 bits of the Flash memory mapping. So, at the address 0x400000-0x400003. */ | |
pdwUniqueID[0] = *(uint32_t *)IFLASH1_ADDR; | |
pdwUniqueID[1] = *(uint32_t *)(IFLASH1_ADDR + 4); | |
pdwUniqueID[2] = *(uint32_t *)(IFLASH1_ADDR + 8); | |
pdwUniqueID[3] = *(uint32_t *)(IFLASH1_ADDR + 12); | |
/* To stop the Unique Identifier mode, the user needs to send the Stop Read unique Identifier | |
command (SPUI) by writing the Flash Command Register with the SPUI command. */ | |
EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI ; | |
/* When the Stop read Unique Unique Identifier command (SPUI) has been performed, the | |
FRDY bit in the Flash Programming Status Register (EEFC_FSR) rises. */ | |
do | |
{ | |
status = EFC1->EEFC_FSR ; | |
} while ( (status & EEFC_FSR_FRDY) != EEFC_FSR_FRDY ) ; | |
} | |
void setup () | |
{ | |
Serial.begin (9600) ; | |
unsigned int adwUniqueID[5] ; | |
WDT_Disable( WDT ) ; | |
Serial.println("Reading 128 bits unique identifier \n\r" ) ; | |
_EEFC_ReadUniqueID( adwUniqueID ) ; | |
Serial.print ("ID: ") ; | |
for (byte b = 0 ; b < 4 ; b++) | |
Serial.print ((unsigned int) adwUniqueID [b], HEX) ; | |
Serial.println () ; | |
} | |
void loop() { | |
// put your main code here, to run repeatedly: | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment