This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 0e24829e8c7 arch/arm/nrf52,nrf53,nrf54l: build the EUI-64 next to the 
unique ID
0e24829e8c7 is described below

commit 0e24829e8c7c64b345c32f5f463ee69daf04292b
Author: raiden00pl <[email protected]>
AuthorDate: Thu Oct 22 16:48:02 2026 +0200

    arch/arm/nrf52,nrf53,nrf54l: build the EUI-64 next to the unique ID
    
    The IEEE 802.15.4 radio drivers built the extended address from the
    FICR device ID themselves.  Keep it with the unique ID, so a board with
    another radio gets the same kind of address.
    
    Assisted-by: Claude Code
    Signed-off-by: raiden00pl <[email protected]>
---
 arch/arm/src/nrf52/nrf52_ieee802154.c   | 27 ++-------------------------
 arch/arm/src/nrf52/nrf52_uid.c          | 24 ++++++++++++++++++++++++
 arch/arm/src/nrf52/nrf52_uid.h          |  4 ++++
 arch/arm/src/nrf53/nrf53_ieee802154.c   | 27 ++-------------------------
 arch/arm/src/nrf53/nrf53_uid.c          | 24 ++++++++++++++++++++++++
 arch/arm/src/nrf53/nrf53_uid.h          |  4 ++++
 arch/arm/src/nrf54l/nrf54l_ieee802154.c | 27 ++-------------------------
 arch/arm/src/nrf54l/nrf54l_uid.c        | 24 ++++++++++++++++++++++++
 arch/arm/src/nrf54l/nrf54l_uid.h        |  4 ++++
 9 files changed, 90 insertions(+), 75 deletions(-)

diff --git a/arch/arm/src/nrf52/nrf52_ieee802154.c 
b/arch/arm/src/nrf52/nrf52_ieee802154.c
index c79dc69ffac..fad5a0a4ded 100644
--- a/arch/arm/src/nrf52/nrf52_ieee802154.c
+++ b/arch/arm/src/nrf52/nrf52_ieee802154.c
@@ -36,7 +36,7 @@
 #include <nuttx/mm/iob.h>
 
 #include "arm_internal.h"
-#include "hardware/nrf52_ficr.h"
+#include "nrf52_uid.h"
 
 #include "nrf52_ieee802154_trace.h"
 
@@ -297,29 +297,6 @@ static int nrf52_radioi8_bind(struct ieee802154_radio_s 
*radio,
   return OK;
 }
 
-/****************************************************************************
- * Name: nrf52_radioi8_eui64
- *
- * Description:
- *   EUI-64 from the Nordic OUI and the FICR device identifier.
- *
- ****************************************************************************/
-
-static void nrf52_radioi8_eui64(uint8_t *eaddr)
-{
-  uint32_t id0 = getreg32(NRF52_FICR_DEVICEID0);
-  uint32_t id1 = getreg32(NRF52_FICR_DEVICEID1);
-
-  eaddr[0] = 0xf4;
-  eaddr[1] = 0xce;
-  eaddr[2] = 0x36;
-  eaddr[3] = id1 & 0xff;
-  eaddr[4] = (id1 >> 8) & 0xff;
-  eaddr[5] = (id1 >> 16) & 0xff;
-  eaddr[6] = (id1 >> 24) & 0xff;
-  eaddr[7] = id0 & 0xff;
-}
-
 /****************************************************************************
  * Name: nrf52_radioi8_reset
  *
@@ -346,7 +323,7 @@ static int nrf52_radioi8_reset(struct ieee802154_radio_s 
*radio)
 
   /* Unique default extended address */
 
-  nrf52_radioi8_eui64(dev->state.addr.eaddr);
+  nrf52_eui64(dev->state.addr.eaddr);
 
   /* Initialize radio in IEEE 802.15.4 mode */
 
diff --git a/arch/arm/src/nrf52/nrf52_uid.c b/arch/arm/src/nrf52/nrf52_uid.c
index 9e55a2017fc..8a4e573b499 100644
--- a/arch/arm/src/nrf52/nrf52_uid.c
+++ b/arch/arm/src/nrf52/nrf52_uid.c
@@ -49,3 +49,27 @@ void nrf52_get_uniqueid(uint8_t uniqueid[8])
   uniqueid[6] = (uint8_t)((uid1 >> 16) & 0xff);
   uniqueid[7] = (uint8_t)((uid1 >> 24) & 0xff);
 }
