Silicon Fingerprinting for Unique Device Identification

Every development board has a unique identifier set by the manufacturer that can’t be changed. Could you imagine if it could? You could create clones of the same boards just by flashing the same firmware. A bad actor could use a leaked firmware image to spoof your hardware.

Instead, the unique, factory-programmed identifier remains immutable. This guide explains how to read your unique device ID on the Texas Instruments CC2340 series and Nordic Semiconductor 54 L series development boards.

Why You Need a Hardware ID

Every microcontroller leaves the factory with a unique identifier burned into its non-volatile memory. This ID acts like a digital fingerprint, where no two chips are alike.

Using this hardware-level ID helps you solve three specific problems. First, it simplifies inventory management. You can map a device ID to a physical QR code or sticker on the device enclosure. Second, it improves cloud connectivity. You can use the ID as a default client name for BLE or Wi-Fi connections. Third, it prevents firmware cloning. You can write logic to check whether the device ID matches a whitelist before the application starts.

Locating the ID

TI CC2340R5

The TI CC2340R5 stores its device ID as a 64-bit value in the Factory Configuration area of device memory. You can use the DriverLib API to access these registers without calculating raw memory addresses.

Nordic nRF54L15

Nordic nRF54L15 stores its device ID also as a 64-bit value in the Factory Information Configuration Registers. You can use the nRF Connect SDK to easily read these registers through the hardware abstraction layer.

Reading the Device ID in Code

The Nordic nRF54L15 makes it easy to read the device ID in your code. Add the following code to your main application file to retrieve your board’s 64-bit unique ID and print it to the console.

#include <zephyr/kernel.h>
#include <hal/nrf_ficr.h>

void main(void) {
    /* Access the FICR registers directly */
    uint32_t id_low = nrf_ficr_deviceid_get(NRF_FICR, 0);
    uint32_t id_high = nrf_ficr_deviceid_get(NRF_FICR, 1);

    /* Print the 64-bit fingerprint as hex */
    printk("Device Fingerprint: 0x%08X%08X\n", id_high, id_low);
}

tutorial16_output

This code accesses the silicon-level registers to pull the device ID without relying on any software-defined variables. Even if you flash this same code to ten different Nordic boards, each one will print a different hex string to the terminal.

Practical Applications for Fingerprinting

Once you can read your board’s silicon fingerprint, you can use it to secure your boot process. You would create a simple hashing function that combines the device ID with a private key, and tell the firmware to check this hash at startup. If the firmware is copied to a different chip, the device ID will change, the hash will fail, and the device will refuse to boot.

You can also use your board’s device ID to automate board bring-up. For example, when running automated functional tests, you can configure your script to read the device ID and tag the log file. This will automatically label each test result with the specific board that ran the test.

Wrapping Up

Silicon fingerprints are the most robust identities for embedded systems. By reading the built-in device ID on your development boards, you can customize your generic applications to develop unique, identifiable firmware systems. Whether you are using TI or Nordic silicon, these identifiers stay permanent and tamper-resistant.

Before you deploy your next fleet of sensors, implement a device ID check. It is a small addition to your codebase that will greatly improve your production workflow and security. If you’re building devices that report back over BLE or satellite, the Hubble device SDK documentation covers how to integrate device identity into your connectivity layer from day one.


Frequently Asked Questions

What is a silicon fingerprint on a microcontroller? A silicon fingerprint is a unique, factory-programmed identifier burned into a microcontroller’s non-volatile memory during manufacturing. It cannot be changed or cloned, making it a reliable way to distinguish one device from another even when running identical firmware.

How do I read the device ID on a Nordic nRF54L15? The nRF54L15 stores its 64-bit device ID in the Factory Information Configuration Registers (FICR). You can read it using the nrf_ficr_deviceid_get() function from the nRF HAL, passing index 0 for the lower 32 bits and index 1 for the upper 32 bits.

Can I use a hardware device ID to prevent firmware cloning? Yes. You can write firmware logic that reads the device ID at boot and compares it against a whitelist or validates a hash derived from the ID and a private key. If the firmware is copied to a different chip, the ID won’t match and the device can refuse to start.


Hubble Network connects to your devices directly from satellite—so when you’re managing firmware across a fleet, device identity matters from the first byte. See how it works →