MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
PUF: Physical Unclonable Function

Overview

The MCUXpresso SDK provides a peripheral driver for the Physical Unclonable Function (PUF) module of MCUXpresso SDK devices. The PUF controller provides a secure key storage without injecting or provisioning device unique PUF root key.

Blocking synchronous APIs are provided for generating the activation code, intrinsic key generation, storing and reconstructing keys using PUF hardware. The PUF operations are complete (and results are made availabe for further usage) when a function returns. When called, these functions do not return until an PUF operation is complete. These functions use main CPU for simple polling loops to determine operation complete or error status. The driver functions are not re-entrant. These functions provide typical interface to upper layer or application software.

PUF Driver Initialization and deinitialization

PUF Driver is initialized by calling the PUF_Init() function, it resets the PUF module, enables it's clock and enables power to PUF SRAM. PUF Driver is deinitialized by calling the PUF_Deinit() function, it disables PUF module clock, asserts peripheral reset and disables power to PUF SRAM.

Comments about API usage in RTOS

PUF operations provided by this driver are not re-entrant. Thus, application software shall ensure the PUF module operation is not requested from different tasks or interrupt service routines while an operation is in progress.

Comments about API usage in interrupt handler

All APIs can be used from interrupt handler although execution time shall be considered (interrupt latency of equal and lower priority interrupts increases).

PUF Driver Examples

Simple examples

Refer to the driver examples codes located at <SDK_ROOT>/boards/<BOARD>/driver_examples/puf

Macros

#define PUF_GET_KEY_CODE_SIZE_FOR_KEY_SIZE(x)   ((160u + (((((x) << 3) + 255u) >> 8) << 8)) >> 3)
 Get Key Code size in bytes from key size in bytes at compile time. More...
 

Enumerations

enum  puf_key_slot_t {
  kPUF_KeySlot0 = 0U,
  kPUF_KeySlot1 = 1U
}
 PUF key slot. More...
 
enum  
 PUF status return codes. More...
 

Driver version

#define FSL_PUF_DRIVER_VERSION   (MAKE_VERSION(2, 1, 3))
 PUF driver version. More...
 

Macro Definition Documentation

#define FSL_PUF_DRIVER_VERSION   (MAKE_VERSION(2, 1, 3))

Version 2.1.3.

Current version: 2.1.3

Change log:

  • 2.0.0
    • Initial version.
  • 2.0.1
    • Fixed puf_wait_usec function optimization issue.
  • 2.0.2
    • Add PUF configuration structure and support for PUF SRAM controller. Remove magic constants.
  • 2.0.3
    • Fix MISRA C-2012 issue.
  • 2.1.0
    • Align driver with PUF SRAM controller registers on LPCXpresso55s16.
    • Update initizalition logic .
  • 2.1.1
    • Fix ARMGCC build warning .
  • 2.1.2
    • Update: Add automatic big to little endian swap for user (pre-shared) keys destinated to secret hardware bus (PUF key index 0).
  • 2.1.3
    • Fix MISRA C-2012 issue.
#define PUF_GET_KEY_CODE_SIZE_FOR_KEY_SIZE (   x)    ((160u + (((((x) << 3) + 255u) >> 8) << 8)) >> 3)

Enumeration Type Documentation

Enumerator
kPUF_KeySlot0 

PUF key slot 0.

kPUF_KeySlot1 

PUF key slot 1.

anonymous enum