MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Secure Non-Volatile Storage Low-Power

Overview

The MCUXpresso SDK provides a peripheral driver for the Secure Non-Volatile Storage Low-Power (SNVS-LP) module.

The SNVS_LP is a data storage subsystem. Its purpose is to store and protect system data, regardless of the main system power state. The SNVS _LP is in the always-powered-up domain, which is a separate power domain with its own power supply.

Data Structures

struct  snvs_lp_srtc_datetime_t
 Structure is used to hold the date and time. More...
 
struct  snvs_lp_srtc_config_t
 SNVS_LP config structure. More...
 

Macros

#define SNVS_ZMK_REG_COUNT   8U /* 8 Zeroizable Master Key registers. */
 Define of SNVS_LP Zeroizable Master Key registers.
 
#define SNVS_LP_MAX_TAMPER   kSNVS_ExternalTamper1
 Define of SNVS_LP Max possible tamper.
 

Enumerations

enum  snvs_lp_srtc_interrupts_t { kSNVS_SRTC_AlarmInterrupt = SNVS_LPCR_LPTA_EN_MASK }
 List of SNVS_LP interrupts. More...
 
enum  snvs_lp_srtc_status_flags_t { kSNVS_SRTC_AlarmInterruptFlag = SNVS_LPSR_LPTA_MASK }
 List of SNVS_LP flags. More...
 
enum  snvs_lp_external_tamper_t
 List of SNVS_LP external tampers.
 
enum  snvs_lp_external_tamper_status_t
 List of SNVS_LP external tampers status.
 
enum  snvs_lp_external_tamper_polarity_t
 SNVS_LP external tamper polarity.
 
enum  snvs_lp_zmk_program_mode_t {
  kSNVS_ZMKSoftwareProgram,
  kSNVS_ZMKHardwareProgram
}
 SNVS_LP Zeroizable Master Key programming mode. More...
 
enum  snvs_lp_master_key_mode_t {
  kSNVS_OTPMK = 0,
  kSNVS_ZMK = 2,
  kSNVS_CMK = 3
}
 SNVS_LP Master Key mode. More...
 

Functions

void SNVS_LP_SRTC_Init (SNVS_Type *base, const snvs_lp_srtc_config_t *config)
 Ungates the SNVS clock and configures the peripheral for basic operation. More...
 
void SNVS_LP_SRTC_Deinit (SNVS_Type *base)
 Stops the SRTC timer. More...
 
void SNVS_LP_SRTC_GetDefaultConfig (snvs_lp_srtc_config_t *config)
 Fills in the SNVS_LP config struct with the default settings. More...
 

Driver version

#define FSL_SNVS_LP_DRIVER_VERSION   (MAKE_VERSION(2, 2, 0))
 Version 2.2.0.
 

Initialization and deinitialization

void SNVS_LP_Init (SNVS_Type *base)
 Ungates the SNVS clock and configures the peripheral for basic operation. More...
 
void SNVS_LP_Deinit (SNVS_Type *base)
 Deinit the SNVS LP section. More...
 

Secure RTC (SRTC) current Time & Alarm

status_t SNVS_LP_SRTC_SetDatetime (SNVS_Type *base, const snvs_lp_srtc_datetime_t *datetime)
 Sets the SNVS SRTC date and time according to the given time structure. More...
 
void SNVS_LP_SRTC_GetDatetime (SNVS_Type *base, snvs_lp_srtc_datetime_t *datetime)
 Gets the SNVS SRTC time and stores it in the given time structure. More...
 
status_t SNVS_LP_SRTC_SetAlarm (SNVS_Type *base, const snvs_lp_srtc_datetime_t *alarmTime)
 Sets the SNVS SRTC alarm time. More...
 
void SNVS_LP_SRTC_GetAlarm (SNVS_Type *base, snvs_lp_srtc_datetime_t *datetime)
 Returns the SNVS SRTC alarm time. More...
 

Interrupt Interface

static void SNVS_LP_SRTC_EnableInterrupts (SNVS_Type *base, uint32_t mask)
 Enables the selected SNVS interrupts. More...
 
static void SNVS_LP_SRTC_DisableInterrupts (SNVS_Type *base, uint32_t mask)
 Disables the selected SNVS interrupts. More...
 
