summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-06-08 14:34:47 +0700
committerhathach <[email protected]>2026-06-08 14:34:47 +0700
commit97480bad2ce5ddbb38be6bfe00491c49b6ea2afe (patch)
tree7bd12fb48f255758731038af42c0df160581ac3f
parent7c68545ab6bd0a2b7d4b59228d84d4c2085abae7 (diff)
stm32u0: implement board_get_unique_id from UID_BASE
Previously stm32u0 had no board_get_unique_id(), so it fell back to the weak default in hw/bsp/board.c and every board reported the placeholder USB serial 0123456789ABCDEF. HIL identifies boards by USB serial, so a non-unique serial collides on a multi-board rig. Read the 96-bit unique ID from UID_BASE, mirroring stm32u5. Verified on stm32u083nucleo: now enumerates as 300044000D5036394E373620. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
-rw-r--r--hw/bsp/stm32u0/family.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/hw/bsp/stm32u0/family.c b/hw/bsp/stm32u0/family.c
index 7bd99fba6..0d20ba43f 100644
--- a/hw/bsp/stm32u0/family.c
+++ b/hw/bsp/stm32u0/family.c
@@ -166,6 +166,19 @@ uint32_t board_button_read(void) {
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
}
+size_t board_get_unique_id(uint8_t id[], size_t max_len) {
+ (void) max_len;
+ volatile uint32_t *stm32_uuid = (volatile uint32_t *) UID_BASE;
+ uint32_t *id32 = (uint32_t *) (uintptr_t) id;
+ uint8_t const len = 12;
+
+ id32[0] = stm32_uuid[0];
+ id32[1] = stm32_uuid[1];
+ id32[2] = stm32_uuid[2];
+
+ return len;
+}
+
int board_uart_read(uint8_t* buf, int len) {
#ifdef UART_ID
int count = 0;