Skip to content

Commit

Permalink
Add system/unique_board_id (#25)
Browse files Browse the repository at this point in the history
Co-authored-by: Luke Wren <wren6991@gmail.com>
  • Loading branch information
kilograham and Wren6991 committed Jan 31, 2021
1 parent 13f89f6 commit 744bd9f
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ App|Description
---|---
[hello_double_tap](system/hello_double_tap) | On dev boards with a reset button (but no BOOTSEL), a magic number in RAM can be used to enter the USB bootloader, when the reset button is pressed twice quickly.
[narrow_io_write](system/narrow_io_write) | Demonstrate the effects of 8-bit and 16-bit writes on a 32-bit IO register.

[unique_board_id](system/unique_board_id) | Read the 64 bit unique ID from external flash, which serves as a unique identifier for the board.
### Timer

App|Description
Expand Down
1 change: 1 addition & 0 deletions system/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ if (NOT PICO_NO_HARDWARE)
add_subdirectory(double_tap_usb_boot)
add_subdirectory(narrow_io_write)
add_subdirectory(hello_double_tap)
add_subdirectory(unique_board_id)
endif ()
14 changes: 14 additions & 0 deletions system/unique_board_id/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
add_executable(unique_board_id
unique_board_id.c
)

target_link_libraries(unique_board_id
pico_stdlib
pico_unique_id
)

# create map/bin/hex file etc.
pico_add_extra_outputs(unique_board_id)

# add url via pico_set_program_url
example_auto_set_url(unique_board_id)
32 changes: 32 additions & 0 deletions system/unique_board_id/unique_board_id.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* Copyright (c) 2021 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/

#include <stdio.h>

#include "pico/stdlib.h"
#include "pico/unique_id.h"

// RP2040 does not have a unique on-board ID, but this is a standard feature
// on the NOR flash it boots from. There is a 1:1 association between RP2040
// and the flash, so this can be used to get a 64 bit globally unique board ID
// for an RP2040-based board, including Pico.
//
// The pico_unique_id library retrieves this unique identifier during boot and
// stores it in memory, where it can be accessed at any time without
// disturbing the flash XIP hardware.

int main() {
stdio_init_all();

pico_unique_board_id_t board_id;
pico_get_unique_board_id(&board_id);

printf("Unique identifier:");
for (int i = 0; i < PICO_UNIQUE_BOARD_ID_SIZE_BYTES; ++i) {
printf(" %02x", board_id.id[i]);
}
printf("\n");
}

0 comments on commit 744bd9f

Please sign in to comment.