uint32_t SNVS_LP_SRTC_GetEnabledInterrupts (SNVS_Type *base)
 Gets the enabled SNVS interrupts. More...
 

Status Interface

uint32_t SNVS_LP_SRTC_GetStatusFlags (SNVS_Type *base)
 Gets the SNVS status flags. More...
 
static void SNVS_LP_SRTC_ClearStatusFlags (SNVS_Type *base, uint32_t mask)
 Clears the SNVS status flags. More...
 

Timer Start and Stop

static void SNVS_LP_SRTC_StartTimer (SNVS_Type *base)
 Starts the SNVS SRTC time counter. More...
 
static void SNVS_LP_SRTC_StopTimer (SNVS_Type *base)
 Stops the SNVS SRTC time counter. More...
 

External tampering

void SNVS_LP_EnableExternalTamper (SNVS_Type *base, snvs_lp_external_tamper_t pin, snvs_lp_external_tamper_polarity_t polarity)
 Enables the specified SNVS external tamper. More...
 
void SNVS_LP_DisableExternalTamper (SNVS_Type *base, snvs_lp_external_tamper_t pin)
 Disables the specified SNVS external tamper. More...
 
snvs_lp_external_tamper_status_t SNVS_LP_GetExternalTamperStatus (SNVS_Type *base, snvs_lp_external_tamper_t pin)
 Returns status of the specified external tamper. More...
 
void SNVS_LP_ClearExternalTamperStatus (SNVS_Type *base, snvs_lp_external_tamper_t pin)
 Clears status of the specified external tamper. More...
 

Monotonic Counter (MC)

static void SNVS_LP_EnableMonotonicCounter (SNVS_Type *base, bool enable)
 Enable or disable the Monotonic Counter. More...
 
uint64_t SNVS_LP_GetMonotonicCounter (SNVS_Type *base)
 Get the current Monotonic Counter. More...
 
static void SNVS_LP_IncreaseMonotonicCounter (SNVS_Type *base)
 Increase the Monotonic Counter. More...
 

Zeroizable Master Key (ZMK)

void SNVS_LP_WriteZeroizableMasterKey (SNVS_Type *base, uint32_t ZMKey[SNVS_ZMK_REG_COUNT])
 Write Zeroizable Master Key (ZMK) to the SNVS registers. More...
 
static void SNVS_LP_SetZeroizableMasterKeyValid (SNVS_Type *base, bool valid)
 Set Zeroizable Master Key valid. More...
 
static bool SNVS_LP_GetZeroizableMasterKeyValid (SNVS_Type *base)
 Get Zeroizable Master Key valid status. More...
 
static void SNVS_LP_SetZeroizableMasterKeyProgramMode (SNVS_Type *base, snvs_lp_zmk_program_mode_t mode)
 Set Zeroizable Master Key programming mode. More...
 
static void SNVS_LP_EnableZeroizableMasterKeyECC (SNVS_Type *base, bool enable)
 Enable or disable Zeroizable Master Key ECC. More...
 
static void SNVS_LP_SetMasterKeyMode (SNVS_Type *base, snvs_lp_master_key_mode_t mode)
 Set SNVS Master Key mode. More...
 

Data Structure Documentation

struct snvs_lp_srtc_datetime_t

Data Fields

uint16_t year
 Range from 1970 to 2099. More...
 
uint8_t month
 Range from 1 to 12. More...
 
uint8_t day
 Range from 1 to 31 (depending on month). More...
 
uint8_t hour
 Range from 0 to 23. More...
 
uint8_t minute
 Range from 0 to 59. More...
 
uint8_t second
 Range from 0 to 59. More...
 

Field Documentation

uint16_t snvs_lp_srtc_datetime_t::year
uint8_t snvs_lp_srtc_datetime_t::month
uint8_t snvs_lp_srtc_datetime_t::day
uint8_t snvs_lp_srtc_datetime_t::hour
uint8_t snvs_lp_srtc_datetime_t::minute
uint8_t snvs_lp_srtc_datetime_t::second
struct snvs_lp_srtc_config_t

This structure holds the configuration settings for the SNVS_LP peripheral. To initialize this structure to reasonable defaults, call the SNVS_LP_GetDefaultConfig() function and pass a pointer to your config structure instance.

