mbed OS 5 example application using X-NUCLEO-NFC02A1
Dependencies: NDefLib X_NUCLEO_NFC02A1
Fork of HelloWorld_NFC02A1 by
X_NUCLEO_NFC02A1/m24lr/m24lr.cpp@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 | #include "m24lr.h" |
| rosarium | 0:892175366555 | 2 | |
| rosarium | 0:892175366555 | 3 | uint8_t M24LR::NfctagInitialized = 0; |
| rosarium | 0:892175366555 | 4 | |
| rosarium | 0:892175366555 | 5 | |
| rosarium | 0:892175366555 | 6 | /** |
| rosarium | 0:892175366555 | 7 | * @brief This function activate Energy Harvesting mode |
| rosarium | 0:892175366555 | 8 | */ |
| rosarium | 0:892175366555 | 9 | void M24LR::Enable_EnergyHarvesting( void ) |
| rosarium | 0:892175366555 | 10 | { |
| rosarium | 0:892175366555 | 11 | /* Initialise M24LR Board */ |
| rosarium | 0:892175366555 | 12 | |
| rosarium | 0:892175366555 | 13 | /* Enable Energy Harvesting */ |
| rosarium | 0:892175366555 | 14 | i2c_SetEH( ); |
| rosarium | 0:892175366555 | 15 | |
| rosarium | 0:892175366555 | 16 | /* Store configuration in non Volatile Memory */ |
| rosarium | 0:892175366555 | 17 | i2c_Enable_EH_mode(); |
| rosarium | 0:892175366555 | 18 | i2c_WriteEH_Cfg( M24LR_EH_Cfg_6MA ); |
| rosarium | 0:892175366555 | 19 | |
| rosarium | 0:892175366555 | 20 | } |
| rosarium | 0:892175366555 | 21 | /** |
| rosarium | 0:892175366555 | 22 | * @brief Set M24LR nfctag Initialization |
| rosarium | 0:892175366555 | 23 | * @param None |
| rosarium | 0:892175366555 | 24 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 25 | */ |
| rosarium | 0:892175366555 | 26 | NFCTAG_StatusTypeDef M24LR::Initialization( void ) |
| rosarium | 0:892175366555 | 27 | { |
| rosarium | 0:892175366555 | 28 | uint8_t nfctag_id = 0; |
| rosarium | 0:892175366555 | 29 | |
| rosarium | 0:892175366555 | 30 | if( NfctagInitialized == 0 ) |
| rosarium | 0:892175366555 | 31 | { |
| rosarium | 0:892175366555 | 32 | |
| rosarium | 0:892175366555 | 33 | /* M24LR Init */ |
| rosarium | 0:892175366555 | 34 | if( i2c_Init() != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 35 | { |
| rosarium | 0:892175366555 | 36 | return NFCTAG_ERROR; |
| rosarium | 0:892175366555 | 37 | } |
| rosarium | 0:892175366555 | 38 | |
| rosarium | 0:892175366555 | 39 | /* Check M24LR driver ID */ |
| rosarium | 0:892175366555 | 40 | i2c_ReadID(&nfctag_id); |
| rosarium | 0:892175366555 | 41 | if( (nfctag_id == I_AM_M24LR04) || (nfctag_id == I_AM_M24LR16) || (nfctag_id == I_AM_M24LR64) ) |
| rosarium | 0:892175366555 | 42 | { |
| rosarium | 0:892175366555 | 43 | NfctagInitialized = 1; |
| rosarium | 0:892175366555 | 44 | // Nfctag_Drv = &M24lr_i2c_Drv; |
| rosarium | 0:892175366555 | 45 | // Nfctag_Drv->pData = &M24lr_i2c_ExtDrv; |
| rosarium | 0:892175366555 | 46 | } |
| rosarium | 0:892175366555 | 47 | else |
| rosarium | 0:892175366555 | 48 | { |
| rosarium | 0:892175366555 | 49 | NfctagInitialized = 0; |
| rosarium | 0:892175366555 | 50 | // Nfctag_Drv = NULL; |
| rosarium | 0:892175366555 | 51 | // NfctagInitialized = 0; |
| rosarium | 0:892175366555 | 52 | return NFCTAG_ERROR; |
| rosarium | 0:892175366555 | 53 | } |
| rosarium | 0:892175366555 | 54 | } |
| rosarium | 0:892175366555 | 55 | |
| rosarium | 0:892175366555 | 56 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 57 | } |
| rosarium | 0:892175366555 | 58 | |
| rosarium | 0:892175366555 | 59 | /** |
| rosarium | 0:892175366555 | 60 | * @brief Set M24LR Initialization |
| rosarium | 0:892175366555 | 61 | * @param None |
| rosarium | 0:892175366555 | 62 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 63 | */ |
| rosarium | 0:892175366555 | 64 | NFCTAG_StatusTypeDef M24LR::i2c_Init( void ) |
| rosarium | 0:892175366555 | 65 | { |
| rosarium | 0:892175366555 | 66 | /* Configure the low level interface */ |
| rosarium | 0:892175366555 | 67 | return(NFCTAG_OK); |
| rosarium | 0:892175366555 | 68 | // return mM24LR_IO.Init( ); |
| rosarium | 0:892175366555 | 69 | } |
| rosarium | 0:892175366555 | 70 | |
| rosarium | 0:892175366555 | 71 | /** |
| rosarium | 0:892175366555 | 72 | * @brief Read M24LR ID |
| rosarium | 0:892175366555 | 73 | * @param pICRef : pointer to store ID |
| rosarium | 0:892175366555 | 74 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 75 | */ |
| rosarium | 0:892175366555 | 76 | NFCTAG_StatusTypeDef M24LR::i2c_ReadID( uint8_t * const pData ) |
| rosarium | 0:892175366555 | 77 | { |
| rosarium | 0:892175366555 | 78 | uint8_t *pBuffer = (uint8_t *)pData; |
| rosarium | 0:892175366555 | 79 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 80 | /* Read ICRef on device */ |
| rosarium | 0:892175366555 | 81 | //return M24LR_i2c_ReadRegister( pICRef, M24LR_ICREF_REG, 1 ); |
| rosarium | 0:892175366555 | 82 | /* Before calling this function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 83 | status = i2c_ReadRegister(pBuffer, M24LR_ICREF_REG, 1); |
| rosarium | 0:892175366555 | 84 | |
| rosarium | 0:892175366555 | 85 | if (status == 0) |
| rosarium | 0:892175366555 | 86 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 87 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 88 | |
| rosarium | 0:892175366555 | 89 | } |
| rosarium | 0:892175366555 | 90 | |
| rosarium | 0:892175366555 | 91 | /** |
| rosarium | 0:892175366555 | 92 | * @brief Check M24LR availability |
| rosarium | 0:892175366555 | 93 | * @param Trials : number of max tentative tried |
| rosarium | 0:892175366555 | 94 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 95 | */ |
| rosarium | 0:892175366555 | 96 | NFCTAG_StatusTypeDef M24LR::i2c_IsDeviceReady( const uint32_t Trials ) |
| rosarium | 0:892175366555 | 97 | { |
| rosarium | 0:892175366555 | 98 | /* Test i2c with M24LR */ |
| rosarium | 0:892175366555 | 99 | // return mM24LR_IO.IsDeviceReady( M24LR_ADDR_DATA_I2C, Trials ); |
| rosarium | 0:892175366555 | 100 | uint8_t status = 1; |
| rosarium | 0:892175366555 | 101 | char buffer; |
| rosarium | 0:892175366555 | 102 | while (status != 0) { |
| rosarium | 0:892175366555 | 103 | /* for device is ready address in M24Lr is M24LR_ADDR_DATA_I2C */ |
| rosarium | 0:892175366555 | 104 | status = dev_I2C.read(i2c_address_data, &buffer, 1, false); |
| rosarium | 0:892175366555 | 105 | } |
| rosarium | 0:892175366555 | 106 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 107 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 108 | else |
| rosarium | 0:892175366555 | 109 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 110 | |
| rosarium | 0:892175366555 | 111 | } |
| rosarium | 0:892175366555 | 112 | |
| rosarium | 0:892175366555 | 113 | /** |
| rosarium | 0:892175366555 | 114 | * @brief Configure M24LR GPO |
| rosarium | 0:892175366555 | 115 | * @param ITConf : 0x01 = RFBUSY, 0x02 = RFWIP |
| rosarium | 0:892175366555 | 116 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 117 | */ |
| rosarium | 0:892175366555 | 118 | NFCTAG_StatusTypeDef M24LR::i2c_ConfigureGPO( const uint16_t ITConf ) |
| rosarium | 0:892175366555 | 119 | { |
| rosarium | 0:892175366555 | 120 | NFCTAG_StatusTypeDef status = NFCTAG_ERROR; |
| rosarium | 0:892175366555 | 121 | |
| rosarium | 0:892175366555 | 122 | /* Configure GPO function on M24LR */ |
| rosarium | 0:892175366555 | 123 | if( (ITConf & M24LR_IT_BUSY_MASK) == M24LR_IT_BUSY_MASK ) |
| rosarium | 0:892175366555 | 124 | { |
| rosarium | 0:892175366555 | 125 | status = i2c_SetRFBUSY( ); |
| rosarium | 0:892175366555 | 126 | } |
| rosarium | 0:892175366555 | 127 | else if( (ITConf & M24LR_IT_WIP_MASK) == M24LR_IT_WIP_MASK ) |
| rosarium | 0:892175366555 | 128 | { |
| rosarium | 0:892175366555 | 129 | status = i2c_SetRFWIP( ); |
| rosarium | 0:892175366555 | 130 | } |
| rosarium | 0:892175366555 | 131 | return status; |
| rosarium | 0:892175366555 | 132 | } |
| rosarium | 0:892175366555 | 133 | |
| rosarium | 0:892175366555 | 134 | /** |
| rosarium | 0:892175366555 | 135 | * @brief Configure GPO as RF WriteInProgress |
| rosarium | 0:892175366555 | 136 | * @param None |
| rosarium | 0:892175366555 | 137 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 138 | */ |
| rosarium | 0:892175366555 | 139 | NFCTAG_StatusTypeDef M24LR::i2c_SetRFWIP( void ) |
| rosarium | 0:892175366555 | 140 | { |
| rosarium | 0:892175366555 | 141 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 142 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 143 | status = i2c_ReadRegister(®_value, M24LR_CFG_REG, 1); |
| rosarium | 0:892175366555 | 144 | |
| rosarium | 0:892175366555 | 145 | |
| rosarium | 0:892175366555 | 146 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 147 | { |
| rosarium | 0:892175366555 | 148 | return status; |
| rosarium | 0:892175366555 | 149 | } |
| rosarium | 0:892175366555 | 150 | |
| rosarium | 0:892175366555 | 151 | /* Update register value for WIP configuration */ |
| rosarium | 0:892175366555 | 152 | reg_value |= M24LR_CFG_WIPBUSY_MASK; |
| rosarium | 0:892175366555 | 153 | |
| rosarium | 0:892175366555 | 154 | /* Write CFG register */ |
| rosarium | 0:892175366555 | 155 | return i2c_WriteRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 156 | } |
| rosarium | 0:892175366555 | 157 | |
| rosarium | 0:892175366555 | 158 | |
| rosarium | 0:892175366555 | 159 | /** |
| rosarium | 0:892175366555 | 160 | * @brief Get Configuration of M24LR GPO |
| rosarium | 0:892175366555 | 161 | * @param GPOStatus : 0x01 = RFBUSY, 0x02 = RFWIP |
| rosarium | 0:892175366555 | 162 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 163 | */ |
| rosarium | 0:892175366555 | 164 | NFCTAG_StatusTypeDef M24LR::i2c_GetGPOStatus( uint16_t * const pGPOStatus ) |
| rosarium | 0:892175366555 | 165 | { |
| rosarium | 0:892175366555 | 166 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 167 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 168 | |
| rosarium | 0:892175366555 | 169 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 170 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 171 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 172 | { |
| rosarium | 0:892175366555 | 173 | return status; |
| rosarium | 0:892175366555 | 174 | } |
| rosarium | 0:892175366555 | 175 | |
| rosarium | 0:892175366555 | 176 | /* Extract RF WIP/BUSY information */ |
| rosarium | 0:892175366555 | 177 | if( (reg_value & M24LR_CFG_WIPBUSY_MASK) == M24LR_CFG_WIPBUSY_MASK ) |
| rosarium | 0:892175366555 | 178 | { |
| rosarium | 0:892175366555 | 179 | *pGPOStatus = M24LR_IT_WIP_MASK; |
| rosarium | 0:892175366555 | 180 | } |
| rosarium | 0:892175366555 | 181 | else |
| rosarium | 0:892175366555 | 182 | { |
| rosarium | 0:892175366555 | 183 | *pGPOStatus = M24LR_IT_BUSY_MASK; |
| rosarium | 0:892175366555 | 184 | } |
| rosarium | 0:892175366555 | 185 | |
| rosarium | 0:892175366555 | 186 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 187 | } |
| rosarium | 0:892175366555 | 188 | |
| rosarium | 0:892175366555 | 189 | /** |
| rosarium | 0:892175366555 | 190 | * @brief Read N bytes starting from specified I2C address |
| rosarium | 0:892175366555 | 191 | * @param pData : pointer of the data to store |
| rosarium | 0:892175366555 | 192 | * @param TarAddr : I2C data memory address to read |
| rosarium | 0:892175366555 | 193 | * @param NbByte : number of bytes to read |
| rosarium | 0:892175366555 | 194 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 195 | */ |
| rosarium | 0:892175366555 | 196 | NFCTAG_StatusTypeDef M24LR::i2c_ReadData( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte ) |
| rosarium | 0:892175366555 | 197 | { |
| rosarium | 0:892175366555 | 198 | int status; |
| rosarium | 0:892175366555 | 199 | /* Before calling this function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 200 | if( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 201 | { |
| rosarium | 0:892175366555 | 202 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 203 | } |
| rosarium | 0:892175366555 | 204 | /* Rosarium : To check M24LR_ADDR_DATA_I2C is this case */ |
| rosarium | 0:892175366555 | 205 | /* return M24lr_IO_MemRead( pData, M24LR_ADDR_DATA_I2C, TarAddr, NbByte ); */ |
| rosarium | 0:892175366555 | 206 | status = dev_I2C.i2c_read(pData, i2c_address_data, TarAddr, NbByte); |
| rosarium | 0:892175366555 | 207 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 208 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 209 | else |
| rosarium | 0:892175366555 | 210 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 211 | } |
| rosarium | 0:892175366555 | 212 | |
| rosarium | 0:892175366555 | 213 | /** |
| rosarium | 0:892175366555 | 214 | * @brief Write N data bytes starting from specified I2C Address |
| rosarium | 0:892175366555 | 215 | * @brief if I2C_Write_Lock bit = 0 or I2C_Password present => ack (modification OK) |
| rosarium | 0:892175366555 | 216 | * @brief if I2C_Write_Lock bit = 1 and no I2C_Password present => No ack (no modification) |
| rosarium | 0:892175366555 | 217 | * @param pData : pointer of the data to write |
| rosarium | 0:892175366555 | 218 | * @param TarAddr : I2C data memory address to write |
| rosarium | 0:892175366555 | 219 | * @param NbByte : number of bytes to write |
| rosarium | 0:892175366555 | 220 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 221 | */ |
| rosarium | 0:892175366555 | 222 | NFCTAG_StatusTypeDef M24LR::i2c_WriteData( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte ) |
| rosarium | 0:892175366555 | 223 | { |
| rosarium | 0:892175366555 | 224 | int status; |
| rosarium | 0:892175366555 | 225 | uint8_t align_mem_offset; |
| rosarium | 0:892175366555 | 226 | uint16_t bytes_to_write = NbByte; |
| rosarium | 0:892175366555 | 227 | uint16_t mem_addr = TarAddr; |
| rosarium | 0:892175366555 | 228 | uint8_t *pdata_index = (uint8_t *)pData; |
| rosarium | 0:892175366555 | 229 | |
| rosarium | 0:892175366555 | 230 | /* Before calling this function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 231 | if( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 232 | { |
| rosarium | 0:892175366555 | 233 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 234 | } |
| rosarium | 0:892175366555 | 235 | |
| rosarium | 0:892175366555 | 236 | /* M24LR can write a maximum of 4 bytes in EEPROM per i2c communication */ |
| rosarium | 0:892175366555 | 237 | do |
| rosarium | 0:892175366555 | 238 | { |
| rosarium | 0:892175366555 | 239 | /* To write data in M24LR, data must be aligned on the same row in memory */ |
| rosarium | 0:892175366555 | 240 | /* align_mem_offset is used to copy only Bytes that are on the same row in memory */ |
| rosarium | 0:892175366555 | 241 | if( bytes_to_write > M24LR_PAGEWRITE_NBBYTE ) |
| rosarium | 0:892175366555 | 242 | { |
| rosarium | 0:892175366555 | 243 | /* DataSize higher than max page write, copy data by page */ |
| rosarium | 0:892175366555 | 244 | align_mem_offset = M24LR_PAGEWRITE_NBBYTE - (mem_addr % M24LR_PAGEWRITE_NBBYTE); |
| rosarium | 0:892175366555 | 245 | } |
| rosarium | 0:892175366555 | 246 | else |
| rosarium | 0:892175366555 | 247 | { |
| rosarium | 0:892175366555 | 248 | /* DataSize lower or equal to max page write, copy only last bytes */ |
| rosarium | 0:892175366555 | 249 | align_mem_offset = bytes_to_write; |
| rosarium | 0:892175366555 | 250 | } |
| rosarium | 0:892175366555 | 251 | /* Write align_mem_offset bytes in memory */ |
| rosarium | 0:892175366555 | 252 | /* Rosarium to Check as the address here is 0xA6 rather than 0xAE */ |
| rosarium | 0:892175366555 | 253 | /* Rosarium dev_I2C.i2c_write(pdata_index, M24LR_ADDR_DATA_I2C, mem_addr, align_mem_offset); */ |
| rosarium | 0:892175366555 | 254 | status = dev_I2C.i2c_write(pdata_index, i2c_address_data, mem_addr, align_mem_offset); |
| rosarium | 0:892175366555 | 255 | |
| rosarium | 0:892175366555 | 256 | /* update index, dest address, size for next write */ |
| rosarium | 0:892175366555 | 257 | pdata_index += align_mem_offset; |
| rosarium | 0:892175366555 | 258 | mem_addr += align_mem_offset; |
| rosarium | 0:892175366555 | 259 | bytes_to_write -= align_mem_offset; |
| rosarium | 0:892175366555 | 260 | /* Poll until EEPROM is available */ |
| rosarium | 0:892175366555 | 261 | while( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) {}; |
| rosarium | 0:892175366555 | 262 | } |
| rosarium | 0:892175366555 | 263 | while( ( bytes_to_write > 0 ) && ( status == NFCTAG_OK ) ); |
| rosarium | 0:892175366555 | 264 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 265 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 266 | else |
| rosarium | 0:892175366555 | 267 | return NFCTAG_ERROR; |
| rosarium | 0:892175366555 | 268 | } |
| rosarium | 0:892175366555 | 269 | |
| rosarium | 0:892175366555 | 270 | /** |
| rosarium | 0:892175366555 | 271 | * @brief Read N register bytes starting from specified I2C address |
| rosarium | 0:892175366555 | 272 | * @param pData : pointer of the data to store |
| rosarium | 0:892175366555 | 273 | * @param TarAddr : I2C memory address to read |
| rosarium | 0:892175366555 | 274 | * @param NbByte : number of bytes to read |
| rosarium | 0:892175366555 | 275 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 276 | */ |
| rosarium | 0:892175366555 | 277 | NFCTAG_StatusTypeDef M24LR::i2c_ReadRegister( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte ) |
| rosarium | 0:892175366555 | 278 | { |
| rosarium | 0:892175366555 | 279 | /* Before calling read function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 280 | int status; |
| rosarium | 0:892175366555 | 281 | |
| rosarium | 0:892175366555 | 282 | /* Before calling any read function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 283 | if( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 284 | { |
| rosarium | 0:892175366555 | 285 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 286 | } |
| rosarium | 0:892175366555 | 287 | /* Read actual value of register */ |
| rosarium | 0:892175366555 | 288 | status = dev_I2C.i2c_read(pData, i2c_address_syst, TarAddr, NbByte); |
| rosarium | 0:892175366555 | 289 | |
| rosarium | 0:892175366555 | 290 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 291 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 292 | else |
| rosarium | 0:892175366555 | 293 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 294 | } |
| rosarium | 0:892175366555 | 295 | |
| rosarium | 0:892175366555 | 296 | /** |
| rosarium | 0:892175366555 | 297 | * @brief Write N bytes to specific register |
| rosarium | 0:892175366555 | 298 | * @param pData : pointer of the data to write |
| rosarium | 0:892175366555 | 299 | * @param TarAddr : I2C register address to write |
| rosarium | 0:892175366555 | 300 | * @param NbByte : number of bytes to write |
| rosarium | 0:892175366555 | 301 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 302 | */ |
| rosarium | 0:892175366555 | 303 | NFCTAG_StatusTypeDef M24LR::i2c_WriteRegister( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte ) |
| rosarium | 0:892175366555 | 304 | { |
| rosarium | 0:892175366555 | 305 | int status; |
| rosarium | 0:892175366555 | 306 | uint8_t align_mem_offset; |
| rosarium | 0:892175366555 | 307 | uint16_t bytes_to_write = NbByte; |
| rosarium | 0:892175366555 | 308 | uint16_t mem_addr = TarAddr; |
| rosarium | 0:892175366555 | 309 | uint8_t *pdata_index = (uint8_t *)pData; |
| rosarium | 0:892175366555 | 310 | |
| rosarium | 0:892175366555 | 311 | /* Before calling this function M24LR must be ready, here is a check to detect an issue */ |
| rosarium | 0:892175366555 | 312 | if( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 313 | { |
| rosarium | 0:892175366555 | 314 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 315 | } |
| rosarium | 0:892175366555 | 316 | |
| rosarium | 0:892175366555 | 317 | /* M24LR can write a maximum of 4 bytes in EEPROM per i2c communication */ |
| rosarium | 0:892175366555 | 318 | do |
| rosarium | 0:892175366555 | 319 | { |
| rosarium | 0:892175366555 | 320 | /* To write data in M24LR, data must be aligned on the same row in memory */ |
| rosarium | 0:892175366555 | 321 | /* align_mem_offset is used to copy only Bytes that are on the same row in memory */ |
| rosarium | 0:892175366555 | 322 | if( bytes_to_write > M24LR_PAGEWRITE_NBBYTE ) |
| rosarium | 0:892175366555 | 323 | { |
| rosarium | 0:892175366555 | 324 | /* DataSize higher than max page write, copy data by page */ |
| rosarium | 0:892175366555 | 325 | align_mem_offset = M24LR_PAGEWRITE_NBBYTE - (mem_addr % M24LR_PAGEWRITE_NBBYTE); |
| rosarium | 0:892175366555 | 326 | } |
| rosarium | 0:892175366555 | 327 | else |
| rosarium | 0:892175366555 | 328 | { |
| rosarium | 0:892175366555 | 329 | /* DataSize lower or equal to max page write, copy only last bytes */ |
| rosarium | 0:892175366555 | 330 | align_mem_offset = bytes_to_write; |
| rosarium | 0:892175366555 | 331 | } |
| rosarium | 0:892175366555 | 332 | /* Write align_mem_offset bytes in register */ |
| rosarium | 0:892175366555 | 333 | // status = M24lr_IO_MemWrite( pdata_index, M24LR_ADDR_SYST_I2C, mem_addr, align_mem_offset ); |
| rosarium | 0:892175366555 | 334 | status = dev_I2C.i2c_write(pdata_index, i2c_address_syst, mem_addr, align_mem_offset); |
| rosarium | 0:892175366555 | 335 | /* update index, dest address, size for next write */ |
| rosarium | 0:892175366555 | 336 | pdata_index += align_mem_offset; |
| rosarium | 0:892175366555 | 337 | mem_addr += align_mem_offset; |
| rosarium | 0:892175366555 | 338 | bytes_to_write -= align_mem_offset; |
| rosarium | 0:892175366555 | 339 | /* Poll until EEPROM is available */ |
| rosarium | 0:892175366555 | 340 | while( i2c_IsDeviceReady( 1 ) != NFCTAG_OK ) {}; |
| rosarium | 0:892175366555 | 341 | } |
| rosarium | 0:892175366555 | 342 | while( ( bytes_to_write > 0 ) && ( status == NFCTAG_OK ) ); |
| rosarium | 0:892175366555 | 343 | |
| rosarium | 0:892175366555 | 344 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 345 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 346 | else |
| rosarium | 0:892175366555 | 347 | return NFCTAG_ERROR; |
| rosarium | 0:892175366555 | 348 | } |
| rosarium | 0:892175366555 | 349 | |
| rosarium | 0:892175366555 | 350 | /** |
| rosarium | 0:892175366555 | 351 | * @brief Read M24LR UID |
| rosarium | 0:892175366555 | 352 | * @param UID : M24LR_UID pointer of the UID to store |
| rosarium | 0:892175366555 | 353 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 354 | */ |
| rosarium | 0:892175366555 | 355 | NFCTAG_StatusTypeDef M24LR::i2c_ReadUID( M24LR_UID * const pUid ) |
| rosarium | 0:892175366555 | 356 | { |
| rosarium | 0:892175366555 | 357 | uint8_t areg_value[8]; |
| rosarium | 0:892175366555 | 358 | uint8_t i; |
| rosarium | 0:892175366555 | 359 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 360 | |
| rosarium | 0:892175366555 | 361 | /* Read actual value of UID registers */ |
| rosarium | 0:892175366555 | 362 | status = i2c_ReadRegister( areg_value, M24LR_UID_REG, 8 ); |
| rosarium | 0:892175366555 | 363 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 364 | { |
| rosarium | 0:892175366555 | 365 | return status; |
| rosarium | 0:892175366555 | 366 | } |
| rosarium | 0:892175366555 | 367 | |
| rosarium | 0:892175366555 | 368 | /* Store information in 2 WORD */ |
| rosarium | 0:892175366555 | 369 | pUid->MSB_UID = 0; |
| rosarium | 0:892175366555 | 370 | |
| rosarium | 0:892175366555 | 371 | for( i = 0; i < 4; i++ ) |
| rosarium | 0:892175366555 | 372 | { |
| rosarium | 0:892175366555 | 373 | pUid->MSB_UID = (pUid->MSB_UID << 8) | areg_value[7 - i]; |
| rosarium | 0:892175366555 | 374 | } |
| rosarium | 0:892175366555 | 375 | |
| rosarium | 0:892175366555 | 376 | pUid->LSB_UID = 0; |
| rosarium | 0:892175366555 | 377 | |
| rosarium | 0:892175366555 | 378 | for( i = 0; i < 4; i++ ) |
| rosarium | 0:892175366555 | 379 | { |
| rosarium | 0:892175366555 | 380 | pUid->LSB_UID = (pUid->LSB_UID << 8) | areg_value[3 - i]; |
| rosarium | 0:892175366555 | 381 | } |
| rosarium | 0:892175366555 | 382 | |
| rosarium | 0:892175366555 | 383 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 384 | } |
| rosarium | 0:892175366555 | 385 | |
| rosarium | 0:892175366555 | 386 | /** |
| rosarium | 0:892175366555 | 387 | * @brief Read DSFID |
| rosarium | 0:892175366555 | 388 | * @param pData : pointer of the DSFID to store |
| rosarium | 0:892175366555 | 389 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 390 | */ |
| rosarium | 0:892175366555 | 391 | NFCTAG_StatusTypeDef M24LR::i2c_ReadDSFID( uint8_t * const pDsfid ) |
| rosarium | 0:892175366555 | 392 | { |
| rosarium | 0:892175366555 | 393 | /* Read actual value of DSFID register */ |
| rosarium | 0:892175366555 | 394 | return i2c_ReadRegister( pDsfid, M24LR_DSFID_REG, 1 ); |
| rosarium | 0:892175366555 | 395 | } |
| rosarium | 0:892175366555 | 396 | |
| rosarium | 0:892175366555 | 397 | /** |
| rosarium | 0:892175366555 | 398 | * @brief Read AFI |
| rosarium | 0:892175366555 | 399 | * @param pData : pointer of the AFI to store |
| rosarium | 0:892175366555 | 400 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 401 | */ |
| rosarium | 0:892175366555 | 402 | NFCTAG_StatusTypeDef M24LR::i2c_ReadAFI( uint8_t * const pAfi ) |
| rosarium | 0:892175366555 | 403 | { |
| rosarium | 0:892175366555 | 404 | /* Read actual value of AFI register */ |
| rosarium | 0:892175366555 | 405 | return i2c_ReadRegister( pAfi, M24LR_AFI_REG, 1 ); |
| rosarium | 0:892175366555 | 406 | } |
| rosarium | 0:892175366555 | 407 | |
| rosarium | 0:892175366555 | 408 | /** |
| rosarium | 0:892175366555 | 409 | * @brief Read status of I2C Lock Sectors |
| rosarium | 0:892175366555 | 410 | * @param Lock_sector : M24LR_Lock_Sectors pointer of the I2c lock sector status to store |
| rosarium | 0:892175366555 | 411 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 412 | */ |
| rosarium | 0:892175366555 | 413 | NFCTAG_StatusTypeDef M24LR::i2c_ReadI2CLockSector( M24LR_Lock_Sectors * const pLock_sector ) |
| rosarium | 0:892175366555 | 414 | { |
| rosarium | 0:892175366555 | 415 | uint8_t areg_value[8]; |
| rosarium | 0:892175366555 | 416 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 417 | |
| rosarium | 0:892175366555 | 418 | /* Read actual value of I2c Write Lock registers */ |
| rosarium | 0:892175366555 | 419 | status = i2c_ReadRegister( areg_value, M24LR_LOCK_REG, 8 ); |
| rosarium | 0:892175366555 | 420 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 421 | { |
| rosarium | 0:892175366555 | 422 | return status; |
| rosarium | 0:892175366555 | 423 | } |
| rosarium | 0:892175366555 | 424 | |
| rosarium | 0:892175366555 | 425 | /* Dispatch information to corresponding struct member */ |
| rosarium | 0:892175366555 | 426 | pLock_sector->sectors_63_56 = areg_value[7]; |
| rosarium | 0:892175366555 | 427 | pLock_sector->sectors_55_48 = areg_value[6]; |
| rosarium | 0:892175366555 | 428 | pLock_sector->sectors_47_40 = areg_value[5]; |
| rosarium | 0:892175366555 | 429 | pLock_sector->sectors_39_32 = areg_value[4]; |
| rosarium | 0:892175366555 | 430 | pLock_sector->sectors_31_24 = areg_value[3]; |
| rosarium | 0:892175366555 | 431 | pLock_sector->sectors_23_16 = areg_value[2]; |
| rosarium | 0:892175366555 | 432 | pLock_sector->sectors_15_8 = areg_value[1]; |
| rosarium | 0:892175366555 | 433 | pLock_sector->sectors_7_0 = areg_value[0]; |
| rosarium | 0:892175366555 | 434 | |
| rosarium | 0:892175366555 | 435 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 436 | } |
| rosarium | 0:892175366555 | 437 | |
| rosarium | 0:892175366555 | 438 | /** |
| rosarium | 0:892175366555 | 439 | * @brief Lock I2C write on an EEPROM Sectors |
| rosarium | 0:892175366555 | 440 | * @brief Need a presentation of I2C Password to be effective |
| rosarium | 0:892175366555 | 441 | * @param Sector : EEPROM Sector number to lock (between 0 to 63) |
| rosarium | 0:892175366555 | 442 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 443 | */ |
| rosarium | 0:892175366555 | 444 | NFCTAG_StatusTypeDef M24LR::i2c_I2CLockSector( const uint8_t Sector ) |
| rosarium | 0:892175366555 | 445 | { |
| rosarium | 0:892175366555 | 446 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 447 | uint8_t reg_value = 0; |
| rosarium | 0:892175366555 | 448 | uint16_t sector_write_lock_addr; |
| rosarium | 0:892175366555 | 449 | |
| rosarium | 0:892175366555 | 450 | /* Compute register address */ |
| rosarium | 0:892175366555 | 451 | sector_write_lock_addr = M24LR_LOCK_REG | (Sector >> 3); |
| rosarium | 0:892175366555 | 452 | |
| rosarium | 0:892175366555 | 453 | /* Read actual WriteLockStatus */ |
| rosarium | 0:892175366555 | 454 | status = i2c_ReadRegister( ®_value, sector_write_lock_addr, 1 ); |
| rosarium | 0:892175366555 | 455 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 456 | { |
| rosarium | 0:892175366555 | 457 | return status; |
| rosarium | 0:892175366555 | 458 | } |
| rosarium | 0:892175366555 | 459 | |
| rosarium | 0:892175366555 | 460 | /* Compute and update new WriteLockStatus */ |
| rosarium | 0:892175366555 | 461 | reg_value |= 1 << ( Sector % 8 ); |
| rosarium | 0:892175366555 | 462 | |
| rosarium | 0:892175366555 | 463 | /* Write WriteLock register */ |
| rosarium | 0:892175366555 | 464 | return i2c_WriteRegister( ®_value, sector_write_lock_addr, 1 ); |
| rosarium | 0:892175366555 | 465 | } |
| rosarium | 0:892175366555 | 466 | |
| rosarium | 0:892175366555 | 467 | /** |
| rosarium | 0:892175366555 | 468 | * @brief UnLock I2C write on a EEPROM Sector |
| rosarium | 0:892175366555 | 469 | * @brief Need an presentation of I2C Password to be effective |
| rosarium | 0:892175366555 | 470 | * @param pSector : EEPROM Sector number to unlock (between 0 to 63) |
| rosarium | 0:892175366555 | 471 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 472 | */ |
| rosarium | 0:892175366555 | 473 | NFCTAG_StatusTypeDef M24LR::i2c_I2CUnlockSector( const uint8_t Sector ) |
| rosarium | 0:892175366555 | 474 | { |
| rosarium | 0:892175366555 | 475 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 476 | uint8_t reg_value = 0; |
| rosarium | 0:892175366555 | 477 | uint16_t sector_write_lock_addr; |
| rosarium | 0:892175366555 | 478 | |
| rosarium | 0:892175366555 | 479 | /* Compute register address */ |
| rosarium | 0:892175366555 | 480 | sector_write_lock_addr = M24LR_LOCK_REG | (Sector >> 3); |
| rosarium | 0:892175366555 | 481 | |
| rosarium | 0:892175366555 | 482 | /* Read actual WriteLockStatus */ |
| rosarium | 0:892175366555 | 483 | status = i2c_ReadRegister( ®_value, sector_write_lock_addr, 1 ); |
| rosarium | 0:892175366555 | 484 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 485 | { |
| rosarium | 0:892175366555 | 486 | return status; |
| rosarium | 0:892175366555 | 487 | } |
| rosarium | 0:892175366555 | 488 | |
| rosarium | 0:892175366555 | 489 | /* Compute and update new WriteLockStatus */ |
| rosarium | 0:892175366555 | 490 | reg_value &= ~( 1 << ( Sector % 8 ) ); |
| rosarium | 0:892175366555 | 491 | |
| rosarium | 0:892175366555 | 492 | /* Write WriteLock register */ |
| rosarium | 0:892175366555 | 493 | return i2c_WriteRegister( ®_value, sector_write_lock_addr, 1 ); |
| rosarium | 0:892175366555 | 494 | } |
| rosarium | 0:892175366555 | 495 | |
| rosarium | 0:892175366555 | 496 | /** |
| rosarium | 0:892175366555 | 497 | * @brief Present I2C password, authorize I2C write |
| rosarium | 0:892175366555 | 498 | * @param PassWord : Password value on 32bits |
| rosarium | 0:892175366555 | 499 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 500 | */ |
| rosarium | 0:892175366555 | 501 | NFCTAG_StatusTypeDef M24LR::i2c_PresentI2CPassword( const uint32_t PassWord ) |
| rosarium | 0:892175366555 | 502 | { |
| rosarium | 0:892175366555 | 503 | uint8_t ai2c_message[9] = {0}; |
| rosarium | 0:892175366555 | 504 | uint8_t i; |
| rosarium | 0:892175366555 | 505 | |
| rosarium | 0:892175366555 | 506 | /* Build I2C Message with Password + Validation code 0x09 + Password */ |
| rosarium | 0:892175366555 | 507 | ai2c_message[4] = 0x09; |
| rosarium | 0:892175366555 | 508 | i = 0; |
| rosarium | 0:892175366555 | 509 | while( i < 4 ) |
| rosarium | 0:892175366555 | 510 | { |
| rosarium | 0:892175366555 | 511 | ai2c_message[i] = ( PassWord >> (i * 8) ) & 0xFF; |
| rosarium | 0:892175366555 | 512 | ai2c_message[i + 5] = ( PassWord >> (i * 8) ) & 0xFF; |
| rosarium | 0:892175366555 | 513 | i++; |
| rosarium | 0:892175366555 | 514 | }; |
| rosarium | 0:892175366555 | 515 | |
| rosarium | 0:892175366555 | 516 | /* Present password to M24LR */ |
| rosarium | 0:892175366555 | 517 | return i2c_WriteRegister( ai2c_message, M24LR_I2C_PWD_REG, 9 ); |
| rosarium | 0:892175366555 | 518 | } |
| rosarium | 0:892175366555 | 519 | |
| rosarium | 0:892175366555 | 520 | /** |
| rosarium | 0:892175366555 | 521 | * @brief Write new I2C password |
| rosarium | 0:892175366555 | 522 | * @brief Need to present good I2CPassword before using this function |
| rosarium | 0:892175366555 | 523 | * @param PassWord : new I2C PassWord value on 32bits |
| rosarium | 0:892175366555 | 524 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 525 | */ |
| rosarium | 0:892175366555 | 526 | NFCTAG_StatusTypeDef M24LR::i2c_WriteI2CPassword( const uint32_t PassWord ) |
| rosarium | 0:892175366555 | 527 | { |
| rosarium | 0:892175366555 | 528 | uint8_t ai2c_message[9] = {0}; |
| rosarium | 0:892175366555 | 529 | uint8_t i; |
| rosarium | 0:892175366555 | 530 | |
| rosarium | 0:892175366555 | 531 | /* Build I2C Message with Password + Validation code 0x07 + Password */ |
| rosarium | 0:892175366555 | 532 | ai2c_message[4] = 0x07; |
| rosarium | 0:892175366555 | 533 | i = 0; |
| rosarium | 0:892175366555 | 534 | while( i < 4 ) |
| rosarium | 0:892175366555 | 535 | { |
| rosarium | 0:892175366555 | 536 | ai2c_message[i] = ( PassWord >> (i * 8) ) & 0xFF; |
| rosarium | 0:892175366555 | 537 | ai2c_message[i + 5] = ( PassWord >> (i * 8) ) & 0xFF; |
| rosarium | 0:892175366555 | 538 | i++; |
| rosarium | 0:892175366555 | 539 | }; |
| rosarium | 0:892175366555 | 540 | |
| rosarium | 0:892175366555 | 541 | /* Write Password to register */ |
| rosarium | 0:892175366555 | 542 | return i2c_WriteRegister( ai2c_message, M24LR_I2C_PWD_REG, 9 ); |
| rosarium | 0:892175366555 | 543 | } |
| rosarium | 0:892175366555 | 544 | |
| rosarium | 0:892175366555 | 545 | /** |
| rosarium | 0:892175366555 | 546 | * @brief Read SectorSecurityStatus (defining RF access allowed) |
| rosarium | 0:892175366555 | 547 | * @param SectorNb : Sector number to get RF security status |
| rosarium | 0:892175366555 | 548 | * @param pData : M24LR_SECTOR_SEC pointer of the data to store |
| rosarium | 0:892175366555 | 549 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 550 | */ |
| rosarium | 0:892175366555 | 551 | NFCTAG_StatusTypeDef M24LR::i2c_ReadSSSx( const uint8_t SectorNb, M24LR_SECTOR_SEC * const pData ) |
| rosarium | 0:892175366555 | 552 | { |
| rosarium | 0:892175366555 | 553 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 554 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 555 | uint16_t sector_security_addr; |
| rosarium | 0:892175366555 | 556 | |
| rosarium | 0:892175366555 | 557 | /* Compute Sector Security register address */ |
| rosarium | 0:892175366555 | 558 | sector_security_addr = M24LR_SSS_REG | SectorNb; |
| rosarium | 0:892175366555 | 559 | |
| rosarium | 0:892175366555 | 560 | /* Read actual value of SectorSecurityStatus register */ |
| rosarium | 0:892175366555 | 561 | status = i2c_ReadRegister( ®_value, sector_security_addr, 1 ); |
| rosarium | 0:892175366555 | 562 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 563 | { |
| rosarium | 0:892175366555 | 564 | return status; |
| rosarium | 0:892175366555 | 565 | } |
| rosarium | 0:892175366555 | 566 | |
| rosarium | 0:892175366555 | 567 | /* Extract Sector Security Status configuration */ |
| rosarium | 0:892175366555 | 568 | pData->SectorLock = reg_value & M24LR_SSS_LOCK_MASK; |
| rosarium | 0:892175366555 | 569 | pData->RW_Protection = (reg_value & M24LR_SSS_RW_MASK) >> 1; |
| rosarium | 0:892175366555 | 570 | pData->PassCtrl = (reg_value & M24LR_SSS_PASSCTRL_MASK) >> 3; |
| rosarium | 0:892175366555 | 571 | |
| rosarium | 0:892175366555 | 572 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 573 | } |
| rosarium | 0:892175366555 | 574 | |
| rosarium | 0:892175366555 | 575 | /** |
| rosarium | 0:892175366555 | 576 | * @brief Write SectorSecurityStatus (defining RF access allowed) |
| rosarium | 0:892175366555 | 577 | * @brief Need an presentation of I2C Password to be effective |
| rosarium | 0:892175366555 | 578 | * @param SectorNb : Sector number to set RF security |
| rosarium | 0:892175366555 | 579 | * @param pData : M24LR_SECTOR_SEC pointer of the data to write |
| rosarium | 0:892175366555 | 580 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 581 | */ |
| rosarium | 0:892175366555 | 582 | NFCTAG_StatusTypeDef M24LR::i2c_WriteSSSx( const uint8_t SectorNb, const M24LR_SECTOR_SEC * const pData ) |
| rosarium | 0:892175366555 | 583 | { |
| rosarium | 0:892175366555 | 584 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 585 | uint16_t sector_security_addr; |
| rosarium | 0:892175366555 | 586 | |
| rosarium | 0:892175366555 | 587 | /* Compute Sector Security register address */ |
| rosarium | 0:892175366555 | 588 | sector_security_addr = M24LR_SSS_REG | SectorNb; |
| rosarium | 0:892175366555 | 589 | |
| rosarium | 0:892175366555 | 590 | /* Update Sector Security Status */ |
| rosarium | 0:892175366555 | 591 | reg_value = (pData->PassCtrl << 3) & M24LR_SSS_PASSCTRL_MASK; |
| rosarium | 0:892175366555 | 592 | reg_value |= ((pData->RW_Protection << 1) & M24LR_SSS_RW_MASK); |
| rosarium | 0:892175366555 | 593 | reg_value |= (pData->SectorLock & M24LR_SSS_LOCK_MASK); |
| rosarium | 0:892175366555 | 594 | |
| rosarium | 0:892175366555 | 595 | /* Write SectorSecurityStatus register */ |
| rosarium | 0:892175366555 | 596 | return i2c_WriteRegister( ®_value, sector_security_addr, 1 ); |
| rosarium | 0:892175366555 | 597 | } |
| rosarium | 0:892175366555 | 598 | |
| rosarium | 0:892175366555 | 599 | /** |
| rosarium | 0:892175366555 | 600 | * @brief Read Memory Size info |
| rosarium | 0:892175366555 | 601 | * @param SizeInfo : M24LR_Mem_Size pointer of the data to store |
| rosarium | 0:892175366555 | 602 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 603 | */ |
| rosarium | 0:892175366555 | 604 | NFCTAG_StatusTypeDef M24LR::i2c_ReadMemSize( M24LR_Mem_Size * const pSizeInfo ) |
| rosarium | 0:892175366555 | 605 | { |
| rosarium | 0:892175366555 | 606 | uint8_t areg_value[3]; |
| rosarium | 0:892175366555 | 607 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 608 | |
| rosarium | 0:892175366555 | 609 | /* Read actual value of Mem_Size register */ |
| rosarium | 0:892175366555 | 610 | status = i2c_ReadRegister( areg_value, M24LR_MEMSIZE_REG, 3 ); |
| rosarium | 0:892175366555 | 611 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 612 | { |
| rosarium | 0:892175366555 | 613 | return status; |
| rosarium | 0:892175366555 | 614 | } |
| rosarium | 0:892175366555 | 615 | |
| rosarium | 0:892175366555 | 616 | /* Extract Mem information */ |
| rosarium | 0:892175366555 | 617 | pSizeInfo->BlockSize = areg_value[2]; |
| rosarium | 0:892175366555 | 618 | pSizeInfo->Mem_Size = areg_value[1]; |
| rosarium | 0:892175366555 | 619 | pSizeInfo->Mem_Size = (pSizeInfo->Mem_Size << 8) | areg_value[0]; |
| rosarium | 0:892175366555 | 620 | |
| rosarium | 0:892175366555 | 621 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 622 | } |
| rosarium | 0:892175366555 | 623 | |
| rosarium | 0:892175366555 | 624 | /** |
| rosarium | 0:892175366555 | 625 | * @brief Get GPO Configuration status |
| rosarium | 0:892175366555 | 626 | * @param Rf_Wip_Busy : M24LR_GPO_STATUS pointer of the data to store |
| rosarium | 0:892175366555 | 627 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 628 | */ |
| rosarium | 0:892175366555 | 629 | NFCTAG_StatusTypeDef M24LR::i2c_GetRF_WIP_BUSY( M24LR_GPO_STATUS * const pRf_Wip_Busy ) |
| rosarium | 0:892175366555 | 630 | { |
| rosarium | 0:892175366555 | 631 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 632 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 633 | |
| rosarium | 0:892175366555 | 634 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 635 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 636 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 637 | { |
| rosarium | 0:892175366555 | 638 | return status; |
| rosarium | 0:892175366555 | 639 | } |
| rosarium | 0:892175366555 | 640 | |
| rosarium | 0:892175366555 | 641 | /* Extract RF WIP/BUSY information */ |
| rosarium | 0:892175366555 | 642 | if( (reg_value & M24LR_CFG_WIPBUSY_MASK) == M24LR_CFG_WIPBUSY_MASK ) |
| rosarium | 0:892175366555 | 643 | { |
| rosarium | 0:892175366555 | 644 | *pRf_Wip_Busy = M24LR_GPO_WIP; |
| rosarium | 0:892175366555 | 645 | } |
| rosarium | 0:892175366555 | 646 | else |
| rosarium | 0:892175366555 | 647 | { |
| rosarium | 0:892175366555 | 648 | *pRf_Wip_Busy = M24LR_GPO_BUSY; |
| rosarium | 0:892175366555 | 649 | } |
| rosarium | 0:892175366555 | 650 | |
| rosarium | 0:892175366555 | 651 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 652 | } |
| rosarium | 0:892175366555 | 653 | |
| rosarium | 0:892175366555 | 654 | /** |
| rosarium | 0:892175366555 | 655 | * @brief Configure GPO as RF Busy |
| rosarium | 0:892175366555 | 656 | * @param None |
| rosarium | 0:892175366555 | 657 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 658 | */ |
| rosarium | 0:892175366555 | 659 | NFCTAG_StatusTypeDef M24LR::i2c_SetRFBUSY( void ) |
| rosarium | 0:892175366555 | 660 | { |
| rosarium | 0:892175366555 | 661 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 662 | int status; |
| rosarium | 0:892175366555 | 663 | |
| rosarium | 0:892175366555 | 664 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 665 | status = dev_I2C.i2c_read( ®_value, i2c_address_syst, (uint16_t)M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 666 | if( status != 0 ) |
| rosarium | 0:892175366555 | 667 | { |
| rosarium | 0:892175366555 | 668 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 669 | } |
| rosarium | 0:892175366555 | 670 | |
| rosarium | 0:892175366555 | 671 | /* Update register value for BUSY configuration */ |
| rosarium | 0:892175366555 | 672 | reg_value &= !M24LR_CFG_WIPBUSY_MASK; |
| rosarium | 0:892175366555 | 673 | |
| rosarium | 0:892175366555 | 674 | /* Write CFG register */ |
| rosarium | 0:892175366555 | 675 | status = i2c_WriteRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 676 | if ( status == 0 ) |
| rosarium | 0:892175366555 | 677 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 678 | else |
| rosarium | 0:892175366555 | 679 | return NFCTAG_TIMEOUT; |
| rosarium | 0:892175366555 | 680 | } |
| rosarium | 0:892175366555 | 681 | |
| rosarium | 0:892175366555 | 682 | |
| rosarium | 0:892175366555 | 683 | /** |
| rosarium | 0:892175366555 | 684 | * @brief Get Energy harvesting mode status |
| rosarium | 0:892175366555 | 685 | * @param EH_mode : M24LR_EH_MODE_STATUS pointer of the data to store |
| rosarium | 0:892175366555 | 686 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 687 | */ |
| rosarium | 0:892175366555 | 688 | NFCTAG_StatusTypeDef M24LR::i2c_Read_EH_mode( M24LR_EH_MODE_STATUS * const pEH_mode ) |
| rosarium | 0:892175366555 | 689 | { |
| rosarium | 0:892175366555 | 690 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 691 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 692 | |
| rosarium | 0:892175366555 | 693 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 694 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 695 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 696 | { |
| rosarium | 0:892175366555 | 697 | return status; |
| rosarium | 0:892175366555 | 698 | } |
| rosarium | 0:892175366555 | 699 | |
| rosarium | 0:892175366555 | 700 | /* Extract EH_mode configuration */ |
| rosarium | 0:892175366555 | 701 | if( (reg_value & M24LR_CFG_EHMODE_MASK) == M24LR_CFG_EHMODE_MASK ) |
| rosarium | 0:892175366555 | 702 | { |
| rosarium | 0:892175366555 | 703 | *pEH_mode = M24LR_EH_MODE_DISABLE; |
| rosarium | 0:892175366555 | 704 | } |
| rosarium | 0:892175366555 | 705 | else |
| rosarium | 0:892175366555 | 706 | { |
| rosarium | 0:892175366555 | 707 | *pEH_mode = M24LR_EH_MODE_ENABLE; |
| rosarium | 0:892175366555 | 708 | } |
| rosarium | 0:892175366555 | 709 | |
| rosarium | 0:892175366555 | 710 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 711 | } |
| rosarium | 0:892175366555 | 712 | |
| rosarium | 0:892175366555 | 713 | /** |
| rosarium | 0:892175366555 | 714 | * @brief Enable Energy harvesting mode |
| rosarium | 0:892175366555 | 715 | * @param None |
| rosarium | 0:892175366555 | 716 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 717 | */ |
| rosarium | 0:892175366555 | 718 | NFCTAG_StatusTypeDef M24LR::i2c_Enable_EH_mode( void ) |
| rosarium | 0:892175366555 | 719 | { |
| rosarium | 0:892175366555 | 720 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 721 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 722 | |
| rosarium | 0:892175366555 | 723 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 724 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 725 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 726 | { |
| rosarium | 0:892175366555 | 727 | return status; |
| rosarium | 0:892175366555 | 728 | } |
| rosarium | 0:892175366555 | 729 | |
| rosarium | 0:892175366555 | 730 | /* Update EH_mode */ |
| rosarium | 0:892175366555 | 731 | reg_value &= ~M24LR_CFG_EHMODE_MASK; |
| rosarium | 0:892175366555 | 732 | |
| rosarium | 0:892175366555 | 733 | /* Write CFG register */ |
| rosarium | 0:892175366555 | 734 | return i2c_WriteRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 735 | } |
| rosarium | 0:892175366555 | 736 | |
| rosarium | 0:892175366555 | 737 | /** |
| rosarium | 0:892175366555 | 738 | * @brief Disable Energy harvesting mode |
| rosarium | 0:892175366555 | 739 | * @param None |
| rosarium | 0:892175366555 | 740 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 741 | */ |
| rosarium | 0:892175366555 | 742 | NFCTAG_StatusTypeDef M24LR::i2c_Disable_EH_mode( void ) |
| rosarium | 0:892175366555 | 743 | { |
| rosarium | 0:892175366555 | 744 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 745 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 746 | |
| rosarium | 0:892175366555 | 747 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 748 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 749 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 750 | { |
| rosarium | 0:892175366555 | 751 | return status; |
| rosarium | 0:892175366555 | 752 | } |
| rosarium | 0:892175366555 | 753 | |
| rosarium | 0:892175366555 | 754 | /* Update EH_mode */ |
| rosarium | 0:892175366555 | 755 | reg_value |= M24LR_CFG_EHMODE_MASK; |
| rosarium | 0:892175366555 | 756 | |
| rosarium | 0:892175366555 | 757 | /* Write CFG register */ |
| rosarium | 0:892175366555 | 758 | return i2c_WriteRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 759 | } |
| rosarium | 0:892175366555 | 760 | |
| rosarium | 0:892175366555 | 761 | /** |
| rosarium | 0:892175366555 | 762 | * @brief Read Vout sink current configuration status for Energy Harvesting |
| rosarium | 0:892175366555 | 763 | * @param EH_Cfg : M24LR_EH_CFG_VOUT pointer of the data to store |
| rosarium | 0:892175366555 | 764 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 765 | */ |
| rosarium | 0:892175366555 | 766 | NFCTAG_StatusTypeDef M24LR::i2c_ReadEH_Cfg( M24LR_EH_CFG_VOUT * const pEH_Cfg ) |
| rosarium | 0:892175366555 | 767 | { |
| rosarium | 0:892175366555 | 768 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 769 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 770 | |
| rosarium | 0:892175366555 | 771 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 772 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 773 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 774 | { |
| rosarium | 0:892175366555 | 775 | return status; |
| rosarium | 0:892175366555 | 776 | } |
| rosarium | 0:892175366555 | 777 | |
| rosarium | 0:892175366555 | 778 | /* Extract Vout configuration for EH information */ |
| rosarium | 0:892175366555 | 779 | reg_value &= (M24LR_CFG_EHCFG1_MASK | M24LR_CFG_EHCFG0_MASK); |
| rosarium | 0:892175366555 | 780 | switch( reg_value ) |
| rosarium | 0:892175366555 | 781 | { |
| rosarium | 0:892175366555 | 782 | case 0: |
| rosarium | 0:892175366555 | 783 | *pEH_Cfg = M24LR_EH_Cfg_6MA; |
| rosarium | 0:892175366555 | 784 | break; |
| rosarium | 0:892175366555 | 785 | case 1: |
| rosarium | 0:892175366555 | 786 | *pEH_Cfg = M24LR_EH_Cfg_3MA; |
| rosarium | 0:892175366555 | 787 | break; |
| rosarium | 0:892175366555 | 788 | case 2: |
| rosarium | 0:892175366555 | 789 | *pEH_Cfg = M24LR_EH_Cfg_1MA; |
| rosarium | 0:892175366555 | 790 | break; |
| rosarium | 0:892175366555 | 791 | case 3: |
| rosarium | 0:892175366555 | 792 | *pEH_Cfg = M24LR_EH_Cfg_300UA; |
| rosarium | 0:892175366555 | 793 | break; |
| rosarium | 0:892175366555 | 794 | |
| rosarium | 0:892175366555 | 795 | default: |
| rosarium | 0:892175366555 | 796 | *pEH_Cfg = M24LR_EH_Cfg_6MA; |
| rosarium | 0:892175366555 | 797 | } |
| rosarium | 0:892175366555 | 798 | |
| rosarium | 0:892175366555 | 799 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 800 | } |
| rosarium | 0:892175366555 | 801 | |
| rosarium | 0:892175366555 | 802 | /** |
| rosarium | 0:892175366555 | 803 | * @brief Write Vout sink current configuration status for Energy Harvesting |
| rosarium | 0:892175366555 | 804 | * @param EH_Cfg : M24LR_EH_CFG_VOUT value to configure Vout |
| rosarium | 0:892175366555 | 805 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 806 | */ |
| rosarium | 0:892175366555 | 807 | NFCTAG_StatusTypeDef M24LR::i2c_WriteEH_Cfg( const M24LR_EH_CFG_VOUT EH_Cfg ) |
| rosarium | 0:892175366555 | 808 | { |
| rosarium | 0:892175366555 | 809 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 810 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 811 | |
| rosarium | 0:892175366555 | 812 | /* Read actual value of CFG register */ |
| rosarium | 0:892175366555 | 813 | status = i2c_ReadRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 814 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 815 | { |
| rosarium | 0:892175366555 | 816 | return status; |
| rosarium | 0:892175366555 | 817 | } |
| rosarium | 0:892175366555 | 818 | |
| rosarium | 0:892175366555 | 819 | /* Update Vout configuration */ |
| rosarium | 0:892175366555 | 820 | reg_value &= ~(M24LR_CFG_EHCFG1_MASK | M24LR_CFG_EHCFG0_MASK); |
| rosarium | 0:892175366555 | 821 | reg_value |= EH_Cfg; |
| rosarium | 0:892175366555 | 822 | |
| rosarium | 0:892175366555 | 823 | /* Write CFG register */ |
| rosarium | 0:892175366555 | 824 | return i2c_WriteRegister( ®_value, M24LR_CFG_REG, 1 ); |
| rosarium | 0:892175366555 | 825 | } |
| rosarium | 0:892175366555 | 826 | |
| rosarium | 0:892175366555 | 827 | /** |
| rosarium | 0:892175366555 | 828 | * @brief Get Energy Harvesting status |
| rosarium | 0:892175366555 | 829 | * @param EH_Val : M24LR_EH_STATUS pointer of the data to store |
| rosarium | 0:892175366555 | 830 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 831 | */ |
| rosarium | 0:892175366555 | 832 | NFCTAG_StatusTypeDef M24LR::i2c_GetEH( M24LR_EH_STATUS * const pEH_Val ) |
| rosarium | 0:892175366555 | 833 | { |
| rosarium | 0:892175366555 | 834 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 835 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 836 | |
| rosarium | 0:892175366555 | 837 | /* Read actual value of CTRL register */ |
| rosarium | 0:892175366555 | 838 | status = i2c_ReadRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 839 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 840 | { |
| rosarium | 0:892175366555 | 841 | return status; |
| rosarium | 0:892175366555 | 842 | } |
| rosarium | 0:892175366555 | 843 | |
| rosarium | 0:892175366555 | 844 | /* Extract EH information */ |
| rosarium | 0:892175366555 | 845 | if( (reg_value & M24LR_CTRL_EHEN_MASK) == M24LR_CTRL_EHEN_MASK ) |
| rosarium | 0:892175366555 | 846 | { |
| rosarium | 0:892175366555 | 847 | *pEH_Val = M24LR_EH_ENABLE; |
| rosarium | 0:892175366555 | 848 | } |
| rosarium | 0:892175366555 | 849 | else |
| rosarium | 0:892175366555 | 850 | { |
| rosarium | 0:892175366555 | 851 | *pEH_Val = M24LR_EH_DISABLE; |
| rosarium | 0:892175366555 | 852 | } |
| rosarium | 0:892175366555 | 853 | |
| rosarium | 0:892175366555 | 854 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 855 | } |
| rosarium | 0:892175366555 | 856 | |
| rosarium | 0:892175366555 | 857 | /** |
| rosarium | 0:892175366555 | 858 | * @brief Enable Energy Harvesting |
| rosarium | 0:892175366555 | 859 | * @param None |
| rosarium | 0:892175366555 | 860 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 861 | */ |
| rosarium | 0:892175366555 | 862 | NFCTAG_StatusTypeDef M24LR::i2c_SetEH( void ) |
| rosarium | 0:892175366555 | 863 | { |
| rosarium | 0:892175366555 | 864 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 865 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 866 | |
| rosarium | 0:892175366555 | 867 | /* Read actual value of CTRL register */ |
| rosarium | 0:892175366555 | 868 | status = i2c_ReadRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 869 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 870 | { |
| rosarium | 0:892175366555 | 871 | return status; |
| rosarium | 0:892175366555 | 872 | } |
| rosarium | 0:892175366555 | 873 | |
| rosarium | 0:892175366555 | 874 | /* Update EH configuration */ |
| rosarium | 0:892175366555 | 875 | reg_value |= M24LR_CTRL_EHEN_MASK; |
| rosarium | 0:892175366555 | 876 | |
| rosarium | 0:892175366555 | 877 | /* Write CTRL Register */ |
| rosarium | 0:892175366555 | 878 | return i2c_WriteRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 879 | } |
| rosarium | 0:892175366555 | 880 | |
| rosarium | 0:892175366555 | 881 | /** |
| rosarium | 0:892175366555 | 882 | * @brief Disable Energy Harvesting |
| rosarium | 0:892175366555 | 883 | * @param None |
| rosarium | 0:892175366555 | 884 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 885 | */ |
| rosarium | 0:892175366555 | 886 | NFCTAG_StatusTypeDef M24LR::i2c_ResetEH( void ) |
| rosarium | 0:892175366555 | 887 | { |
| rosarium | 0:892175366555 | 888 | uint8_t reg_value; |
| rosarium | 0:892175366555 | 889 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 890 | |
| rosarium | 0:892175366555 | 891 | /* Read actual value of CTRL register */ |
| rosarium | 0:892175366555 | 892 | status = i2c_ReadRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 893 | if( status != NFCTAG_OK ) |
| rosarium | 0:892175366555 | 894 | { |
| rosarium | 0:892175366555 | 895 | return status; |
| rosarium | 0:892175366555 | 896 | } |
| rosarium | 0:892175366555 | 897 | |
| rosarium | 0:892175366555 | 898 | /* Update EH configuration */ |
| rosarium | 0:892175366555 | 899 | reg_value &= ~M24LR_CTRL_EHEN_MASK; |
| rosarium | 0:892175366555 | 900 | |
| rosarium | 0:892175366555 | 901 | /* Write CTRL register */ |
| rosarium | 0:892175366555 | 902 | return i2c_WriteRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 903 | } |
| rosarium | 0:892175366555 | 904 | |
| rosarium | 0:892175366555 | 905 | /** |
| rosarium | 0:892175366555 | 906 | * @brief Check if RF Field is present in front of M24LR |
| rosarium | 0:892175366555 | 907 | * @param pRF_Field : M24LR_FIELD_STATUS pointer of the data to store |
| rosarium | 0:892175366555 | 908 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 909 | */ |
| rosarium | 0:892175366555 | 910 | NFCTAG_StatusTypeDef M24LR::i2c_GetRFField( M24LR_FIELD_STATUS * const pRF_Field ) |
| rosarium | 0:892175366555 | 911 | { |
| rosarium | 0:892175366555 | 912 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 913 | uint8_t reg_value = 0; |
| rosarium | 0:892175366555 | 914 | |
| rosarium | 0:892175366555 | 915 | /* Read actual value of CTRL register */ |
| rosarium | 0:892175366555 | 916 | status = i2c_ReadRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 917 | |
| rosarium | 0:892175366555 | 918 | /* Extract RF Field information */ |
| rosarium | 0:892175366555 | 919 | if( status == NFCTAG_OK ) |
| rosarium | 0:892175366555 | 920 | { |
| rosarium | 0:892175366555 | 921 | if( (reg_value & M24LR_CTRL_FIELD_MASK) == M24LR_CTRL_FIELD_MASK ) |
| rosarium | 0:892175366555 | 922 | { |
| rosarium | 0:892175366555 | 923 | *pRF_Field = M24LR_FIELD_ON; |
| rosarium | 0:892175366555 | 924 | } |
| rosarium | 0:892175366555 | 925 | else |
| rosarium | 0:892175366555 | 926 | { |
| rosarium | 0:892175366555 | 927 | *pRF_Field = M24LR_FIELD_OFF; |
| rosarium | 0:892175366555 | 928 | } |
| rosarium | 0:892175366555 | 929 | |
| rosarium | 0:892175366555 | 930 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 931 | } |
| rosarium | 0:892175366555 | 932 | |
| rosarium | 0:892175366555 | 933 | return status; |
| rosarium | 0:892175366555 | 934 | } |
| rosarium | 0:892175366555 | 935 | |
| rosarium | 0:892175366555 | 936 | /** |
| rosarium | 0:892175366555 | 937 | * @brief Check if Write Timing is good |
| rosarium | 0:892175366555 | 938 | * @param pT_Prog : M24LR_T_PROG_STATUS pointer of the data to store |
| rosarium | 0:892175366555 | 939 | * @retval NFCTAG enum status |
| rosarium | 0:892175366555 | 940 | */ |
| rosarium | 0:892175366555 | 941 | NFCTAG_StatusTypeDef M24LR::i2c_GetTProg( M24LR_T_PROG_STATUS * const pT_Prog ) |
| rosarium | 0:892175366555 | 942 | { |
| rosarium | 0:892175366555 | 943 | NFCTAG_StatusTypeDef status; |
| rosarium | 0:892175366555 | 944 | uint8_t reg_value = 0; |
| rosarium | 0:892175366555 | 945 | |
| rosarium | 0:892175366555 | 946 | /* Read actual value of CTRL register */ |
| rosarium | 0:892175366555 | 947 | status = i2c_ReadRegister( ®_value, M24LR_CTRL_REG, 1 ); |
| rosarium | 0:892175366555 | 948 | |
| rosarium | 0:892175366555 | 949 | /* Extract T-Prog information */ |
| rosarium | 0:892175366555 | 950 | if( status == NFCTAG_OK ) |
| rosarium | 0:892175366555 | 951 | { |
| rosarium | 0:892175366555 | 952 | if( (reg_value & M24LR_CTRL_TPROG_MASK) == M24LR_CTRL_TPROG_MASK ) |
| rosarium | 0:892175366555 | 953 | { |
| rosarium | 0:892175366555 | 954 | *pT_Prog = M24LR_T_PROG_OK; |
| rosarium | 0:892175366555 | 955 | } |
| rosarium | 0:892175366555 | 956 | else |
| rosarium | 0:892175366555 | 957 | { |
| rosarium | 0:892175366555 | 958 | *pT_Prog = M24LR_T_PROG_NO; |
| rosarium | 0:892175366555 | 959 | } |
| rosarium | 0:892175366555 | 960 | |
| rosarium | 0:892175366555 | 961 | return NFCTAG_OK; |
| rosarium | 0:892175366555 | 962 | } |
| rosarium | 0:892175366555 | 963 | else |
| rosarium | 0:892175366555 | 964 | return status; |
| rosarium | 0:892175366555 | 965 | } |
| rosarium | 0:892175366555 | 966 | |
| rosarium | 0:892175366555 | 967 | /** |
| rosarium | 0:892175366555 | 968 | * @} |
| rosarium | 0:892175366555 | 969 | */ |
| rosarium | 0:892175366555 | 970 | |
| rosarium | 0:892175366555 | 971 | /** |
| rosarium | 0:892175366555 | 972 | * @} |
| rosarium | 0:892175366555 | 973 | */ |
| rosarium | 0:892175366555 | 974 | |
| rosarium | 0:892175366555 | 975 | /** |
| rosarium | 0:892175366555 | 976 | * @} |
| rosarium | 0:892175366555 | 977 | */ |
| rosarium | 0:892175366555 | 978 | |
| rosarium | 0:892175366555 | 979 | /** |
| rosarium | 0:892175366555 | 980 | * @} |
| rosarium | 0:892175366555 | 981 | */ |
| rosarium | 0:892175366555 | 982 | |
| rosarium | 0:892175366555 | 983 | /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/ |
