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 Jul 27 09:25:33 2016 +0000
Revision:
0:892175366555
Child:
1:11ae12d41082
first release of the complete mbed library for HelloWorld_NFC02A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:892175366555 1 #ifndef __M24LR_H
rosarium 0:892175366555 2 #define __M24LR_H
rosarium 0:892175366555 3
rosarium 0:892175366555 4 #include "common.h"
rosarium 0:892175366555 5 #include "DevI2C.h"
rosarium 0:892175366555 6 //#include "lib_NDEF_URI.h"
rosarium 0:892175366555 7 /* Exported constants --------------------------------------------------------*/
rosarium 0:892175366555 8 /** @defgroup M24LR_Exported_Constants
rosarium 0:892175366555 9 * @{
rosarium 0:892175366555 10 */
rosarium 0:892175366555 11 #define I_AM_M24LR04 0x5A
rosarium 0:892175366555 12 #define I_AM_M24LR16 0x4E
rosarium 0:892175366555 13 #define I_AM_M24LR64 0x5E
rosarium 0:892175366555 14
rosarium 0:892175366555 15 #ifndef NULL
rosarium 0:892175366555 16 #define NULL (void *) 0
rosarium 0:892175366555 17 #endif
rosarium 0:892175366555 18
rosarium 0:892175366555 19 #define M24LR_PAGEWRITE_NBBYTE 4
rosarium 0:892175366555 20
rosarium 0:892175366555 21 #define M24LR_ADDR_DATA_I2C 0xA6
rosarium 0:892175366555 22 #define M24LR_ADDR_SYST_I2C 0xAE
rosarium 0:892175366555 23 #define M24LR_I2C_TIMEOUT 200 /* I2C Time out (ms), this is the maximum time needed by M24LR to complete any command */
rosarium 0:892175366555 24
rosarium 0:892175366555 25 #define M24LR_IT_BUSY_MASK 0x01
rosarium 0:892175366555 26 #define M24LR_IT_WIP_MASK 0x02
rosarium 0:892175366555 27
rosarium 0:892175366555 28 /* Registers address */
rosarium 0:892175366555 29 #define M24LR_SSS_REG 0x0000
rosarium 0:892175366555 30 #define M24LR_LOCK_REG 0x0800
rosarium 0:892175366555 31 #define M24LR_I2C_PWD_REG 0x0900
rosarium 0:892175366555 32 #define M24LR_CFG_REG 0x0910
rosarium 0:892175366555 33 #define M24LR_AFI_REG 0x0912
rosarium 0:892175366555 34 #define M24LR_DSFID_REG 0x0913
rosarium 0:892175366555 35 #define M24LR_UID_REG 0x0914
rosarium 0:892175366555 36 #define M24LR_ICREF_REG 0x091C
rosarium 0:892175366555 37 #define M24LR_MEMSIZE_REG 0x091D
rosarium 0:892175366555 38 #define M24LR_CTRL_REG 0x0920
rosarium 0:892175366555 39
rosarium 0:892175366555 40 /* Registers mask */
rosarium 0:892175366555 41 #define M24LR_SSS_LOCK_MASK 0x01
rosarium 0:892175366555 42 #define M24LR_SSS_RW_MASK 0x06
rosarium 0:892175366555 43 #define M24LR_SSS_PASSCTRL_MASK 0x18
rosarium 0:892175366555 44 #define M24LR_LOCK_MASK 0x0F
rosarium 0:892175366555 45
rosarium 0:892175366555 46 #define M24LR_CFG_EHCFG0_MASK 0x01
rosarium 0:892175366555 47 #define M24LR_CFG_EHCFG1_MASK 0x02
rosarium 0:892175366555 48 #define M24LR_CFG_EHMODE_MASK 0x04
rosarium 0:892175366555 49 #define M24LR_CFG_WIPBUSY_MASK 0x08
rosarium 0:892175366555 50
rosarium 0:892175366555 51 #define M24LR_CTRL_EHEN_MASK 0x01
rosarium 0:892175366555 52 #define M24LR_CTRL_FIELD_MASK 0x02
rosarium 0:892175366555 53 #define M24LR_CTRL_TPROG_MASK 0x80
rosarium 0:892175366555 54
rosarium 0:892175366555 55
rosarium 0:892175366555 56 /**
rosarium 0:892175366555 57 * @brief M24LR VOUT Configuration enumerator definition
rosarium 0:892175366555 58 */
rosarium 0:892175366555 59 typedef enum
rosarium 0:892175366555 60 {
rosarium 0:892175366555 61 M24LR_EH_Cfg_6MA = 0,
rosarium 0:892175366555 62 M24LR_EH_Cfg_3MA,
rosarium 0:892175366555 63 M24LR_EH_Cfg_1MA,
rosarium 0:892175366555 64 M24LR_EH_Cfg_300UA
rosarium 0:892175366555 65 } M24LR_EH_CFG_VOUT;
rosarium 0:892175366555 66
rosarium 0:892175366555 67 /**
rosarium 0:892175366555 68 * @brief M24LR FIELD status enumerator definition
rosarium 0:892175366555 69 */
rosarium 0:892175366555 70 typedef enum
rosarium 0:892175366555 71 {
rosarium 0:892175366555 72 M24LR_FIELD_OFF = 0,
rosarium 0:892175366555 73 M24LR_FIELD_ON
rosarium 0:892175366555 74 } M24LR_FIELD_STATUS;
rosarium 0:892175366555 75
rosarium 0:892175366555 76 /**
rosarium 0:892175366555 77 * @brief M24LR TT-PROG status enumerator definition
rosarium 0:892175366555 78 */
rosarium 0:892175366555 79 typedef enum
rosarium 0:892175366555 80 {
rosarium 0:892175366555 81 M24LR_T_PROG_NO = 0,
rosarium 0:892175366555 82 M24LR_T_PROG_OK
rosarium 0:892175366555 83 } M24LR_T_PROG_STATUS;
rosarium 0:892175366555 84
rosarium 0:892175366555 85 /**
rosarium 0:892175366555 86 * @brief M24LR Energy Harvesting status enumerator definition
rosarium 0:892175366555 87 */
rosarium 0:892175366555 88 typedef enum
rosarium 0:892175366555 89 {
rosarium 0:892175366555 90 M24LR_EH_DISABLE = 0,
rosarium 0:892175366555 91 M24LR_EH_ENABLE
rosarium 0:892175366555 92 } M24LR_EH_STATUS;
rosarium 0:892175366555 93
rosarium 0:892175366555 94 /**
rosarium 0:892175366555 95 * @brief M24LR Energy Harvesting mode enumerator definition
rosarium 0:892175366555 96 */
rosarium 0:892175366555 97 typedef enum
rosarium 0:892175366555 98 {
rosarium 0:892175366555 99 M24LR_EH_MODE_ENABLE = 0,
rosarium 0:892175366555 100 M24LR_EH_MODE_DISABLE
rosarium 0:892175366555 101 } M24LR_EH_MODE_STATUS;
rosarium 0:892175366555 102
rosarium 0:892175366555 103 /**
rosarium 0:892175366555 104 * @brief M24LR GPO status enumerator definition
rosarium 0:892175366555 105 */
rosarium 0:892175366555 106 typedef enum
rosarium 0:892175366555 107 {
rosarium 0:892175366555 108 M24LR_GPO_BUSY = 0,
rosarium 0:892175366555 109 M24LR_GPO_WIP
rosarium 0:892175366555 110 } M24LR_GPO_STATUS;
rosarium 0:892175366555 111
rosarium 0:892175366555 112 /**
rosarium 0:892175366555 113 * @brief M24LR Memory information structure definition
rosarium 0:892175366555 114 */
rosarium 0:892175366555 115 typedef struct
rosarium 0:892175366555 116 {
rosarium 0:892175366555 117 uint8_t BlockSize;
rosarium 0:892175366555 118 uint16_t Mem_Size;
rosarium 0:892175366555 119 } M24LR_Mem_Size;
rosarium 0:892175366555 120
rosarium 0:892175366555 121 /**
rosarium 0:892175366555 122 * @brief M24LR I2C Write Lock register structure definition
rosarium 0:892175366555 123 */
rosarium 0:892175366555 124 typedef struct
rosarium 0:892175366555 125 {
rosarium 0:892175366555 126 uint8_t sectors_7_0;
rosarium 0:892175366555 127 uint8_t sectors_15_8;
rosarium 0:892175366555 128 uint8_t sectors_23_16;
rosarium 0:892175366555 129 uint8_t sectors_31_24;
rosarium 0:892175366555 130 uint8_t sectors_39_32;
rosarium 0:892175366555 131 uint8_t sectors_47_40;
rosarium 0:892175366555 132 uint8_t sectors_55_48;
rosarium 0:892175366555 133 uint8_t sectors_63_56;
rosarium 0:892175366555 134 } M24LR_Lock_Sectors;
rosarium 0:892175366555 135
rosarium 0:892175366555 136 /**
rosarium 0:892175366555 137 * @brief M24LR UID information structure definition
rosarium 0:892175366555 138 */
rosarium 0:892175366555 139 typedef struct
rosarium 0:892175366555 140 {
rosarium 0:892175366555 141 uint32_t MSB_UID;
rosarium 0:892175366555 142 uint32_t LSB_UID;
rosarium 0:892175366555 143 } M24LR_UID;
rosarium 0:892175366555 144
rosarium 0:892175366555 145 /**
rosarium 0:892175366555 146 * @brief M24LR Sector Security register structure definition
rosarium 0:892175366555 147 */
rosarium 0:892175366555 148 typedef struct
rosarium 0:892175366555 149 {
rosarium 0:892175366555 150 uint8_t SectorLock;
rosarium 0:892175366555 151 uint8_t RW_Protection;
rosarium 0:892175366555 152 uint8_t PassCtrl;
rosarium 0:892175366555 153 } M24LR_SECTOR_SEC;
rosarium 0:892175366555 154
rosarium 0:892175366555 155
rosarium 0:892175366555 156 /**
rosarium 0:892175366555 157 * @}
rosarium 0:892175366555 158 */
rosarium 0:892175366555 159
rosarium 0:892175366555 160 class M24LR {
rosarium 0:892175366555 161 public:
rosarium 0:892175366555 162 NFCTAG_StatusTypeDef i2c_Init( void );
rosarium 0:892175366555 163 NFCTAG_StatusTypeDef i2c_ReadID( uint8_t * const pICRef );
rosarium 0:892175366555 164 NFCTAG_StatusTypeDef i2c_IsDeviceReady( const uint32_t Trials );
rosarium 0:892175366555 165 NFCTAG_StatusTypeDef i2c_ConfigureGPO( const uint16_t ITConf );
rosarium 0:892175366555 166 NFCTAG_StatusTypeDef i2c_GetGPOStatus( uint16_t * const pGPOStatus );
rosarium 0:892175366555 167 NFCTAG_StatusTypeDef i2c_ReadData( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 168 NFCTAG_StatusTypeDef i2c_WriteData( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 169 NFCTAG_StatusTypeDef i2c_ReadRegister( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 170 NFCTAG_StatusTypeDef i2c_WriteRegister( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 171
rosarium 0:892175366555 172
rosarium 0:892175366555 173 /* Extended Functions */
rosarium 0:892175366555 174 NFCTAG_StatusTypeDef i2c_ReadUID( M24LR_UID * const pUid );
rosarium 0:892175366555 175 NFCTAG_StatusTypeDef i2c_ReadDSFID( uint8_t * const pDsfid );
rosarium 0:892175366555 176 NFCTAG_StatusTypeDef i2c_ReadAFI( uint8_t * const pAfi );
rosarium 0:892175366555 177 NFCTAG_StatusTypeDef i2c_ReadI2CLockSector( M24LR_Lock_Sectors * const pLock_sector );
rosarium 0:892175366555 178 NFCTAG_StatusTypeDef i2c_I2CLockSector( const uint8_t Sector );
rosarium 0:892175366555 179 NFCTAG_StatusTypeDef i2c_I2CUnlockSector( const uint8_t Sector );
rosarium 0:892175366555 180 NFCTAG_StatusTypeDef i2c_PresentI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 181 NFCTAG_StatusTypeDef i2c_WriteI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 182 NFCTAG_StatusTypeDef i2c_ReadSSSx( const uint8_t SectorNb, M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 183 NFCTAG_StatusTypeDef i2c_WriteSSSx( const uint8_t SectorNb, const M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 184 NFCTAG_StatusTypeDef i2c_ReadMemSize( M24LR_Mem_Size * const pSizeInfo );
rosarium 0:892175366555 185 NFCTAG_StatusTypeDef i2c_GetRF_WIP_BUSY( M24LR_GPO_STATUS * const pRf_Wip_Busy );
rosarium 0:892175366555 186 NFCTAG_StatusTypeDef i2c_SetRFBUSY( void );
rosarium 0:892175366555 187 NFCTAG_StatusTypeDef i2c_SetRFWIP( void );
rosarium 0:892175366555 188 NFCTAG_StatusTypeDef i2c_Read_EH_mode( M24LR_EH_MODE_STATUS * const pEH_mode );
rosarium 0:892175366555 189 NFCTAG_StatusTypeDef i2c_Enable_EH_mode( void );
rosarium 0:892175366555 190 NFCTAG_StatusTypeDef i2c_Disable_EH_mode( void );
rosarium 0:892175366555 191 NFCTAG_StatusTypeDef i2c_ReadEH_Cfg( M24LR_EH_CFG_VOUT * const pEH_Cfg );
rosarium 0:892175366555 192 NFCTAG_StatusTypeDef i2c_WriteEH_Cfg( const M24LR_EH_CFG_VOUT EH_Cfg );
rosarium 0:892175366555 193 NFCTAG_StatusTypeDef i2c_GetEH( M24LR_EH_STATUS * const pEH_Val );
rosarium 0:892175366555 194 NFCTAG_StatusTypeDef i2c_SetEH( void );
rosarium 0:892175366555 195 NFCTAG_StatusTypeDef i2c_ResetEH( void );
rosarium 0:892175366555 196 NFCTAG_StatusTypeDef i2c_GetRFField( M24LR_FIELD_STATUS * const pRF_Field );
rosarium 0:892175366555 197 NFCTAG_StatusTypeDef i2c_GetTProg( M24LR_T_PROG_STATUS * const pT_Prog );
rosarium 0:892175366555 198
rosarium 0:892175366555 199 void Enable_EnergyHarvesting( void );
rosarium 0:892175366555 200 NFCTAG_StatusTypeDef Initialization( void );
rosarium 0:892175366555 201
rosarium 0:892175366555 202 M24LR(uint8_t const address, uint8_t const addressData, DevI2C &devI2C ):
rosarium 0:892175366555 203 i2c_address_syst(address), i2c_address_data(addressData), dev_I2C(devI2C) {}
rosarium 0:892175366555 204
rosarium 0:892175366555 205 static uint8_t NfctagInitialized;
rosarium 0:892175366555 206 // M24LR_IO mM24LR_IO;
rosarium 0:892175366555 207 uint8_t i2c_address_syst;
rosarium 0:892175366555 208
rosarium 0:892175366555 209 uint8_t i2c_address_data;
rosarium 0:892175366555 210 DevI2C dev_I2C;
rosarium 0:892175366555 211 friend class NDEF_URI;
rosarium 0:892175366555 212 //NDEF_URI mM24LR_URI;
rosarium 0:892175366555 213 //M24LR *ptr;
rosarium 0:892175366555 214 // ReadFnDataPtr i2c_ReadData;
rosarium 0:892175366555 215 // WriteFnDataPtr i2c_WriteData;
rosarium 0:892175366555 216
rosarium 0:892175366555 217 };
rosarium 0:892175366555 218
rosarium 0:892175366555 219
rosarium 0:892175366555 220
rosarium 0:892175366555 221
rosarium 0:892175366555 222 #endif /* __M24LR_H */
rosarium 0:892175366555 223