+
+/****************************************************************************
+ * Name: nrf52_eui64
+ *
+ * Description:
+ *   EUI-64 from the Nordic OUI and the device identifier.
+ *
+ ****************************************************************************/
+
+void nrf52_eui64(uint8_t eaddr[8])
+{
+  uint8_t uid[8];
+
+  nrf52_get_uniqueid(uid);
+
+  eaddr[0] = 0xf4;
+  eaddr[1] = 0xce;
+  eaddr[2] = 0x36;
+  eaddr[3] = uid[4];
+  eaddr[4] = uid[5];
+  eaddr[5] = uid[6];
+  eaddr[6] = uid[7];
+  eaddr[7] = uid[0];
+}
diff --git a/arch/arm/src/nrf52/nrf52_uid.h b/arch/arm/src/nrf52/nrf52_uid.h
index 2157c48cd6d..92565329129 100644
--- a/arch/arm/src/nrf52/nrf52_uid.h
+++ b/arch/arm/src/nrf52/nrf52_uid.h
@@ -35,4 +35,8 @@
 
 void nrf52_get_uniqueid(uint8_t uniqueid[8]);
 
+/* EUI-64 from the Nordic OUI and the device identifier */
+
+void nrf52_eui64(uint8_t eaddr[8]);
+
 #endif /* __ARCH_ARM_SRC_NRF52_NRF52_UID_H */
diff --git a/arch/arm/src/nrf53/nrf53_ieee802154.c 
b/arch/arm/src/nrf53/nrf53_ieee802154.c
index 6abb37db573..9445370be7f 100644
--- a/arch/arm/src/nrf53/nrf53_ieee802154.c
+++ b/arch/arm/src/nrf53/nrf53_ieee802154.c
@@ -36,7 +36,7 @@
 #include <nuttx/mm/iob.h>
 
 #include "arm_internal.h"
-#include "hardware/nrf53_ficr.h"
+#include "nrf53_uid.h"
 
 #include "nrf53_ieee802154_trace.h"
 
@@ -297,29 +297,6 @@ static int nrf53_radioi8_bind(struct ieee802154_radio_s 
*radio,
   return OK;
 }
 
-/****************************************************************************
- * Name: nrf53_radioi8_eui64
- *
- * Description:
- *   EUI-64 from the Nordic OUI and the FICR device identifier.
- *
- ****************************************************************************/
-
-static void nrf53_radioi8_eui64(uint8_t *eaddr)
-{
-  uint32_t id0 = getreg32(NRF53_FICR_INFO_DEVICEID0);
-  uint32_t id1 = getreg32(NRF53_FICR_INFO_DEVICEID1);
-
-  eaddr[0] = 0xf4;
-  eaddr[1] = 0xce;
-  eaddr[2] = 0x36;
-  eaddr[3] = id1 & 0xff;
-  eaddr[4] = (id1 >> 8) & 0xff;
-  eaddr[5] = (id1 >> 16) & 0xff;
-  eaddr[6] = (id1 >> 24) & 0xff;
-  eaddr[7] = id0 & 0xff;
-}
-
 /****************************************************************************
  * Name: nrf53_radioi8_reset
  *
@@ -346,7 +323,7 @@ static int nrf53_radioi8_reset(struct ieee802154_radio_s 
*radio)
 
   /* Unique default extended address */
 
-  nrf53_radioi8_eui64(dev->state.addr.eaddr);
+  nrf53_eui64(dev->state.addr.eaddr);
 
   /* Initialize radio in IEEE 802.15.4 mode */
 
diff --git a/arch/arm/src/nrf53/nrf53_uid.c b/arch/arm/src/nrf53/nrf53_uid.c
index 6ed711962c5..3088469c1db 100644
--- a/arch/arm/src/nrf53/nrf53_uid.c
+++ b/arch/arm/src/nrf53/nrf53_uid.c
@@ -51,3 +51,27 @@ void nrf53_get_uniqueid(uint8_t uniqueid[8])
   uniqueid[6] = (uint8_t)((uid1 >> 16) & 0xff);
   uniqueid[7] = (uint8_t)((uid1 >> 24) & 0xff);
 }
+
+/****************************************************************************
+ * Name: nrf53_eui64
+ *
+ * Description:
+ *   EUI-64 from the Nordic OUI and the device identifier.
+ *
+ ****************************************************************************/
+
+void nrf53_eui64(uint8_t eaddr[8])
+{
+  uint8_t uid[8];
+
+  nrf53_get_uniqueid(uid);
+
+  eaddr[0] = 0xf4;
+  eaddr[1] = 0xce;
+  eaddr[2] = 0x36;
+  eaddr[3] = uid[4];
+  eaddr[4] = uid[5];
+  eaddr[5] = uid[6];
+  eaddr[6] = uid[7];
+  eaddr[7] = uid[0];
+}
diff --git a/arch/arm/src/nrf53/nrf53_uid.h b/arch/arm/src/nrf53/nrf53_uid.h
index 349b69caee1..4ecedbe85df 100644
--- a/arch/arm/src/nrf53/nrf53_uid.h
+++ b/arch/arm/src/nrf53/nrf53_uid.h
@@ -35,4 +35,8 @@
 
 void nrf53_get_uniqueid(uint8_t uniqueid[8]);
 
