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