Skip to content

Commit

Permalink
Merge pull request #2241 from adamgreig/stm32-uid
Browse files Browse the repository at this point in the history
STM32: Add UID driver
  • Loading branch information
Dirbaio authored Dec 3, 2023
2 parents 696c703 + 198ef81 commit b867f9b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
2 changes: 2 additions & 0 deletions embassy-stm32/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ pub mod sai;
pub mod sdmmc;
#[cfg(spi)]
pub mod spi;
#[cfg(uid)]
pub mod uid;
#[cfg(usart)]
pub mod usart;
#[cfg(usb)]
Expand Down
29 changes: 29 additions & 0 deletions embassy-stm32/src/uid.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/// Get this device's unique 96-bit ID.
pub fn uid() -> &'static [u8; 12] {
unsafe { &*crate::pac::UID.uid(0).as_ptr().cast::<[u8; 12]>() }
}

/// Get this device's unique 96-bit ID, encoded into a string of 24 hexadecimal ASCII digits.
pub fn uid_hex() -> &'static str {
unsafe { core::str::from_utf8_unchecked(uid_hex_bytes()) }
}

/// Get this device's unique 96-bit ID, encoded into 24 hexadecimal ASCII bytes.
pub fn uid_hex_bytes() -> &'static [u8; 24] {
const HEX: &[u8; 16] = b"0123456789ABCDEF";
static mut UID_HEX: [u8; 24] = [0; 24];
static mut LOADED: bool = false;
critical_section::with(|_| unsafe {
if !LOADED {
let uid = uid();
for (idx, v) in uid.iter().enumerate() {
let lo = v & 0x0f;
let hi = (v & 0xf0) >> 4;
UID_HEX[idx * 2] = HEX[hi as usize];
UID_HEX[idx * 2 + 1] = HEX[lo as usize];
}
LOADED = true;
}
});
unsafe { &UID_HEX }
}

0 comments on commit b867f9b

Please sign in to comment.