Data Structures | Macros | Functions
TRNGCC26XX.h File Reference

Detailed Description

TRNG driver implementation for the CC26XX family.

============================================================================

Warning
This is a beta API. It may change in future releases.

This file should only be included in the board file to fill the TRNG_config struct.

Hardware

The CC26XX family has a dedicated hardware TRNG based on sampling multiple free running oscillators. With all FROs enabled, the TRNG hardware generates 64 bits of entropy approximately every 5ms. The driver implementation chains multiple 64-bit entropy generation operations together to generate an arbitrary amount of entropy.

Behaviour

The driver keeps a global pool of entropy available to service any requests immediately. If the pool is not sufficiently large or is too depleted to service a request, entropy will be generated until the request is serviced. If there is an ongoing TRNG request that the hardware is generating entropy for, the driver will queue any other requests and work them off in FIFO order.

Requests issued by driver instances with polling return behaviour will preempt any executing requests and be serviced immediately.

After the request queue is emptied, the driver will start an asynchronous operation in the background to refill the depleted entropy pool.

#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/Power.h>
#include <ti/drivers/TRNG.h>
#include <ti/drivers/cryptoutils/cryptokey/CryptoKey.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/SemaphoreP.h>
Include dependency graph for TRNGCC26XX.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  TRNGCC26XX_HWAttrs
 TRNGCC26XX Hardware Attributes. More...
 

Macros

#define TRNGCC26XX_SAMPLES_PER_CYCLE_MIN   256
 Minimum random samples for each entropy generation call. More...
 
#define TRNGCC26XX_SAMPLES_PER_CYCLE_DEFAULT   240000
 Default random samples for each entropy generation call. More...
 
#define TRNGCC26XX_SAMPLES_PER_CYCLE_MAX   16777216
 Maximum random samples for each entropy generation call. More...
 
#define TRNGCC26XX_MIN_BYTES_PER_ITERATION   (2 * sizeof(uint32_t))
 Minimum number of bytes provided by the TRNG hardware in one go. More...
 
#define TRNGCC26XX_ENTROPY_POOL_SIZE   (32 / sizeof(uint64_t))
 Default TRNGCC26XX entropy pool size in 64-bit elements. More...
 

Functions

int_fast16_t TRNGCC26XX_setSamplesPerCycle (TRNG_Handle handle, uint32_t samplesPerCycle)
 Sets the number of entropy generation cycles before the results are returned. More...
 

Macro Definition Documentation

§ TRNGCC26XX_SAMPLES_PER_CYCLE_MIN

#define TRNGCC26XX_SAMPLES_PER_CYCLE_MIN   256

Minimum random samples for each entropy generation call.

§ TRNGCC26XX_SAMPLES_PER_CYCLE_DEFAULT

#define TRNGCC26XX_SAMPLES_PER_CYCLE_DEFAULT   240000

Default random samples for each entropy generation call.

Set to generate 64 bits of randomness in 5ms with all FROs active.

§ TRNGCC26XX_SAMPLES_PER_CYCLE_MAX

#define TRNGCC26XX_SAMPLES_PER_CYCLE_MAX   16777216

Maximum random samples for each entropy generation call.

§ TRNGCC26XX_MIN_BYTES_PER_ITERATION

#define TRNGCC26XX_MIN_BYTES_PER_ITERATION   (2 * sizeof(uint32_t))

Minimum number of bytes provided by the TRNG hardware in one go.

Smaller amounts can by requested in driver calls but the full number will always be generated. Part of the generated entropy will simply not be copied back to the target buffer if the requested length is not a multiple of TRNGCC26XX_MIN_BYTES_PER_ISR.

§ TRNGCC26XX_ENTROPY_POOL_SIZE

#define TRNGCC26XX_ENTROPY_POOL_SIZE   (32 / sizeof(uint64_t))

Default TRNGCC26XX entropy pool size in 64-bit elements.

By default, the entropy pool is sized to immediately fulfill a 256-bit entropy generation request. If we assume that the TRNG is used infrequently, this should greatly decrease the latency of <= 256-bit requests. This value may be overriden by defining it at the project level and recompiling the driver.

Function Documentation

§ TRNGCC26XX_setSamplesPerCycle()

int_fast16_t TRNGCC26XX_setSamplesPerCycle ( TRNG_Handle  handle,
uint32_t  samplesPerCycle 
)

Sets the number of entropy generation cycles before the results are returned.

The default value is set to generate 64 bits of entropy.

Precondition
TRNG_open() has to be called first successfully
Parameters
handleA TRNGCC26XX handle returned from TRNGCC26XX_open
samplesPerCycleNumber of 48MHz clock cycles to sample. Must be between 2^8 and 2^24.
See also
TRNG_open()
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale