The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright 2017 NXP
AnnaBridge 161:aa5281ff4a02 4 * All rights reserved.
AnnaBridge 161:aa5281ff4a02 5 *
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 #ifndef _FSL_BEE_H_
AnnaBridge 161:aa5281ff4a02 36 #define _FSL_BEE_H_
AnnaBridge 161:aa5281ff4a02 37
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 41 * Definitions
AnnaBridge 161:aa5281ff4a02 42 *******************************************************************************/
AnnaBridge 161:aa5281ff4a02 43
AnnaBridge 161:aa5281ff4a02 44 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 45 /*@{*/
AnnaBridge 161:aa5281ff4a02 46 /*! @brief BEE driver version. Version 2.0.0.
AnnaBridge 161:aa5281ff4a02 47 *
AnnaBridge 161:aa5281ff4a02 48 * Current version: 2.0.0
AnnaBridge 161:aa5281ff4a02 49 *
AnnaBridge 161:aa5281ff4a02 50 * Change log:
AnnaBridge 161:aa5281ff4a02 51 * - Version 2.0.0
AnnaBridge 161:aa5281ff4a02 52 * - Initial version
AnnaBridge 161:aa5281ff4a02 53 */
AnnaBridge 161:aa5281ff4a02 54 #define FSL_BEE_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
AnnaBridge 161:aa5281ff4a02 55 /*@}*/
AnnaBridge 161:aa5281ff4a02 56
AnnaBridge 161:aa5281ff4a02 57 typedef enum _bee_aes_mode
AnnaBridge 161:aa5281ff4a02 58 {
AnnaBridge 161:aa5281ff4a02 59 kBEE_AesEcbMode = 0U, /*!< AES ECB Mode */
AnnaBridge 161:aa5281ff4a02 60 kBEE_AesCtrMode = 1U /*!< AES CTR Mode */
AnnaBridge 161:aa5281ff4a02 61 } bee_aes_mode_t;
AnnaBridge 161:aa5281ff4a02 62
AnnaBridge 161:aa5281ff4a02 63 typedef enum _bee_region
AnnaBridge 161:aa5281ff4a02 64 {
AnnaBridge 161:aa5281ff4a02 65 kBEE_Region0 = 0U, /*!< BEE region 0 */
AnnaBridge 161:aa5281ff4a02 66 kBEE_Region1 = 1U /*!< BEE region 1 */
AnnaBridge 161:aa5281ff4a02 67 } bee_region_t;
AnnaBridge 161:aa5281ff4a02 68
AnnaBridge 161:aa5281ff4a02 69 typedef enum _bee_region_enable
AnnaBridge 161:aa5281ff4a02 70 {
AnnaBridge 161:aa5281ff4a02 71 kBEE_RegionDisabled = 0U, /*!< BEE region disabled */
AnnaBridge 161:aa5281ff4a02 72 kBEE_RegionEnabled = 1U /*!< BEE region enabled */
AnnaBridge 161:aa5281ff4a02 73 } bee_region_enable_t;
AnnaBridge 161:aa5281ff4a02 74
AnnaBridge 161:aa5281ff4a02 75 typedef enum _bee_status_flags
AnnaBridge 161:aa5281ff4a02 76 {
AnnaBridge 161:aa5281ff4a02 77 kBEE_DisableAbortFlag = 1U, /*!< Disable abort flag. */
AnnaBridge 161:aa5281ff4a02 78 kBEE_Reg0ReadSecViolation = 2U, /*!< Region-0 read channel security violation */
AnnaBridge 161:aa5281ff4a02 79 kBEE_ReadIllegalAccess = 4U, /*!< Read channel illegal access detected */
AnnaBridge 161:aa5281ff4a02 80 kBEE_Reg1ReadSecViolation = 8U, /*!< Region-1 read channel security violation */
AnnaBridge 161:aa5281ff4a02 81 kBEE_Reg0AccessViolation = 16U, /*!< Protected region-0 access violation */
AnnaBridge 161:aa5281ff4a02 82 kBEE_Reg1AccessViolation = 32U, /*!< Protected region-1 access violation */
AnnaBridge 161:aa5281ff4a02 83 kBEE_IdleFlag = BEE_STATUS_BEE_IDLE_MASK /*!< Idle flag */
AnnaBridge 161:aa5281ff4a02 84 } bee_status_flags_t;
AnnaBridge 161:aa5281ff4a02 85
AnnaBridge 161:aa5281ff4a02 86 /*! @brief BEE region configuration structure. */
AnnaBridge 161:aa5281ff4a02 87 typedef struct _bee_region_config
AnnaBridge 161:aa5281ff4a02 88 {
AnnaBridge 161:aa5281ff4a02 89 bee_aes_mode_t mode; /*!< AES mode used for encryption/decryption */
AnnaBridge 161:aa5281ff4a02 90 uint32_t regionBot; /*!< Region bottom address */
AnnaBridge 161:aa5281ff4a02 91 uint32_t regionTop; /*!< Region top address */
AnnaBridge 161:aa5281ff4a02 92 uint32_t addrOffset; /*!< Region address offset */
AnnaBridge 161:aa5281ff4a02 93 bee_region_enable_t regionEn; /*!< Region enable/disable */
AnnaBridge 161:aa5281ff4a02 94 } bee_region_config_t;
AnnaBridge 161:aa5281ff4a02 95
AnnaBridge 161:aa5281ff4a02 96 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 97 * API
AnnaBridge 161:aa5281ff4a02 98 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 99 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 100 extern "C" {
AnnaBridge 161:aa5281ff4a02 101 #endif
AnnaBridge 161:aa5281ff4a02 102
AnnaBridge 161:aa5281ff4a02 103 /*!
AnnaBridge 161:aa5281ff4a02 104 * @brief Resets BEE module to factory default values.
AnnaBridge 161:aa5281ff4a02 105 *
AnnaBridge 161:aa5281ff4a02 106 * This function performs hardware reset of BEE module. Attributes and keys from software for both regions are cleared.
AnnaBridge 161:aa5281ff4a02 107 *
AnnaBridge 161:aa5281ff4a02 108 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 109 */
AnnaBridge 161:aa5281ff4a02 110 void BEE_Init(BEE_Type *base);
AnnaBridge 161:aa5281ff4a02 111
AnnaBridge 161:aa5281ff4a02 112 /*!
AnnaBridge 161:aa5281ff4a02 113 * @brief Resets BEE module, clears keys for both regions and disables clock to the BEE.
AnnaBridge 161:aa5281ff4a02 114 *
AnnaBridge 161:aa5281ff4a02 115 * This function performs hardware reset of BEE module and disables clocks. Attributes and keys from software for both
AnnaBridge 161:aa5281ff4a02 116 * regions are cleared.
AnnaBridge 161:aa5281ff4a02 117 *
AnnaBridge 161:aa5281ff4a02 118 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 119 */
AnnaBridge 161:aa5281ff4a02 120 void BEE_Deinit(BEE_Type *base);
AnnaBridge 161:aa5281ff4a02 121
AnnaBridge 161:aa5281ff4a02 122 /*!
AnnaBridge 161:aa5281ff4a02 123 * @brief Enables BEE decryption.
AnnaBridge 161:aa5281ff4a02 124 *
AnnaBridge 161:aa5281ff4a02 125 * This function enables decryption using BEE.
AnnaBridge 161:aa5281ff4a02 126 *
AnnaBridge 161:aa5281ff4a02 127 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 128 */
AnnaBridge 161:aa5281ff4a02 129 static inline void BEE_Enable(BEE_Type *base)
AnnaBridge 161:aa5281ff4a02 130 {
AnnaBridge 161:aa5281ff4a02 131 base->CTRL |= BEE_CTRL_BEE_ENABLE_MASK | BEE_CTRL_KEY_VALID_MASK;
AnnaBridge 161:aa5281ff4a02 132 }
AnnaBridge 161:aa5281ff4a02 133
AnnaBridge 161:aa5281ff4a02 134 /*!
AnnaBridge 161:aa5281ff4a02 135 * @brief Disables BEE decryption.
AnnaBridge 161:aa5281ff4a02 136 *
AnnaBridge 161:aa5281ff4a02 137 * This function disables decryption using BEE.
AnnaBridge 161:aa5281ff4a02 138 *
AnnaBridge 161:aa5281ff4a02 139 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 140 */
AnnaBridge 161:aa5281ff4a02 141 static inline void BEE_Disable(BEE_Type *base)
AnnaBridge 161:aa5281ff4a02 142 {
AnnaBridge 161:aa5281ff4a02 143 base->CTRL &= ~BEE_CTRL_BEE_ENABLE_MASK | BEE_CTRL_KEY_VALID_MASK;
AnnaBridge 161:aa5281ff4a02 144 }
AnnaBridge 161:aa5281ff4a02 145
AnnaBridge 161:aa5281ff4a02 146 /*!
AnnaBridge 161:aa5281ff4a02 147 * @brief Loads default values to the BEE region configuration structure.
AnnaBridge 161:aa5281ff4a02 148 *
AnnaBridge 161:aa5281ff4a02 149 * Loads default values to the BEE region configuration structure. The default values are as follows:
AnnaBridge 161:aa5281ff4a02 150 * @code
AnnaBridge 161:aa5281ff4a02 151 * config->mode = kBEE_AesCbcMode;
AnnaBridge 161:aa5281ff4a02 152 * config->regionBot = 0U;
AnnaBridge 161:aa5281ff4a02 153 * config->regionTop = 0U;
AnnaBridge 161:aa5281ff4a02 154 * config->addrOffset = 0xF0000000U;
AnnaBridge 161:aa5281ff4a02 155 * config->regionEn = kBEE_RegionDisabled;
AnnaBridge 161:aa5281ff4a02 156 * @endcode
AnnaBridge 161:aa5281ff4a02 157 *
AnnaBridge 161:aa5281ff4a02 158 * @param config Configuration structure for BEE region.
AnnaBridge 161:aa5281ff4a02 159 */
AnnaBridge 161:aa5281ff4a02 160 void BEE_GetDefaultConfig(bee_region_config_t *config);
AnnaBridge 161:aa5281ff4a02 161
AnnaBridge 161:aa5281ff4a02 162 /*!
AnnaBridge 161:aa5281ff4a02 163 * @brief Sets BEE region configuration.
AnnaBridge 161:aa5281ff4a02 164 *
AnnaBridge 161:aa5281ff4a02 165 * This function sets BEE region settings accorging to given configuration structure.
AnnaBridge 161:aa5281ff4a02 166 *
AnnaBridge 161:aa5281ff4a02 167 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 168 * @param region Selection of the BEE region to be configured.
AnnaBridge 161:aa5281ff4a02 169 * @param config Configuration structure for BEE region.
AnnaBridge 161:aa5281ff4a02 170 */
AnnaBridge 161:aa5281ff4a02 171 status_t BEE_SetRegionConfig(BEE_Type *base, bee_region_t region, const bee_region_config_t *config);
AnnaBridge 161:aa5281ff4a02 172
AnnaBridge 161:aa5281ff4a02 173 /*!
AnnaBridge 161:aa5281ff4a02 174 * @brief Loads the AES key and nonce for selected region into BEE key registers.
AnnaBridge 161:aa5281ff4a02 175 *
AnnaBridge 161:aa5281ff4a02 176 * This function loads given AES key and nonce(only AES CTR mode) to BEE register for the given region.
AnnaBridge 161:aa5281ff4a02 177 *
AnnaBridge 161:aa5281ff4a02 178 * Please note, that eFuse BEE_KEYx_SEL must be set accordingly to be able to load and use key loaded in BEE registers.
AnnaBridge 161:aa5281ff4a02 179 * Otherwise, key cannot loaded and BEE will use key from OTPMK or SW_GP2.
AnnaBridge 161:aa5281ff4a02 180 *
AnnaBridge 161:aa5281ff4a02 181 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 182 * @param region Selection of the BEE region to be configured.
AnnaBridge 161:aa5281ff4a02 183 * @param key AES key.
AnnaBridge 161:aa5281ff4a02 184 * @param keySize Size of AES key.
AnnaBridge 161:aa5281ff4a02 185 * @param nonce AES nonce.
AnnaBridge 161:aa5281ff4a02 186 * @param nonceSize Size of AES nonce.
AnnaBridge 161:aa5281ff4a02 187 */
AnnaBridge 161:aa5281ff4a02 188 status_t BEE_SetRegionKey(
AnnaBridge 161:aa5281ff4a02 189 BEE_Type *base, bee_region_t region, const uint8_t *key, size_t keySize, const uint8_t *nonce, size_t nonceSize);
AnnaBridge 161:aa5281ff4a02 190
AnnaBridge 161:aa5281ff4a02 191 /*!
AnnaBridge 161:aa5281ff4a02 192 * @brief Gets the BEE status flags.
AnnaBridge 161:aa5281ff4a02 193 *
AnnaBridge 161:aa5281ff4a02 194 * This function returns status of BEE peripheral.
AnnaBridge 161:aa5281ff4a02 195 *
AnnaBridge 161:aa5281ff4a02 196 * @param base BEE peripheral address.
AnnaBridge 161:aa5281ff4a02 197 *
AnnaBridge 161:aa5281ff4a02 198 * @return The status flags. This is the logical OR of members of the
AnnaBridge 161:aa5281ff4a02 199 * enumeration ::bee_status_flags_t
AnnaBridge 161:aa5281ff4a02 200 */
AnnaBridge 161:aa5281ff4a02 201 uint32_t BEE_GetStatusFlags(BEE_Type *base);
AnnaBridge 161:aa5281ff4a02 202
AnnaBridge 161:aa5281ff4a02 203 /*!
AnnaBridge 161:aa5281ff4a02 204 * @brief Clears the BEE status flags.
AnnaBridge 161:aa5281ff4a02 205 *
AnnaBridge 161:aa5281ff4a02 206 * @param base BEE peripheral base address.
AnnaBridge 161:aa5281ff4a02 207 * @param mask The status flags to clear. This is a logical OR of members of the
AnnaBridge 161:aa5281ff4a02 208 * enumeration ::bee_status_flags_t
AnnaBridge 161:aa5281ff4a02 209 */
AnnaBridge 161:aa5281ff4a02 210 void BEE_ClearStatusFlags(BEE_Type *base, uint32_t mask);
AnnaBridge 161:aa5281ff4a02 211
AnnaBridge 161:aa5281ff4a02 212 /*!
AnnaBridge 161:aa5281ff4a02 213 * @brief Computes offset to be set for specifed memory location.
AnnaBridge 161:aa5281ff4a02 214 *
AnnaBridge 161:aa5281ff4a02 215 * This function calculates offset that must be set for BEE region to access physical memory location.
AnnaBridge 161:aa5281ff4a02 216 *
AnnaBridge 161:aa5281ff4a02 217 * @param addressMemory Address of physical memory location.
AnnaBridge 161:aa5281ff4a02 218 */
AnnaBridge 161:aa5281ff4a02 219 static inline uint32_t BEE_GetOffset(uint32_t addressMemory)
AnnaBridge 161:aa5281ff4a02 220 {
AnnaBridge 161:aa5281ff4a02 221 return (addressMemory >> 16);
AnnaBridge 161:aa5281ff4a02 222 }
AnnaBridge 161:aa5281ff4a02 223
AnnaBridge 161:aa5281ff4a02 224 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 225 }
AnnaBridge 161:aa5281ff4a02 226 #endif
AnnaBridge 161:aa5281ff4a02 227
AnnaBridge 161:aa5281ff4a02 228 #endif /* _FSL_BEE_H_ */