MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Smart Card EMVSIM Driver

Overview

The SmartCard EMVSIM driver covers the transmission functionality in the CPU mode. The driver supports non-blocking (asynchronous) type of data transfers. The blocking (synchronous) transfer is supported only by the RTOS adaptation layer.

Macros

#define SMARTCARD_EMV_RX_NACK_THRESHOLD   (5u)
 EMV RX NACK interrupt generation threshold.
 
#define SMARTCARD_EMV_TX_NACK_THRESHOLD   (5u)
 EMV TX NACK interrupt generation threshold.
 
#define SMARTCARD_WWT_ADJUSTMENT   (160u)
 Smart card Word Wait Timer adjustment value.
 
#define SMARTCARD_CWT_ADJUSTMENT   (3u)
 Smart card Character Wait Timer adjustment value.
 

Enumerations

enum  emvsim_gpc_clock_select_t {
  kEMVSIM_GPCClockDisable = 0u,
  kEMVSIM_GPCCardClock = 1u,
  kEMVSIM_GPCRxClock = 2u,
  kEMVSIM_GPCTxClock = 3u
}
 General Purpose Counter clock selections. More...
 
enum  emvsim_presence_detect_edge_t {
  kEMVSIM_DetectOnFallingEdge = 0u,
  kEMVSIM_DetectOnRisingEdge = 1u
}
 EMVSIM card presence detection edge control. More...
 
enum  emvsim_presence_detect_status_t {
  kEMVSIM_DetectPinIsLow = 0u,
  kEMVSIM_DetectPinIsHigh = 1u
}
 EMVSIM card presence detection status. More...
 

Smart card EMVSIM Driver

void SMARTCARD_EMVSIM_GetDefaultConfig (smartcard_card_params_t *cardParams)
 Fills in the smartcard_card_params structure with default values according to the EMV 4.3 specification. More...
 
status_t SMARTCARD_EMVSIM_Init (EMVSIM_Type *base, smartcard_context_t *context, uint32_t srcClock_Hz)
 Initializes an EMVSIM peripheral for the Smart card/ISO-7816 operation. More...
 
void SMARTCARD_EMVSIM_Deinit (EMVSIM_Type *base)
 This function disables the EMVSIM interrupts, disables the transmitter and receiver, flushes the FIFOs, and gates EMVSIM clock in SIM. More...
 
int32_t SMARTCARD_EMVSIM_GetTransferRemainingBytes (EMVSIM_Type *base, smartcard_context_t *context)
 Returns whether the previous EMVSIM transfer has finished. More...
 
status_t SMARTCARD_EMVSIM_AbortTransfer (EMVSIM_Type *base, smartcard_context_t *context)
 Terminates an asynchronous EMVSIM transfer early. More...
 
status_t SMARTCARD_EMVSIM_TransferNonBlocking (EMVSIM_Type *base, smartcard_context_t *context, smartcard_xfer_t *xfer)
 Transfer data using interrupts. More...
 
status_t SMARTCARD_EMVSIM_Control (EMVSIM_Type *base, smartcard_context_t *context, smartcard_control_t control, uint32_t param)
 Controls the EMVSIM module per different user request. More...
 
void SMARTCARD_EMVSIM_IRQHandler (EMVSIM_Type *base, smartcard_context_t *context)
 Handles EMVSIM module interrupts. More...
 

Enumeration Type Documentation

Enumerator
kEMVSIM_GPCClockDisable 

Disabled.

kEMVSIM_GPCCardClock 

Card clock.

kEMVSIM_GPCRxClock 

Receive clock.

kEMVSIM_GPCTxClock 

Transmit ETU clock.

Enumerator
kEMVSIM_DetectOnFallingEdge 

Presence detected on the falling edge.

kEMVSIM_DetectOnRisingEdge 

Presence detected on the rising edge.

Enumerator
kEMVSIM_DetectPinIsLow 

Presence detected pin is logic low.

kEMVSIM_DetectPinIsHigh 

Presence detected pin is logic high.

Function Documentation

void SMARTCARD_EMVSIM_GetDefaultConfig ( smartcard_card_params_t cardParams)
Parameters
cardParamsThe configuration structure of type smartcard_interface_config_t. Function fill in members: Fi = 372; Di = 1; currentD = 1; WI = 0x0A; GTN = 0x00; with default values.
status_t SMARTCARD_EMVSIM_Init ( EMVSIM_Type *  base,
smartcard_context_t context,
uint32_t  srcClock_Hz 
)

This function un-gates the EMVSIM clock, initializes the module to EMV default settings, configures the IRQ, enables the module-level interrupt to the core and, initializes the driver context.

Parameters
baseThe EMVSIM peripheral base address.
contextA pointer to the smart card driver context structure.
srcClock_HzSmart card clock generation module source clock.
Returns
An error code or kStatus_SMARTCARD_Success.
void SMARTCARD_EMVSIM_Deinit ( EMVSIM_Type *  base)
Parameters
baseThe EMVSIM module base address.
int32_t SMARTCARD_EMVSIM_GetTransferRemainingBytes ( EMVSIM_Type *  base,
smartcard_context_t context 
)

When performing an async transfer, call this function to ascertain the context of the current transfer: in progress (or busy) or complete (success). If the transfer is still in progress, the user can obtain the number of words that have not been transferred.

Parameters
baseThe EMVSIM module base address.
contextA pointer to a smart card driver context structure.
Returns
The number of bytes not transferred.
status_t SMARTCARD_EMVSIM_AbortTransfer ( EMVSIM_Type *  base,
smartcard_context_t context 
)

During an async EMVSIM transfer, the user can terminate the transfer early if the transfer is still in progress.

Parameters
baseThe EMVSIM peripheral address.
contextA pointer to a smart card driver context structure.
Return values
kStatus_SMARTCARD_SuccessThe transmit abort was successful.
kStatus_SMARTCARD_NoTransmitInProgressNo transmission is currently in progress.
status_t SMARTCARD_EMVSIM_TransferNonBlocking ( EMVSIM_Type *  base,
smartcard_context_t context,
smartcard_xfer_t xfer 
)

A non-blocking (also known as asynchronous) function means that the function returns immediately after initiating the transfer function. The application has to get the transfer status to see when the transfer is complete. In other words, after calling the non-blocking (asynchronous) transfer function, the application must get the transfer status to check if the transmit is completed or not.

Parameters
baseThe EMVSIM peripheral base address.
contextA pointer to a smart card driver context structure.
xferA pointer to the smart card transfer structure where the linked buffers and sizes are stored.
Returns
An error code or kStatus_SMARTCARD_Success.
status_t SMARTCARD_EMVSIM_Control ( EMVSIM_Type *  base,
smartcard_context_t context,
smartcard_control_t  control,
uint32_t  param 
)
Parameters
baseThe EMVSIM peripheral base address.
contextA pointer to a smart card driver context structure.
controlControl type.
paramInteger value of specific to control command.

return kStatus_SMARTCARD_Success in success. return kStatus_SMARTCARD_OtherError in case of error.

void SMARTCARD_EMVSIM_IRQHandler ( EMVSIM_Type *  base,
smartcard_context_t context 
)
Parameters
baseThe EMVSIM peripheral base address.
contextA pointer to a smart card driver context structure.