Complete mbed library/workspace for HelloWorld_NFC02A1
Dependencies: NDefLib X_NUCLEO_NFC02A1 mbed
Fork of HelloWorld_NFC02A1 by
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.
X_NUCLEO_NFC02A1/m24lr/m24lr.h@0:892175366555, 2016-07-27 (annotated)
- 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?
| User | Revision | Line number | New 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 |

X-NUCLEO-NFC02A1 Dynamic NFC tag