The config struct can be made const so it resides in flash

Data Fields

bool srtcCalEnable
 true: SRTC calibration mechanism is enabled; false: No calibration is used
 
uint32_t srtcCalValue
 Defines signed calibration value for SRTC; This is a 5-bit 2's complement value, range from -16 to +15.
 

Enumeration Type Documentation

Enumerator
kSNVS_SRTC_AlarmInterrupt 

SRTC time alarm.

Enumerator
kSNVS_SRTC_AlarmInterruptFlag 

SRTC time alarm flag.

Enumerator
kSNVS_ZMKSoftwareProgram 

Software programming mode.

kSNVS_ZMKHardwareProgram 

Hardware programming mode.

Enumerator
kSNVS_OTPMK 

One Time Programmable Master Key.

kSNVS_ZMK 

Zeroizable Master Key.

kSNVS_CMK 

Combined Master Key, it is XOR of OPTMK and ZMK.

Function Documentation

void SNVS_LP_Init ( SNVS_Type *  base)
Note
This API should be called at the beginning of the application using the SNVS driver.
Parameters
baseSNVS peripheral base address
void SNVS_LP_Deinit ( SNVS_Type *  base)
Parameters
baseSNVS peripheral base address
void SNVS_LP_SRTC_Init ( SNVS_Type *  base,
const snvs_lp_srtc_config_t config 
)
Note
This API should be called at the beginning of the application using the SNVS driver.
Parameters
baseSNVS peripheral base address
configPointer to the user's SNVS configuration structure.
void SNVS_LP_SRTC_Deinit ( SNVS_Type *  base)
Parameters
baseSNVS peripheral base address
void SNVS_LP_SRTC_GetDefaultConfig ( snvs_lp_srtc_config_t config)

The default values are as follows.

* config->srtccalenable = false;
* config->srtccalvalue = 0U;
*
Parameters
configPointer to the user's SNVS configuration structure.
status_t SNVS_LP_SRTC_SetDatetime ( SNVS_Type *  base,
const snvs_lp_srtc_datetime_t datetime 
)
Parameters
baseSNVS peripheral base address
datetimePointer to the structure where the date and time details are stored.
Returns
kStatus_Success: Success in setting the time and starting the SNVS SRTC kStatus_InvalidArgument: Error because the datetime format is incorrect
void SNVS_LP_SRTC_GetDatetime ( SNVS_Type *  base,
snvs_lp_srtc_datetime_t datetime 
)
Parameters
baseSNVS peripheral base address
datetimePointer to the structure where the date and time details are stored.
status_t SNVS_LP_SRTC_SetAlarm ( SNVS_Type *  base,
const snvs_lp_srtc_datetime_t alarmTime 
)

The function sets the SRTC alarm. It also checks whether the specified alarm time is greater than the present time. If not, the function does not set the alarm and returns an error. Please note, that SRTC alarm has limited resolution because only 32 most significant bits of SRTC counter are compared to SRTC Alarm register. If the alarm time is beyond SRTC resolution, the function does not set the alarm and returns an error.