+/* EUI-64 from the Nordic OUI and the device identifier */
+
+void nrf53_eui64(uint8_t eaddr[8]);
+
 #endif /* __ARCH_ARM_SRC_NRF53_NRF53_UID_H */
diff --git a/arch/arm/src/nrf54l/nrf54l_ieee802154.c 
b/arch/arm/src/nrf54l/nrf54l_ieee802154.c
index b04feaa49f8..58a88d1ffde 100644
--- a/arch/arm/src/nrf54l/nrf54l_ieee802154.c
+++ b/arch/arm/src/nrf54l/nrf54l_ieee802154.c
@@ -36,7 +36,7 @@
 #include <nuttx/mm/iob.h>
 
 #include "arm_internal.h"
-#include "hardware/nrf54l_ficr.h"
+#include "nrf54l_uid.h"
 
 #include "nrf54l_ieee802154_trace.h"
 
@@ -297,29 +297,6 @@ static int nrf54l_radioi8_bind(struct ieee802154_radio_s 
*radio,
   return OK;
 }
 
-/****************************************************************************
- * Name: nrf54l_radioi8_eui64
- *
- * Description:
- *   EUI-64 from the Nordic OUI and the FICR device identifier.
- *
- ****************************************************************************/
-
-static void nrf54l_radioi8_eui64(uint8_t *eaddr)
-{
-  uint32_t id0 = getreg32(NRF54L_FICR_INFO_DEVICEID(0));
-  uint32_t id1 = getreg32(NRF54L_FICR_INFO_DEVICEID(1));
-
-  eaddr[0] = 0xf4;
-  eaddr[1] = 0xce;
-  eaddr[2] = 0x36;
-  eaddr[3] = id1 & 0xff;
-  eaddr[4] = (id1 >> 8) & 0xff;
-  eaddr[5] = (id1 >> 16) & 0xff;
-  eaddr[6] = (id1 >> 24) & 0xff;
-  eaddr[7] = id0 & 0xff;
-}
-
 /****************************************************************************
  * Name: nrf54l_radioi8_reset
  *
@@ -346,7 +323,7 @@ static int nrf54l_radioi8_reset(struct ieee802154_radio_s 
*radio)
 
   /* Unique default extended address */
 
-  nrf54l_radioi8_eui64(dev->state.addr.eaddr);
+  nrf54l_eui64(dev->state.addr.eaddr);
 
   /* Initialize radio in IEEE 802.15.4 mode */
 
diff --git a/arch/arm/src/nrf54l/nrf54l_uid.c b/arch/arm/src/nrf54l/nrf54l_uid.c
index fb70aa55d29..5e3a56b01fb 100644
--- a/arch/arm/src/nrf54l/nrf54l_uid.c
+++ b/arch/arm/src/nrf54l/nrf54l_uid.c
@@ -57,3 +57,27 @@ void nrf54l_get_uniqueid(uint8_t uniqueid[8])
   uniqueid[6] = (uint8_t)((uid1 >> 16) & 0xff);
   uniqueid[7] = (uint8_t)((uid1 >> 24) & 0xff);
 }
+
+/****************************************************************************
+ * Name: nrf54l_eui64
+ *
+ * Description:
+ *   EUI-64 from the Nordic OUI and the device identifier.
+ *
+ ****************************************************************************/
+
+void nrf54l_eui64(uint8_t eaddr[8])
+{
+  uint8_t uid[8];
+
+  nrf54l_get_uniqueid(uid);
+
+  eaddr[0] = 0xf4;
+  eaddr[1] = 0xce;
+  eaddr[2] = 0x36;
+  eaddr[3] = uid[4];
+  eaddr[4] = uid[5];
+  eaddr[5] = uid[6];
+  eaddr[6] = uid[7];
+  eaddr[7] = uid[0];
+}
diff --git a/arch/arm/src/nrf54l/nrf54l_uid.h b/arch/arm/src/nrf54l/nrf54l_uid.h
index c62b520ec46..c2a4146fc3c 100644
--- a/arch/arm/src/nrf54l/nrf54l_uid.h
+++ b/arch/arm/src/nrf54l/nrf54l_uid.h
@@ -35,4 +35,8 @@
 
 void nrf54l_get_uniqueid(uint8_t uniqueid[8]);
 
+/* EUI-64 from the Nordic OUI and the device identifier */
+
+void nrf54l_eui64(uint8_t eaddr[8]);
+
 #endif /* __ARCH_ARM_SRC_NRF54L_NRF54L_UID_H */

Reply via email to