The MCUXpresso SDK provides a peripheral driver for the Secure Non-Volatile Storage (SNVS) module.
The SNVS module is designed to safely hold security-related data such as cryptographic key, time counter, monotonic counter, and general purpose security information. The The SNVS includes a low power section, namely SNVS_LP, that is battery backed by the SVNS (or VBAT) power domain. This enables it to keep this data valid and continue to increment the time counter when the power goes down in the rest of the SoC. The always-powered-up part of the module is isolated from the rest of the logic to ensure that it does not get corrupted when the SoC is powered down. The SNVS is designed to comply with Digital Rights Management (DRM) and other security application rules and requirements. This trusted hardware provides features that allow the system software designer to ensure that the data kept by the device is certifiable. Specially, it incorporates a security monitor that checks for various security conditions. If a security violation is indicated then it invalidates access to its sensitive data, and the secret data, e.g. Zeroizable Secret Key, is zeroized. the SNVS can be also configured to bypass its security features and protection mechanism. In this case it can be used by systems that do not require security.
SNVS_LP Driver Initialization and Configuration
The function SNVS_LP_RTC_Init() initializes the SNVS with specified configurations. The function SNVS_LP_RTC_GetDefaultConfig() gets the default configurations.
The function SNVS_LP_RTC_Deinit() disables the SNVS SRTC timer and disables the module clock.
Set & Get Datetime
The function SNVS_LP_RTC_SetDatetime() sets the SNVS SRTC date and time according to the given time structure described below.
typedef struct _snvs_lp_srtc_datetime
{
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
The function SNVS_LP_RTC_GetDatetime() reads the current timer value in seconds, converts it to date & time format and stores it into a datetime structure passed in by the user.
Set & Get Alarm
The function SNVS_LP_RTC_SetAlarm() sets the alarm time period in seconds. Users pass in the details in date & time format by using the datetime data structure.
The function SNVS_LP_RTC_GetAlarm() reads the alarm time in seconds, converts it to date & time format and stores it into a datetime structure passed in by the user.
Start & Stop timer
The function SNVS_LP_RTC_StartTimer() starts the SNVS_LP SRTC time counter.
The function SNVS_LP_RTC_StopTimer() stops the SNVS_LP SRTC time counter.
Status
Provides functions to get and clear the SNVS_LP status.
Interrupt
Provides functions to enable/disable SNVS_LP interrupts and get current enabled interrupts.
Typical use case
SNVS_LP SRTC example
Example to set the SNVS_LP SRTC current time, synchronize RTC time and date with SRTC and start RTC and trigger an alarm.
int main(void)
{
uint32_t sec;
BOARD_InitHardware();
PRINTF("SNVS LP SRTC example:\r\n");
PRINTF("RTC date and time has been synchronized with SRTC\r\n");
EnableIRQ(EXAMPLE_SNVS_IRQn);
PRINTF("Set up time to wake up an alarm.\r\n");
while (1)
{
busyWait = true;
PRINTF(
"Current datetime: %04hd-%02hd-%02hd %02hd:%02hd:%02hd\r\n", rtcDate.
year, rtcDate.
month, rtcDate.
day,
sec = 0;
PRINTF("Please input the number of second to wait for alarm and press enter \r\n");
PRINTF("The second must be positive value\r\n");
while (sec < 1)
{
SCANF("%d", &sec);
}
if ((rtcDate.
second + sec) < 60)
{
}
else
{
}
PRINTF(
"Alarm will occur at: %04hd-%02hd-%02hd %02hd:%02hd:%02hd\r\n", rtcDate.
year, rtcDate.
month, rtcDate.
day,
while (busyWait)
{
}
PRINTF("\r\n Alarm occurs !!!! ");
}
}
struct snvs_lp_srtc_datetime_t |
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.
|
|
Enumerator |
---|
kSNVS_SRTC_AlarmInterruptEnable |
SRTC time alarm.
|
Enumerator |
---|
kSNVS_SRTC_AlarmInterruptFlag |
SRTC time alarm flag.
|
- Note
- This API should be called at the beginning of the application using the SNVS driver.
- Parameters
-
base | SNVS peripheral base address |
config | Pointer to the user's SNVS configuration structure. |
void SNVS_LP_SRTC_Deinit |
( |
SNVS_Type * |
base | ) |
|
- Parameters
-
base | SNVS peripheral base address |
The default values are as follows.
* config->srtccalenable = false;
* config->srtccalvalue = 0U;
*
- Parameters
-
config | Pointer to the user's SNVS configuration structure. |
- Parameters
-
base | SNVS peripheral base address |
datetime | Pointer 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
- Parameters
-
base | SNVS peripheral base address |
datetime | Pointer to the structure where the date and time details are stored. |
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
-
base | SNVS peripheral base address |
alarmTime | Pointer 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
- Parameters
-
base | SNVS peripheral base address |
datetime | Pointer to the structure where the alarm date and time details are stored. |
void SNVS_LP_SRTC_EnableInterrupts |
( |
SNVS_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
- Parameters
-
base | SNVS peripheral base address |
mask | The interrupts to enable. This is a logical OR of members of the enumeration ::snvs_interrupt_enable_t |
void SNVS_LP_SRTC_DisableInterrupts |
( |
SNVS_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
- Parameters
-
base | SNVS peripheral base address |
mask | The interrupts to enable. This is a logical OR of members of the enumeration ::snvs_interrupt_enable_t |
uint32_t SNVS_LP_SRTC_GetEnabledInterrupts |
( |
SNVS_Type * |
base | ) |
|
- Parameters
-
base | SNVS peripheral base address |
- Returns
- The enabled interrupts. This is the logical OR of members of the enumeration ::snvs_interrupt_enable_t
uint32_t SNVS_LP_SRTC_GetStatusFlags |
( |
SNVS_Type * |
base | ) |
|
- Parameters
-
base | SNVS peripheral base address |
- Returns
- The status flags. This is the logical OR of members of the enumeration ::snvs_status_flags_t
void SNVS_LP_SRTC_ClearStatusFlags |
( |
SNVS_Type * |
base, |
|
|
uint32_t |
mask |
|
) |
| |
- Parameters
-
base | SNVS peripheral base address |
mask | The status flags to clear. This is a logical OR of members of the enumeration ::snvs_status_flags_t |
static void SNVS_LP_SRTC_StartTimer |
( |
SNVS_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | SNVS peripheral base address |
static void SNVS_LP_SRTC_StopTimer |
( |
SNVS_Type * |
base | ) |
|
|
inlinestatic |
- Parameters
-
base | SNVS peripheral base address |
- Parameters
-
base | SNVS peripheral base address |
pin | SNVS external tamper pin |
polarity | Polarity of external tamper |
- Parameters
-
base | SNVS peripheral base address |
pin | SNVS external tamper pin |
- Parameters
-
base | SNVS peripheral base address |
pin | SNVS external tamper pin |
- Returns
- The status flag. This is the enumeration ::snvs_external_tamper_status_t
- Parameters
-
base | SNVS peripheral base address |
pin | SNVS external tamper pin |
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 |