How does it work?
SE051 Plug&Trust Click, as its foundation, uses the SE051C2, a ready-to-use IoT secure element solution from NXP Semiconductor, providing a root of trust at the IC level and giving an IoT system state-of-the-art, edge-to-cloud security capability right out of the box. It has an independent Common Criteria EAL 6+ security certification up to OS level and supports both RSA & ECC asymmetric cryptographic algorithms with high key length and future-proof ECC curves. Designed for the latest IoT security requirements, it allows for securely storing, provisioning credentials, and performing cryptographic operations for security-critical communication and control functions.
The SE051C2 represents a turnkey solution with a Java Card operating system and an updatable pre-installed applet optimized for IoT security use cases. Alongside the updatable IoT applet, it also possesses SEMS Lite as well as a PERSO applet that provides upgradability of the IoT applet while preserving on-device credentials and the possibility to reconfigure the SE051 device. The SEMS Lite represents a capability based on a subset of GlobalPlatform’s Secure Element Management Service (SEMS), optimized for IoT use cases.
This Click board™ communicates with MCU using the standard I2C 2-Wire interface. Besides the mandatory connection to the host controller, this Click board™ can optionally be connected to a sensor node or similar element through separate I2C interface pins on the 1×4 male header labeled I2C Master. In this case, the SE051C2 device is the Controller device, and the sensor node represents the Target. This board also allows the user to select the appropriate I2C communication speed by onboard SMD jumpers labeled as I2C SPEED to a proper position marked as 400Kb and 1Mb. Note that all the jumpers must be lined to the same side, or else the Click board™ may become unresponsive.
Besides, the SE051C2 provides a special power-saving mode offering maximum power saving. The way of activation of this mode is realized with the onboard switch marked as ENA SEL. In this way, Power-Saving Mode can be activated via the EN pin, routed to the CS pin of the mikroBUS™ socket, primarily by placing the switch to the EN position and then pulling the EN pin to a logic zero level. By placing the switch in the second position marked as ON, the SE051C2 is in normal operation mode. The RST pin has no functionality in I2C Mode. It can only be used as an external reset source if the ISO7816 interface is enabled (not enabled in generic SE051 configurations).
Also, the SE051 Plug&Trust Click has an onboard antenna, providing a wireless interface (ISO14443) to an external device like a smartphone, connected via a switch labeled as ANTENNA with SE051C2 allowing the activation of the antenna itself by setting it to the appropriate ON or OFF position.
This Click board™ can be operated only with a 3.3V logic voltage level. The board must perform appropriate logic voltage level conversion before using MCUs with different logic levels. However, the Click board™ comes equipped with a library containing functions and an example code that can be used, as a reference, for further development.
Specifications
Type
Encryption,IoT security
Applications
Can be used in IoT security use cases such as secure connection to public/private clouds, device-to-device authentication or protection of sensor data, attestation and proof of device origin, and more
On-board modules
SE051C2 – ready-to-use IoT secure element solution from NXP Semiconductor
Key Features
Updatable extension of the EdgeLock™ SE050, Common Criteria EAL6+ certification, pre-installed IoT applet, SEMS Lite future-proof security, maximum flexibility, optional I2C Master to support new IoT security use cases, ISO14443 interface, Deep Power-Down Mode, and more
Interface
I2C
Feature
No ClickID
Compatibility
mikroBUS™
Click board size
L (57.15 x 25.4 mm)
Input Voltage
3.3V
Pinout diagram
This table shows how the pinout on SE051 Plug&Trust Click corresponds to the pinout on the mikroBUS™ socket (the latter shown in the two middle columns).
Onboard settings and indicators
Label | Name | Default | Description |
---|---|---|---|
LD1 | PWR | – | Power LED Indicator |
JP1-JP2 | I2C SPEED | Left | I2C Speed Selection 400Kb/1Mb: Left position 400Kb, Right position 1Mb |
SW1 | ANTENNA | Left | Antenna Activation Switch OFF/ON: Left position OFF, Right position ON |
SW2 | ENA SEL | Right | Deep Power-Down Mode Activation Switch EN/ON: Left position EN, Right position ON |
J1 | I2C MASTER | Unpopulated | I2C Master Connection Header |
SE051 Plug&Trust Click electrical specifications
Description | Min | Typ | Max | Unit |
---|---|---|---|---|
Supply Voltage | – | 3.3 | – | V |
Antenna Operating Frequency | – | 13.56 | – | MHz |
User Memory | 46 | – | 104 | kB |
I2C Interface Speed | 400 | – | 1000 | kHz |
Operating Temperature Range | -40 | +25 | +105 | °C |
Software Support
We provide a library for the SE051 Plug & Trust Click as well as a demo application (example), developed using MikroElektronika compilers. The demo can run on all the main MikroElektronika development boards.
Package can be downloaded/installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on Mikroe github account.
Library Description
This library contains API for SE051 Plug & Trust Click driver.
Key functions
-
se051plugntrust_apdu_write
This function writes a @b frame_data to device. -
se051plugntrust_apdu_read
This function reads a @b frame_data from device. -
se051plugntrust_apdu_transfer
This function writes a @b frame_data and then reads return data from device and stores it in @b frame_data.
Example Description
This application is showcasing basic functionality of SE051 Plug&Trust Click board™. It gets identify data from device, selects card manager and applet. Then checks free memory, reads all objects and deletes not reserved ones. After that showcases a few of functionality: Generating random data, Creating, reading and deleting binary objects, Creating AES symmetrical key and cipher with it; In the end it is showcasing funcionality in the endless loop.
void application_task ( void )
{
#define DATA_LEN 16
static uint8_t aes_value[ DATA_LEN ] = { 0x40, 0x41, 0x42, 0x43,0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F };
static uint32_t binary_id = 0xBBBBBBBB;
static uint32_t aes_id = 0xCCCCCCCC;
uint8_t random_data[ DATA_LEN ] = { 0 };
uint8_t read_data[ DATA_LEN ] = { 0 };
uint8_t encrypted_data[ DATA_LEN ] = { 0 };
uint32_t read_len = DATA_LEN;
if ( SE051PLUGNTRUST_OK == se051plugntrust_get_random_numbers( &se051plugntrust, random_data, DATA_LEN ) )
{
log_printf( &logger, " > Generated random data: 0x" );
log_buf_hex( random_data, DATA_LEN );
log_printf( &logger, "rn" );
}
else
{
log_error( &logger, " Random" );
}
Delay_ms( 2000 );
if ( SE051PLUGNTRUST_OBJECT_DOESNT_EXIST == se051plugntrust_check_object_exist( &se051plugntrust, binary_id ) )
{
log_printf( &logger, " Write random data to binary object...rn" );
if ( SE051PLUGNTRUST_OK != se051plugntrust_write_binary_object( &se051plugntrust, binary_id,
0, DATA_LEN, random_data ) )
{
log_error( &logger, " Write Binary" );
}
else
{
log_info( &logger, " Status OK" );
}
}
else
{
log_error( &logger, " Binary object already exist" );
}
Delay_ms( 2000 );
if ( SE051PLUGNTRUST_OBJECT_DOES_EXISTS == se051plugntrust_check_object_exist( &se051plugntrust, binary_id ) )
{
if ( SE051PLUGNTRUST_OK == se051plugntrust_read_object( &se051plugntrust, binary_id, 0, 0,
read_data, &read_len ) )
{
log_printf( &logger, " > Read data from binary object: 0x" );
log_buf_hex( read_data, read_len );
log_printf( &logger, "rn" );
}
else
{
log_error( &logger, " Read binray object" );
}
}
else
{
log_error( &logger, " Binary object doesn't exist" );
}
Delay_ms( 2000 );
log_printf( &logger, " Create AES key...rn" );
create_128_aes_key( aes_id, aes_value );
Delay_ms( 2000 );
if ( SE051PLUGNTRUST_OK == cipher_data_with_aes_key( aes_id, SE051PLUGNTRUST_P2_ENCRYPT_ONESHOT,
read_data, encrypted_data ) )
{
log_printf( &logger, " > Encrypted data: 0x" );
log_buf_hex( encrypted_data, DATA_LEN );
log_printf( &logger, "rn" );
}
else
{
log_error( &logger, " Encrypting data" );
}
Delay_ms( 2000 );
if ( SE051PLUGNTRUST_OK == cipher_data_with_aes_key( aes_id, SE051PLUGNTRUST_P2_DECRYPT_ONESHOT,
encrypted_data, read_data ) )
{
log_printf( &logger, " > Decrypted data: 0x" );
log_buf_hex( read_data, DATA_LEN );
log_printf( &logger, "rn" );
}
else
{
log_error( &logger, " Decrypting data" );
}
Delay_ms( 2000 );
log_printf( &logger, " Delete Binary and AES object...rn" );
if ( ( SE051PLUGNTRUST_OK != se051plugntrust_delete_object( &se051plugntrust, binary_id ) ) ||
( SE051PLUGNTRUST_OK != se051plugntrust_delete_object( &se051plugntrust, aes_id ) ) )
{
log_error( &logger, " Deleting objects" );
}
log_printf( &logger, "*****************************************************************************rn" );
Delay_ms( 5000 );
}
The full application code, and ready to use projects can be installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on Mikroe github account.
Other Mikroe Libraries used in the example:
- MikroSDK.Board
- MikroSDK.Log
- Click.SE051PlugnTrust
Additional notes and informations
Depending on the development board you are using, you may need USB UART click, USB UART 2 Click or RS232 Click to connect to your PC, for development systems with no UART to USB interface available on the board. UART terminal is available in all MikroElektronika compilers.
mikroSDK
This Click board™ is supported with mikroSDK – MikroElektronika Software Development Kit. To ensure proper operation of mikroSDK compliant Click board™ demo applications, mikroSDK should be downloaded from the LibStock and installed for the compiler you are using.
For more information about mikroSDK, visit the official page.