From a35b8f929aa18bae9af98746de50ce4a017a35d8 Mon Sep 17 00:00:00 2001 From: Christoph Kottke Date: Sat, 28 Nov 2020 08:50:41 +0100 Subject: [PATCH 1/2] Fixing Arduino UUID support --- IODue.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/IODue.cpp b/IODue.cpp index b4e0700..1e83902 100644 --- a/IODue.cpp +++ b/IODue.cpp @@ -299,15 +299,19 @@ uint8_t CIO::getCPU() const // Code taken from https://github.com/emagii/at91sam3s/blob/master/examples/eefc_uniqueid/main.c void CIO::getUDID(uint8_t* buffer) { - EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI; - - ::memcpy(buffer, (void *)IFLASH_ADDR, 16U); - - EFC->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI; + uint32_t status; + EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI; do { - status = EFC->EEFC_FSR ; - } while ((status & EEFC_FSR_FRDY) != EEFC_FSR_FRDY); + status = EFC1->EEFC_FSR; + } while ( (status & EEFC_FSR_FRDY) == EEFC_FSR_FRDY ); + + ::memcpy(buffer, (void *)IFLASH1_ADDR, 16U); + + EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI; + do { + status = EFC1->EEFC_FSR; + } while ( (status & EEFC_FSR_FRDY) != EEFC_FSR_FRDY ); } #endif From ff39a9031b41d9d80ec29d1007584bb2d6240967 Mon Sep 17 00:00:00 2001 From: Christoph Kottke Date: Sat, 28 Nov 2020 16:01:41 +0100 Subject: [PATCH 2/2] Fixing Arduino Unique Identifier byte order --- IODue.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/IODue.cpp b/IODue.cpp index 1e83902..f2e7b36 100644 --- a/IODue.cpp +++ b/IODue.cpp @@ -306,7 +306,12 @@ void CIO::getUDID(uint8_t* buffer) status = EFC1->EEFC_FSR; } while ( (status & EEFC_FSR_FRDY) == EEFC_FSR_FRDY ); - ::memcpy(buffer, (void *)IFLASH1_ADDR, 16U); + for (uint8_t i = 0; i < 16; i+=4) { + buffer[i + 0] = *(uint32_t *)(IFLASH1_ADDR + i) >> 24; + buffer[i + 1] = *(uint32_t *)(IFLASH1_ADDR + i) >> 16; + buffer[i + 2] = *(uint32_t *)(IFLASH1_ADDR + i) >> 8; + buffer[i + 3] = *(uint32_t *)(IFLASH1_ADDR + i) >> 0; + } EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI; do {