Parameters
baseSNVS peripheral base address
alarmTimePointer to the structure where the alarm time is stored.
Returns
kStatus_Success: success in setting the SNVS SRTC alarm kStatus_InvalidArgument: Error because the alarm datetime format is incorrect kStatus_Fail: Error because the alarm time has already passed or is beyond resolution
void SNVS_LP_SRTC_GetAlarm ( SNVS_Type *  base,
snvs_lp_srtc_datetime_t datetime 
)
Parameters
baseSNVS peripheral base address
datetimePointer to the structure where the alarm date and time details are stored.
static void SNVS_LP_SRTC_EnableInterrupts ( SNVS_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseSNVS peripheral base address
maskThe interrupts to enable. This is a logical OR of members of the enumeration :: _snvs_lp_srtc_interrupts
static void SNVS_LP_SRTC_DisableInterrupts ( SNVS_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseSNVS peripheral base address
maskThe interrupts to enable. This is a logical OR of members of the enumeration :: _snvs_lp_srtc_interrupts
uint32_t SNVS_LP_SRTC_GetEnabledInterrupts ( SNVS_Type *  base)
Parameters
baseSNVS peripheral base address
Returns
The enabled interrupts. This is the logical OR of members of the enumeration :: _snvs_lp_srtc_interrupts
uint32_t SNVS_LP_SRTC_GetStatusFlags ( SNVS_Type *  base)
Parameters
baseSNVS peripheral base address
Returns
The status flags. This is the logical OR of members of the enumeration :: _snvs_lp_srtc_status_flags
static void SNVS_LP_SRTC_ClearStatusFlags ( SNVS_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseSNVS peripheral base address
maskThe status flags to clear. This is a logical OR of members of the enumeration :: _snvs_lp_srtc_status_flags
static void SNVS_LP_SRTC_StartTimer ( SNVS_Type *  base)
inlinestatic
Parameters
baseSNVS peripheral base address
static void SNVS_LP_SRTC_StopTimer ( SNVS_Type *  base)
inlinestatic
Parameters
baseSNVS peripheral base address
void SNVS_LP_EnableExternalTamper ( SNVS_Type *  base,
snvs_lp_external_tamper_t  pin,
snvs_lp_external_tamper_polarity_t  polarity 
)
Parameters
baseSNVS peripheral base address
pinSNVS external tamper pin
polarityPolarity of external tamper
void SNVS_LP_DisableExternalTamper ( SNVS_Type *  base,
snvs_lp_external_tamper_t  pin 
)
Parameters
baseSNVS peripheral base address
pinSNVS external tamper pin
snvs_lp_external_tamper_status_t SNVS_LP_GetExternalTamperStatus ( SNVS_Type *  base,
snvs_lp_external_tamper_t  pin 
)
Parameters
baseSNVS peripheral base address
pinSNVS external tamper pin
Returns
The status flag. This is the enumeration :: _snvs_lp_external_tamper_status
void SNVS_LP_ClearExternalTamperStatus ( SNVS_Type *  base,
snvs_lp_external_tamper_t  pin 
)
Parameters
baseSNVS peripheral base address
pinSNVS external tamper pin
static void SNVS_LP_EnableMonotonicCounter ( SNVS_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseSNVS peripheral base address
enablePass true to enable, false to disable.
uint64_t SNVS_LP_GetMonotonicCounter ( SNVS_Type *  base)
Parameters
baseSNVS peripheral base address
Returns
Current Monotonic Counter value.
static void SNVS_LP_IncreaseMonotonicCounter ( SNVS_Type *  base)
inlinestatic

Increase the Monotonic Counter by 1.

Parameters
baseSNVS peripheral base address
void SNVS_LP_WriteZeroizableMasterKey ( SNVS_Type *  base,
uint32_t  ZMKey[SNVS_ZMK_REG_COUNT] 
)
Parameters
baseSNVS peripheral base address
ZMKeyThe ZMK write to the SNVS register.
static void SNVS_LP_SetZeroizableMasterKeyValid ( SNVS_Type *  base,
bool  valid 
)
inlinestatic

This API could only be called when using software programming mode. After writing ZMK using SNVS_LP_WriteZeroizableMasterKey, call this API to make the ZMK valid.

Parameters
baseSNVS peripheral base address
validPass true to set valid, false to set invalid.
static bool SNVS_LP_GetZeroizableMasterKeyValid ( SNVS_Type *  base)
inlinestatic

In hardware programming mode, call this API to check whether the ZMK is valid.

Parameters
baseSNVS peripheral base address
Returns
true if valid, false if invalid.
static void SNVS_LP_SetZeroizableMasterKeyProgramMode ( SNVS_Type *  base,
snvs_lp_zmk_program_mode_t  mode 
)
inlinestatic
Parameters
baseSNVS peripheral base address
modeZMK programming mode.
static void SNVS_LP_EnableZeroizableMasterKeyECC ( SNVS_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseSNVS peripheral base address
enablePass true to enable, false to disable.
static void SNVS_LP_SetMasterKeyMode ( SNVS_Type *  base,
snvs_lp_master_key_mode_t  mode 
)
inlinestatic
Parameters
baseSNVS peripheral base address
modeMaster Key mode.
Note
When kSNVS_ZMK or kSNVS_CMK used, the SNVS_HP must be configured to enable the master key selection.