Complete mbed library/workspace for HelloWorld_NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1 mbed

Fork of HelloWorld_NFC02A1 by ST Expansion SW Team

X-NUCLEO-NFC02A1 Dynamic NFC Tag Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-NFC02A1 Dynamic NFC Tag Expansion Board based on M24LR.

Example Application

This is just a simple "hello world" style program for the X-NUCLEO-NFC02A1 Dynamic NFC Tag Expansion Board. The program writes a URI link to the M24LR dynamic tag using the synchronous programming model. It then reads back the URI from the tag to display it on terminal. The URI can also be retrieved from an NFC enabled smartphone/tablet.

Committer:
rosarium
Date:
Wed Sep 28 11:26:49 2016 +0000
Revision:
2:6f1b1f7f8d12
Parent:
1:11ae12d41082
New Nfc interface file integrated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 1:11ae12d41082 1 /**
rosarium 1:11ae12d41082 2 ******************************************************************************
rosarium 1:11ae12d41082 3 * @file m24lr.h
rosarium 1:11ae12d41082 4 * @author AMG Central Lab
rosarium 1:11ae12d41082 5 * @version V1.0.0
rosarium 1:11ae12d41082 6 * @date 30 Aug 2016
rosarium 1:11ae12d41082 7 * @brief header file for M24LR driver .
rosarium 1:11ae12d41082 8 ******************************************************************************
rosarium 1:11ae12d41082 9 * @attention
rosarium 1:11ae12d41082 10 *
rosarium 1:11ae12d41082 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
rosarium 1:11ae12d41082 12 *
rosarium 1:11ae12d41082 13 * Redistribution and use in source and binary forms, with or without modification,
rosarium 1:11ae12d41082 14 * are permitted provided that the following conditions are met:
rosarium 1:11ae12d41082 15 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 1:11ae12d41082 16 * this list of conditions and the following disclaimer.
rosarium 1:11ae12d41082 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 1:11ae12d41082 18 * this list of conditions and the following disclaimer in the documentation
rosarium 1:11ae12d41082 19 * and/or other materials provided with the distribution.
rosarium 1:11ae12d41082 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 1:11ae12d41082 21 * may be used to endorse or promote products derived from this software
rosarium 1:11ae12d41082 22 * without specific prior written permission.
rosarium 1:11ae12d41082 23 *
rosarium 1:11ae12d41082 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 1:11ae12d41082 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 1:11ae12d41082 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 1:11ae12d41082 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 1:11ae12d41082 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 1:11ae12d41082 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 1:11ae12d41082 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 1:11ae12d41082 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 1:11ae12d41082 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 1:11ae12d41082 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 1:11ae12d41082 34 *
rosarium 1:11ae12d41082 35 ******************************************************************************
rosarium 1:11ae12d41082 36 */
rosarium 1:11ae12d41082 37
rosarium 1:11ae12d41082 38
rosarium 0:892175366555 39 #ifndef __M24LR_H
rosarium 0:892175366555 40 #define __M24LR_H
rosarium 0:892175366555 41
rosarium 0:892175366555 42 #include "common.h"
rosarium 0:892175366555 43 #include "DevI2C.h"
rosarium 2:6f1b1f7f8d12 44 #include "Nfc.h"
rosarium 1:11ae12d41082 45 #include "NDefNfcTag.h"
rosarium 1:11ae12d41082 46 #include "NDefNfcTagM24LR.h"
rosarium 1:11ae12d41082 47
rosarium 0:892175366555 48 //#include "lib_NDEF_URI.h"
rosarium 0:892175366555 49 /* Exported constants --------------------------------------------------------*/
rosarium 0:892175366555 50 /** @defgroup M24LR_Exported_Constants
rosarium 0:892175366555 51 * @{
rosarium 0:892175366555 52 */
rosarium 0:892175366555 53 #define I_AM_M24LR04 0x5A
rosarium 0:892175366555 54 #define I_AM_M24LR16 0x4E
rosarium 0:892175366555 55 #define I_AM_M24LR64 0x5E
rosarium 0:892175366555 56
rosarium 0:892175366555 57 #ifndef NULL
rosarium 0:892175366555 58 #define NULL (void *) 0
rosarium 0:892175366555 59 #endif
rosarium 0:892175366555 60
rosarium 0:892175366555 61 #define M24LR_PAGEWRITE_NBBYTE 4
rosarium 0:892175366555 62
rosarium 0:892175366555 63 #define M24LR_ADDR_DATA_I2C 0xA6
rosarium 0:892175366555 64 #define M24LR_ADDR_SYST_I2C 0xAE
rosarium 0:892175366555 65 #define M24LR_I2C_TIMEOUT 200 /* I2C Time out (ms), this is the maximum time needed by M24LR to complete any command */
rosarium 0:892175366555 66
rosarium 0:892175366555 67 #define M24LR_IT_BUSY_MASK 0x01
rosarium 0:892175366555 68 #define M24LR_IT_WIP_MASK 0x02
rosarium 0:892175366555 69
rosarium 0:892175366555 70 /* Registers address */
rosarium 0:892175366555 71 #define M24LR_SSS_REG 0x0000
rosarium 0:892175366555 72 #define M24LR_LOCK_REG 0x0800
rosarium 0:892175366555 73 #define M24LR_I2C_PWD_REG 0x0900
rosarium 0:892175366555 74 #define M24LR_CFG_REG 0x0910
rosarium 0:892175366555 75 #define M24LR_AFI_REG 0x0912
rosarium 0:892175366555 76 #define M24LR_DSFID_REG 0x0913
rosarium 0:892175366555 77 #define M24LR_UID_REG 0x0914
rosarium 0:892175366555 78 #define M24LR_ICREF_REG 0x091C
rosarium 0:892175366555 79 #define M24LR_MEMSIZE_REG 0x091D
rosarium 0:892175366555 80 #define M24LR_CTRL_REG 0x0920
rosarium 0:892175366555 81
rosarium 0:892175366555 82 /* Registers mask */
rosarium 0:892175366555 83 #define M24LR_SSS_LOCK_MASK 0x01
rosarium 0:892175366555 84 #define M24LR_SSS_RW_MASK 0x06
rosarium 0:892175366555 85 #define M24LR_SSS_PASSCTRL_MASK 0x18
rosarium 0:892175366555 86 #define M24LR_LOCK_MASK 0x0F
rosarium 0:892175366555 87
rosarium 0:892175366555 88 #define M24LR_CFG_EHCFG0_MASK 0x01
rosarium 0:892175366555 89 #define M24LR_CFG_EHCFG1_MASK 0x02
rosarium 0:892175366555 90 #define M24LR_CFG_EHMODE_MASK 0x04
rosarium 0:892175366555 91 #define M24LR_CFG_WIPBUSY_MASK 0x08
rosarium 0:892175366555 92
rosarium 0:892175366555 93 #define M24LR_CTRL_EHEN_MASK 0x01
rosarium 0:892175366555 94 #define M24LR_CTRL_FIELD_MASK 0x02
rosarium 0:892175366555 95 #define M24LR_CTRL_TPROG_MASK 0x80
rosarium 1:11ae12d41082 96
rosarium 1:11ae12d41082 97
rosarium 0:892175366555 98
rosarium 0:892175366555 99 /**
rosarium 0:892175366555 100 * @brief M24LR VOUT Configuration enumerator definition
rosarium 0:892175366555 101 */
rosarium 0:892175366555 102 typedef enum
rosarium 0:892175366555 103 {
rosarium 0:892175366555 104 M24LR_EH_Cfg_6MA = 0,
rosarium 0:892175366555 105 M24LR_EH_Cfg_3MA,
rosarium 0:892175366555 106 M24LR_EH_Cfg_1MA,
rosarium 0:892175366555 107 M24LR_EH_Cfg_300UA
rosarium 0:892175366555 108 } M24LR_EH_CFG_VOUT;
rosarium 0:892175366555 109
rosarium 0:892175366555 110 /**
rosarium 0:892175366555 111 * @brief M24LR FIELD status enumerator definition
rosarium 0:892175366555 112 */
rosarium 0:892175366555 113 typedef enum
rosarium 0:892175366555 114 {
rosarium 0:892175366555 115 M24LR_FIELD_OFF = 0,
rosarium 0:892175366555 116 M24LR_FIELD_ON
rosarium 0:892175366555 117 } M24LR_FIELD_STATUS;
rosarium 0:892175366555 118
rosarium 0:892175366555 119 /**
rosarium 0:892175366555 120 * @brief M24LR TT-PROG status enumerator definition
rosarium 0:892175366555 121 */
rosarium 0:892175366555 122 typedef enum
rosarium 0:892175366555 123 {
rosarium 0:892175366555 124 M24LR_T_PROG_NO = 0,
rosarium 0:892175366555 125 M24LR_T_PROG_OK
rosarium 0:892175366555 126 } M24LR_T_PROG_STATUS;
rosarium 0:892175366555 127
rosarium 0:892175366555 128 /**
rosarium 0:892175366555 129 * @brief M24LR Energy Harvesting status enumerator definition
rosarium 0:892175366555 130 */
rosarium 0:892175366555 131 typedef enum
rosarium 0:892175366555 132 {
rosarium 0:892175366555 133 M24LR_EH_DISABLE = 0,
rosarium 0:892175366555 134 M24LR_EH_ENABLE
rosarium 0:892175366555 135 } M24LR_EH_STATUS;
rosarium 0:892175366555 136
rosarium 0:892175366555 137 /**
rosarium 0:892175366555 138 * @brief M24LR Energy Harvesting mode enumerator definition
rosarium 0:892175366555 139 */
rosarium 0:892175366555 140 typedef enum
rosarium 0:892175366555 141 {
rosarium 0:892175366555 142 M24LR_EH_MODE_ENABLE = 0,
rosarium 0:892175366555 143 M24LR_EH_MODE_DISABLE
rosarium 0:892175366555 144 } M24LR_EH_MODE_STATUS;
rosarium 0:892175366555 145
rosarium 0:892175366555 146 /**
rosarium 0:892175366555 147 * @brief M24LR GPO status enumerator definition
rosarium 0:892175366555 148 */
rosarium 0:892175366555 149 typedef enum
rosarium 0:892175366555 150 {
rosarium 0:892175366555 151 M24LR_GPO_BUSY = 0,
rosarium 0:892175366555 152 M24LR_GPO_WIP
rosarium 0:892175366555 153 } M24LR_GPO_STATUS;
rosarium 0:892175366555 154
rosarium 0:892175366555 155 /**
rosarium 0:892175366555 156 * @brief M24LR Memory information structure definition
rosarium 0:892175366555 157 */
rosarium 0:892175366555 158 typedef struct
rosarium 0:892175366555 159 {
rosarium 0:892175366555 160 uint8_t BlockSize;
rosarium 0:892175366555 161 uint16_t Mem_Size;
rosarium 0:892175366555 162 } M24LR_Mem_Size;
rosarium 0:892175366555 163
rosarium 0:892175366555 164 /**
rosarium 0:892175366555 165 * @brief M24LR I2C Write Lock register structure definition
rosarium 0:892175366555 166 */
rosarium 0:892175366555 167 typedef struct
rosarium 0:892175366555 168 {
rosarium 0:892175366555 169 uint8_t sectors_7_0;
rosarium 0:892175366555 170 uint8_t sectors_15_8;
rosarium 0:892175366555 171 uint8_t sectors_23_16;
rosarium 0:892175366555 172 uint8_t sectors_31_24;
rosarium 0:892175366555 173 uint8_t sectors_39_32;
rosarium 0:892175366555 174 uint8_t sectors_47_40;
rosarium 0:892175366555 175 uint8_t sectors_55_48;
rosarium 0:892175366555 176 uint8_t sectors_63_56;
rosarium 0:892175366555 177 } M24LR_Lock_Sectors;
rosarium 0:892175366555 178
rosarium 0:892175366555 179 /**
rosarium 0:892175366555 180 * @brief M24LR UID information structure definition
rosarium 0:892175366555 181 */
rosarium 0:892175366555 182 typedef struct
rosarium 0:892175366555 183 {
rosarium 0:892175366555 184 uint32_t MSB_UID;
rosarium 0:892175366555 185 uint32_t LSB_UID;
rosarium 0:892175366555 186 } M24LR_UID;
rosarium 0:892175366555 187
rosarium 0:892175366555 188 /**
rosarium 0:892175366555 189 * @brief M24LR Sector Security register structure definition
rosarium 0:892175366555 190 */
rosarium 0:892175366555 191 typedef struct
rosarium 0:892175366555 192 {
rosarium 0:892175366555 193 uint8_t SectorLock;
rosarium 0:892175366555 194 uint8_t RW_Protection;
rosarium 0:892175366555 195 uint8_t PassCtrl;
rosarium 0:892175366555 196 } M24LR_SECTOR_SEC;
rosarium 0:892175366555 197
rosarium 0:892175366555 198
rosarium 0:892175366555 199 /**
rosarium 0:892175366555 200 * @}
rosarium 0:892175366555 201 */
rosarium 0:892175366555 202
rosarium 1:11ae12d41082 203 class M24LR : public Nfc {
rosarium 0:892175366555 204 public:
rosarium 0:892175366555 205 NFCTAG_StatusTypeDef i2c_Init( void );
rosarium 0:892175366555 206 NFCTAG_StatusTypeDef i2c_ReadID( uint8_t * const pICRef );
rosarium 0:892175366555 207 NFCTAG_StatusTypeDef i2c_IsDeviceReady( const uint32_t Trials );
rosarium 0:892175366555 208 NFCTAG_StatusTypeDef i2c_ConfigureGPO( const uint16_t ITConf );
rosarium 0:892175366555 209 NFCTAG_StatusTypeDef i2c_GetGPOStatus( uint16_t * const pGPOStatus );
rosarium 0:892175366555 210 NFCTAG_StatusTypeDef i2c_ReadData( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 211 NFCTAG_StatusTypeDef i2c_WriteData( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 212 NFCTAG_StatusTypeDef i2c_ReadRegister( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 213 NFCTAG_StatusTypeDef i2c_WriteRegister( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 214
rosarium 0:892175366555 215
rosarium 0:892175366555 216 /* Extended Functions */
rosarium 0:892175366555 217 NFCTAG_StatusTypeDef i2c_ReadUID( M24LR_UID * const pUid );
rosarium 0:892175366555 218 NFCTAG_StatusTypeDef i2c_ReadDSFID( uint8_t * const pDsfid );
rosarium 0:892175366555 219 NFCTAG_StatusTypeDef i2c_ReadAFI( uint8_t * const pAfi );
rosarium 0:892175366555 220 NFCTAG_StatusTypeDef i2c_ReadI2CLockSector( M24LR_Lock_Sectors * const pLock_sector );
rosarium 0:892175366555 221 NFCTAG_StatusTypeDef i2c_I2CLockSector( const uint8_t Sector );
rosarium 0:892175366555 222 NFCTAG_StatusTypeDef i2c_I2CUnlockSector( const uint8_t Sector );
rosarium 0:892175366555 223 NFCTAG_StatusTypeDef i2c_PresentI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 224 NFCTAG_StatusTypeDef i2c_WriteI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 225 NFCTAG_StatusTypeDef i2c_ReadSSSx( const uint8_t SectorNb, M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 226 NFCTAG_StatusTypeDef i2c_WriteSSSx( const uint8_t SectorNb, const M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 227 NFCTAG_StatusTypeDef i2c_ReadMemSize( M24LR_Mem_Size * const pSizeInfo );
rosarium 0:892175366555 228 NFCTAG_StatusTypeDef i2c_GetRF_WIP_BUSY( M24LR_GPO_STATUS * const pRf_Wip_Busy );
rosarium 0:892175366555 229 NFCTAG_StatusTypeDef i2c_SetRFBUSY( void );
rosarium 0:892175366555 230 NFCTAG_StatusTypeDef i2c_SetRFWIP( void );
rosarium 0:892175366555 231 NFCTAG_StatusTypeDef i2c_Read_EH_mode( M24LR_EH_MODE_STATUS * const pEH_mode );
rosarium 0:892175366555 232 NFCTAG_StatusTypeDef i2c_Enable_EH_mode( void );
rosarium 0:892175366555 233 NFCTAG_StatusTypeDef i2c_Disable_EH_mode( void );
rosarium 0:892175366555 234 NFCTAG_StatusTypeDef i2c_ReadEH_Cfg( M24LR_EH_CFG_VOUT * const pEH_Cfg );
rosarium 0:892175366555 235 NFCTAG_StatusTypeDef i2c_WriteEH_Cfg( const M24LR_EH_CFG_VOUT EH_Cfg );
rosarium 0:892175366555 236 NFCTAG_StatusTypeDef i2c_GetEH( M24LR_EH_STATUS * const pEH_Val );
rosarium 0:892175366555 237 NFCTAG_StatusTypeDef i2c_SetEH( void );
rosarium 0:892175366555 238 NFCTAG_StatusTypeDef i2c_ResetEH( void );
rosarium 0:892175366555 239 NFCTAG_StatusTypeDef i2c_GetRFField( M24LR_FIELD_STATUS * const pRF_Field );
rosarium 0:892175366555 240 NFCTAG_StatusTypeDef i2c_GetTProg( M24LR_T_PROG_STATUS * const pT_Prog );
rosarium 0:892175366555 241
rosarium 0:892175366555 242 void Enable_EnergyHarvesting( void );
rosarium 0:892175366555 243 NFCTAG_StatusTypeDef Initialization( void );
rosarium 0:892175366555 244
rosarium 2:6f1b1f7f8d12 245 virtual int ReadBinary(uint16_t Offset, uint8_t NbByteToRead,
rosarium 1:11ae12d41082 246 uint8_t *pBufferRead) {
rosarium 1:11ae12d41082 247 return (NFC_StatusTypeDef) i2c_ReadData( pBufferRead, Offset, NbByteToRead );
rosarium 1:11ae12d41082 248
rosarium 1:11ae12d41082 249 }
rosarium 1:11ae12d41082 250
rosarium 2:6f1b1f7f8d12 251 virtual int UpdateBinary(uint16_t Offset,
rosarium 1:11ae12d41082 252 uint8_t NbByteToWrite,uint8_t *pDataToWrite) {
rosarium 1:11ae12d41082 253 return (NFC_StatusTypeDef) i2c_WriteData( pDataToWrite, Offset, NbByteToWrite );
rosarium 1:11ae12d41082 254 }
rosarium 1:11ae12d41082 255
rosarium 0:892175366555 256 M24LR(uint8_t const address, uint8_t const addressData, DevI2C &devI2C ):
rosarium 1:11ae12d41082 257 NDefTagUtil(*this), i2c_address_syst(address), i2c_address_data(addressData), dev_I2C(devI2C) {}
rosarium 0:892175366555 258
rosarium 1:11ae12d41082 259
rosarium 1:11ae12d41082 260 NDefLib::NDefNfcTag& getNDefTag(){
rosarium 1:11ae12d41082 261 return NDefTagUtil;
rosarium 1:11ae12d41082 262 }
rosarium 2:6f1b1f7f8d12 263
rosarium 1:11ae12d41082 264
rosarium 1:11ae12d41082 265 virtual int Init(void *ptr) {
rosarium 1:11ae12d41082 266 (void)ptr;
rosarium 1:11ae12d41082 267 return (NFC_StatusTypeDef) i2c_Init();
rosarium 1:11ae12d41082 268 }
rosarium 1:11ae12d41082 269
rosarium 1:11ae12d41082 270 virtual int ReadID(uint8_t *id) {
rosarium 1:11ae12d41082 271 return (NFC_StatusTypeDef) i2c_ReadID(id);
rosarium 1:11ae12d41082 272 }
rosarium 2:6f1b1f7f8d12 273 private:
rosarium 2:6f1b1f7f8d12 274 static uint8_t NfctagInitialized;
rosarium 2:6f1b1f7f8d12 275
rosarium 2:6f1b1f7f8d12 276
rosarium 2:6f1b1f7f8d12 277 /*
rosarium 2:6f1b1f7f8d12 278 * Object implementing the interface to use the NDefLib.
rosarium 2:6f1b1f7f8d12 279 */
rosarium 2:6f1b1f7f8d12 280 NDefNfcTagM24LR NDefTagUtil;
rosarium 2:6f1b1f7f8d12 281
rosarium 2:6f1b1f7f8d12 282 uint8_t i2c_address_syst;
rosarium 2:6f1b1f7f8d12 283 uint8_t i2c_address_data;
rosarium 2:6f1b1f7f8d12 284 DevI2C dev_I2C;
rosarium 0:892175366555 285 };
rosarium 0:892175366555 286
rosarium 0:892175366555 287
rosarium 0:892175366555 288
rosarium 0:892175366555 289
rosarium 0:892175366555 290 #endif /* __M24LR_H */
rosarium 2:6f1b1f7f8d12 291
rosarium 2:6f1b1f7f8d12 292
rosarium 2:6f1b1f7f8d12 293
rosarium 2:6f1b1f7f8d12 294 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/