This is a driver needed by NFCEEPROOM constructor for the ST ST25DV NFC chip.
Dependents: mbed-os-example-nfc-EEPROM
X_NUCLEO_NFC04A1/x_nucleo_nfc04a1.cpp@0:dd89565c6276, 2020-01-28 (annotated)
- Committer:
- apalmieri
- Date:
- Tue Jan 28 15:54:19 2020 +0000
- Revision:
- 0:dd89565c6276
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
apalmieri | 0:dd89565c6276 | 1 | /** |
apalmieri | 0:dd89565c6276 | 2 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 3 | * @file x_nucleo_nfc04a1.c |
apalmieri | 0:dd89565c6276 | 4 | * @author MMY Application Team |
apalmieri | 0:dd89565c6276 | 5 | * @version $Revision: 3351 $ |
apalmieri | 0:dd89565c6276 | 6 | * @date $Date: 2017-01-25 17:28:08 +0100 (Wed, 25 Jan 2017) $ |
apalmieri | 0:dd89565c6276 | 7 | * @brief This file provides nfc04a1 specific functions |
apalmieri | 0:dd89565c6276 | 8 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 9 | * @attention |
apalmieri | 0:dd89565c6276 | 10 | * |
apalmieri | 0:dd89565c6276 | 11 | * <h2><center>© COPYRIGHT 2017 STMicroelectronics</center></h2> |
apalmieri | 0:dd89565c6276 | 12 | * |
apalmieri | 0:dd89565c6276 | 13 | * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); |
apalmieri | 0:dd89565c6276 | 14 | * You may not use this file except in compliance with the License. |
apalmieri | 0:dd89565c6276 | 15 | * You may obtain a copy of the License at: |
apalmieri | 0:dd89565c6276 | 16 | * |
apalmieri | 0:dd89565c6276 | 17 | * http://www.st.com/myliberty |
apalmieri | 0:dd89565c6276 | 18 | * |
apalmieri | 0:dd89565c6276 | 19 | * Unless required by applicable law or agreed to in writing, software |
apalmieri | 0:dd89565c6276 | 20 | * distributed under the License is distributed on an "AS IS" BASIS, |
apalmieri | 0:dd89565c6276 | 21 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, |
apalmieri | 0:dd89565c6276 | 22 | * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, |
apalmieri | 0:dd89565c6276 | 23 | * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. |
apalmieri | 0:dd89565c6276 | 24 | * See the License for the specific language governing permissions and |
apalmieri | 0:dd89565c6276 | 25 | * limitations under the License. |
apalmieri | 0:dd89565c6276 | 26 | * |
apalmieri | 0:dd89565c6276 | 27 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 28 | */ |
apalmieri | 0:dd89565c6276 | 29 | |
apalmieri | 0:dd89565c6276 | 30 | /* Includes ------------------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 31 | #include "st25dv.h" |
apalmieri | 0:dd89565c6276 | 32 | #include "time.h" |
apalmieri | 0:dd89565c6276 | 33 | |
apalmieri | 0:dd89565c6276 | 34 | /** @defgroup X_NUCLEO_NFC04A1 |
apalmieri | 0:dd89565c6276 | 35 | * @{ |
apalmieri | 0:dd89565c6276 | 36 | */ |
apalmieri | 0:dd89565c6276 | 37 | /* Private typedef -----------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 38 | /* Private defines -----------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 39 | /* Private macros ------------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 40 | /* Private variables ---------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 41 | /* Global variables ----------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 42 | /** @defgroup X_NUCLEO_NFC04A1_Global_Variables |
apalmieri | 0:dd89565c6276 | 43 | * @{ |
apalmieri | 0:dd89565c6276 | 44 | */ |
apalmieri | 0:dd89565c6276 | 45 | //uint8_t NFC04A1_Led[3] = { 1 , 2 , 3 }; |
apalmieri | 0:dd89565c6276 | 46 | |
apalmieri | 0:dd89565c6276 | 47 | /** |
apalmieri | 0:dd89565c6276 | 48 | * @} |
apalmieri | 0:dd89565c6276 | 49 | */ |
apalmieri | 0:dd89565c6276 | 50 | |
apalmieri | 0:dd89565c6276 | 51 | /* Private function prototypes -----------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 52 | |
apalmieri | 0:dd89565c6276 | 53 | NFCTAG_StatusTypeDef ST25DV_IO_Init( I2C* mi2cChannel, DigitalOut *mLPD ); |
apalmieri | 0:dd89565c6276 | 54 | NFCTAG_StatusTypeDef ST25DV_IO_MemWrite( const uint8_t * const pData, const uint8_t DevAddr, const uint16_t TarAddr, const uint16_t Size, I2C* mi2cChannel ); |
apalmieri | 0:dd89565c6276 | 55 | NFCTAG_StatusTypeDef ST25DV_IO_MemRead( uint8_t * const pData, const uint8_t DevAddr, const uint16_t TarAddr, const uint16_t Size, I2C* mi2cChannel ); |
apalmieri | 0:dd89565c6276 | 56 | NFCTAG_StatusTypeDef ST25DV_IO_Read( uint8_t * const pData, const uint8_t DevAddr, const uint16_t Size, I2C* mi2cChannel ); |
apalmieri | 0:dd89565c6276 | 57 | NFCTAG_StatusTypeDef ST25DV_IO_IsDeviceReady( const uint8_t DevAddr, const uint32_t Trials, I2C* mi2cChannel); |
apalmieri | 0:dd89565c6276 | 58 | NFCTAG_StatusTypeDef NFCTAG_ConvertStatus(uint8_t ret); |
apalmieri | 0:dd89565c6276 | 59 | |
apalmieri | 0:dd89565c6276 | 60 | |
apalmieri | 0:dd89565c6276 | 61 | /* Functions Definition ------------------------------------------------------*/ |
apalmieri | 0:dd89565c6276 | 62 | /** @defgroup X_NUCLEO_NFC04A1_Public_Functions |
apalmieri | 0:dd89565c6276 | 63 | * @{ |
apalmieri | 0:dd89565c6276 | 64 | */ |
apalmieri | 0:dd89565c6276 | 65 | |
apalmieri | 0:dd89565c6276 | 66 | |
apalmieri | 0:dd89565c6276 | 67 | |
apalmieri | 0:dd89565c6276 | 68 | /** |
apalmieri | 0:dd89565c6276 | 69 | * @brief Toggles the selected LED |
apalmieri | 0:dd89565c6276 | 70 | * @param led : Specifies the Led to be toggled |
apalmieri | 0:dd89565c6276 | 71 | * @retval None |
apalmieri | 0:dd89565c6276 | 72 | */ |
apalmieri | 0:dd89565c6276 | 73 | void NFC04A1_LED_Toggle( DigitalOut* led) |
apalmieri | 0:dd89565c6276 | 74 | { |
apalmieri | 0:dd89565c6276 | 75 | *led = !(*led); |
apalmieri | 0:dd89565c6276 | 76 | } |
apalmieri | 0:dd89565c6276 | 77 | |
apalmieri | 0:dd89565c6276 | 78 | |
apalmieri | 0:dd89565c6276 | 79 | |
apalmieri | 0:dd89565c6276 | 80 | /** |
apalmieri | 0:dd89565c6276 | 81 | * @brief This function get the GPIO value through GPIO |
apalmieri | 0:dd89565c6276 | 82 | * @param None |
apalmieri | 0:dd89565c6276 | 83 | * @retval HAL GPIO pin status |
apalmieri | 0:dd89565c6276 | 84 | */ |
apalmieri | 0:dd89565c6276 | 85 | DigitalOut NFC04A1_GPO_ReadPin( DigitalOut *mMISO ) |
apalmieri | 0:dd89565c6276 | 86 | { |
apalmieri | 0:dd89565c6276 | 87 | return *mMISO; |
apalmieri | 0:dd89565c6276 | 88 | } |
apalmieri | 0:dd89565c6276 | 89 | |
apalmieri | 0:dd89565c6276 | 90 | /** |
apalmieri | 0:dd89565c6276 | 91 | * @brief This function initialize the GPIO to manage the NFCTAG LPD pin |
apalmieri | 0:dd89565c6276 | 92 | * @param None |
apalmieri | 0:dd89565c6276 | 93 | * @retval None |
apalmieri | 0:dd89565c6276 | 94 | */ |
apalmieri | 0:dd89565c6276 | 95 | |
apalmieri | 0:dd89565c6276 | 96 | void NFC04A1_LPD_Init( DigitalOut *mLPD ) |
apalmieri | 0:dd89565c6276 | 97 | { |
apalmieri | 0:dd89565c6276 | 98 | *mLPD = 0; |
apalmieri | 0:dd89565c6276 | 99 | } |
apalmieri | 0:dd89565c6276 | 100 | |
apalmieri | 0:dd89565c6276 | 101 | /** |
apalmieri | 0:dd89565c6276 | 102 | * @brief This function get the GPIO value through GPIO |
apalmieri | 0:dd89565c6276 | 103 | * @param None |
apalmieri | 0:dd89565c6276 | 104 | * @retval HAL GPIO pin status |
apalmieri | 0:dd89565c6276 | 105 | */ |
apalmieri | 0:dd89565c6276 | 106 | uint8_t NFC04A1_LPD_ReadPin( DigitalOut *mLPD ) |
apalmieri | 0:dd89565c6276 | 107 | { |
apalmieri | 0:dd89565c6276 | 108 | return mLPD -> read(); |
apalmieri | 0:dd89565c6276 | 109 | } |
apalmieri | 0:dd89565c6276 | 110 | |
apalmieri | 0:dd89565c6276 | 111 | /** |
apalmieri | 0:dd89565c6276 | 112 | * @brief This function get the GPIO value through GPIO |
apalmieri | 0:dd89565c6276 | 113 | * @param None |
apalmieri | 0:dd89565c6276 | 114 | * @retval HAL GPIO pin status |
apalmieri | 0:dd89565c6276 | 115 | */ |
apalmieri | 0:dd89565c6276 | 116 | void NFC04A1_LPD_WritePin( uint8_t LpdPinState, DigitalOut *mLPD ) |
apalmieri | 0:dd89565c6276 | 117 | { |
apalmieri | 0:dd89565c6276 | 118 | mLPD -> write( LpdPinState ); |
apalmieri | 0:dd89565c6276 | 119 | } |
apalmieri | 0:dd89565c6276 | 120 | |
apalmieri | 0:dd89565c6276 | 121 | /** |
apalmieri | 0:dd89565c6276 | 122 | * @brief This function select the i2cChannel1 speed to communicate with NFCTAG |
apalmieri | 0:dd89565c6276 | 123 | * @param i2cChannelspeedchoice Number from 0 to 5 to select i2cChannel speed |
apalmieri | 0:dd89565c6276 | 124 | * @param mi2cChannel : I2C channel |
apalmieri | 0:dd89565c6276 | 125 | * @retval HAL GPIO pin status |
apalmieri | 0:dd89565c6276 | 126 | */ |
apalmieri | 0:dd89565c6276 | 127 | void NFC04A1_Selecti2cSpeed( uint8_t i2cspeedchoice, I2C* mi2cChannel) |
apalmieri | 0:dd89565c6276 | 128 | { |
apalmieri | 0:dd89565c6276 | 129 | |
apalmieri | 0:dd89565c6276 | 130 | switch( i2cspeedchoice ) |
apalmieri | 0:dd89565c6276 | 131 | { |
apalmieri | 0:dd89565c6276 | 132 | case 0: |
apalmieri | 0:dd89565c6276 | 133 | |
apalmieri | 0:dd89565c6276 | 134 | mi2cChannel -> frequency(10000); |
apalmieri | 0:dd89565c6276 | 135 | break; |
apalmieri | 0:dd89565c6276 | 136 | |
apalmieri | 0:dd89565c6276 | 137 | case 1: |
apalmieri | 0:dd89565c6276 | 138 | |
apalmieri | 0:dd89565c6276 | 139 | mi2cChannel -> frequency(100000); |
apalmieri | 0:dd89565c6276 | 140 | break; |
apalmieri | 0:dd89565c6276 | 141 | |
apalmieri | 0:dd89565c6276 | 142 | case 2: |
apalmieri | 0:dd89565c6276 | 143 | |
apalmieri | 0:dd89565c6276 | 144 | mi2cChannel -> frequency(200000); |
apalmieri | 0:dd89565c6276 | 145 | break; |
apalmieri | 0:dd89565c6276 | 146 | |
apalmieri | 0:dd89565c6276 | 147 | case 3: |
apalmieri | 0:dd89565c6276 | 148 | |
apalmieri | 0:dd89565c6276 | 149 | mi2cChannel -> frequency(400000); |
apalmieri | 0:dd89565c6276 | 150 | break; |
apalmieri | 0:dd89565c6276 | 151 | |
apalmieri | 0:dd89565c6276 | 152 | case 4: |
apalmieri | 0:dd89565c6276 | 153 | |
apalmieri | 0:dd89565c6276 | 154 | mi2cChannel -> frequency(800000); |
apalmieri | 0:dd89565c6276 | 155 | break; |
apalmieri | 0:dd89565c6276 | 156 | |
apalmieri | 0:dd89565c6276 | 157 | case 5: |
apalmieri | 0:dd89565c6276 | 158 | |
apalmieri | 0:dd89565c6276 | 159 | mi2cChannel -> frequency(1000000); |
apalmieri | 0:dd89565c6276 | 160 | break; |
apalmieri | 0:dd89565c6276 | 161 | |
apalmieri | 0:dd89565c6276 | 162 | default: |
apalmieri | 0:dd89565c6276 | 163 | |
apalmieri | 0:dd89565c6276 | 164 | mi2cChannel -> frequency(1000000); |
apalmieri | 0:dd89565c6276 | 165 | break; |
apalmieri | 0:dd89565c6276 | 166 | } |
apalmieri | 0:dd89565c6276 | 167 | |
apalmieri | 0:dd89565c6276 | 168 | } |
apalmieri | 0:dd89565c6276 | 169 | |
apalmieri | 0:dd89565c6276 | 170 | /** |
apalmieri | 0:dd89565c6276 | 171 | * @} |
apalmieri | 0:dd89565c6276 | 172 | */ |
apalmieri | 0:dd89565c6276 | 173 | |
apalmieri | 0:dd89565c6276 | 174 | /** @defgroup X_NUCLEO_NFC04A1_Private_Functions |
apalmieri | 0:dd89565c6276 | 175 | * @{ |
apalmieri | 0:dd89565c6276 | 176 | */ |
apalmieri | 0:dd89565c6276 | 177 | /******************************** LINK EEPROM COMPONENT *****************************/ |
apalmieri | 0:dd89565c6276 | 178 | |
apalmieri | 0:dd89565c6276 | 179 | /** |
apalmieri | 0:dd89565c6276 | 180 | * @brief Initializes peripherals used by the i2cChannel NFCTAG driver |
apalmieri | 0:dd89565c6276 | 181 | * @param mi2cChannel : I2C channel |
apalmieri | 0:dd89565c6276 | 182 | * @param mLPD |
apalmieri | 0:dd89565c6276 | 183 | * @retval NFCTAG enum status |
apalmieri | 0:dd89565c6276 | 184 | */ |
apalmieri | 0:dd89565c6276 | 185 | NFCTAG_StatusTypeDef ST25DV_IO_Init( I2C* mi2cChannel, DigitalOut *mLPD ) |
apalmieri | 0:dd89565c6276 | 186 | { |
apalmieri | 0:dd89565c6276 | 187 | |
apalmieri | 0:dd89565c6276 | 188 | |
apalmieri | 0:dd89565c6276 | 189 | NFC04A1_LPD_Init( mLPD ); |
apalmieri | 0:dd89565c6276 | 190 | |
apalmieri | 0:dd89565c6276 | 191 | NFC04A1_Selecti2cSpeed(3, mi2cChannel); |
apalmieri | 0:dd89565c6276 | 192 | |
apalmieri | 0:dd89565c6276 | 193 | return NFCTAG_OK; |
apalmieri | 0:dd89565c6276 | 194 | } |
apalmieri | 0:dd89565c6276 | 195 | |
apalmieri | 0:dd89565c6276 | 196 | /** |
apalmieri | 0:dd89565c6276 | 197 | * @brief Write data, at specific address, through i2c to the ST25DV |
apalmieri | 0:dd89565c6276 | 198 | * @param pData: pointer to the data to write |
apalmieri | 0:dd89565c6276 | 199 | * @param DevAddr : Target device address |
apalmieri | 0:dd89565c6276 | 200 | * @param TarAddr : i2c data memory address to write |
apalmieri | 0:dd89565c6276 | 201 | * @param Size : Size in bytes of the value to be written |
apalmieri | 0:dd89565c6276 | 202 | * @param mi2cChannel : I2C channel |
apalmieri | 0:dd89565c6276 | 203 | * @retval NFCTAG enum status |
apalmieri | 0:dd89565c6276 | 204 | */ |
apalmieri | 0:dd89565c6276 | 205 | NFCTAG_StatusTypeDef ST25DV_IO_MemWrite( const uint8_t * const pData, const uint8_t DevAddr, const uint16_t TarAddr, const uint16_t Size, I2C* mi2cChannel ) |
apalmieri | 0:dd89565c6276 | 206 | { |
apalmieri | 0:dd89565c6276 | 207 | |
apalmieri | 0:dd89565c6276 | 208 | uint8_t ret = 4; |
apalmieri | 0:dd89565c6276 | 209 | |
apalmieri | 0:dd89565c6276 | 210 | uint8_t Addr = DevAddr; |
apalmieri | 0:dd89565c6276 | 211 | |
apalmieri | 0:dd89565c6276 | 212 | |
apalmieri | 0:dd89565c6276 | 213 | uint8_t buffer[2]; |
apalmieri | 0:dd89565c6276 | 214 | buffer[0] = (uint8_t) (TarAddr>>8); |
apalmieri | 0:dd89565c6276 | 215 | buffer[1] = (uint8_t) (TarAddr&0xFF); |
apalmieri | 0:dd89565c6276 | 216 | |
apalmieri | 0:dd89565c6276 | 217 | |
apalmieri | 0:dd89565c6276 | 218 | char * pDataChar = (char*) pData; |
apalmieri | 0:dd89565c6276 | 219 | |
apalmieri | 0:dd89565c6276 | 220 | |
apalmieri | 0:dd89565c6276 | 221 | ret = mi2cChannel -> write(Addr, (const char*)buffer, 2 , true); |
apalmieri | 0:dd89565c6276 | 222 | |
apalmieri | 0:dd89565c6276 | 223 | // Address is not OK |
apalmieri | 0:dd89565c6276 | 224 | if(ret != 0) |
apalmieri | 0:dd89565c6276 | 225 | return NFCTAG_ConvertStatus(ret); |
apalmieri | 0:dd89565c6276 | 226 | |
apalmieri | 0:dd89565c6276 | 227 | ret = mi2cChannel -> write(Addr, pDataChar, Size, false); |
apalmieri | 0:dd89565c6276 | 228 | |
apalmieri | 0:dd89565c6276 | 229 | return NFCTAG_ConvertStatus(ret); |
apalmieri | 0:dd89565c6276 | 230 | } |
apalmieri | 0:dd89565c6276 | 231 | |
apalmieri | 0:dd89565c6276 | 232 | |
apalmieri | 0:dd89565c6276 | 233 | /* |
apalmieri | 0:dd89565c6276 | 234 | * @brief Reads data at a specific address from the NFCTAG. |
apalmieri | 0:dd89565c6276 | 235 | * @param pData: pointer to store read data |
apalmieri | 0:dd89565c6276 | 236 | * @param DevAddr : Target device address |
apalmieri | 0:dd89565c6276 | 237 | * @param TarAddr : i2c data memory address to read |
apalmieri | 0:dd89565c6276 | 238 | * @param Size : Size in bytes of the value to be read |
apalmieri | 0:dd89565c6276 | 239 | * @param mi2cChannel : I2C channel |
apalmieri | 0:dd89565c6276 | 240 | * @retval NFCTAG enum status |
apalmieri | 0:dd89565c6276 | 241 | */ |
apalmieri | 0:dd89565c6276 | 242 | |
apalmieri | 0:dd89565c6276 | 243 | NFCTAG_StatusTypeDef ST25DV_IO_MemRead( uint8_t * const pData, const uint8_t DevAddr, const uint16_t TarAddr, const uint16_t Size, I2C* mi2cChannel ) |
apalmieri | 0:dd89565c6276 | 244 | { |
apalmieri | 0:dd89565c6276 | 245 | |
apalmieri | 0:dd89565c6276 | 246 | uint8_t ret = 4; |
apalmieri | 0:dd89565c6276 | 247 | uint8_t Addr = DevAddr; |
apalmieri | 0:dd89565c6276 | 248 | |
apalmieri | 0:dd89565c6276 | 249 | uint8_t buffer[2]; |
apalmieri | 0:dd89565c6276 | 250 | buffer[0] = (uint8_t) (TarAddr>>8); |
apalmieri | 0:dd89565c6276 | 251 | buffer[1] = (uint8_t) (TarAddr&0xFF); |
apalmieri | 0:dd89565c6276 | 252 | |
apalmieri | 0:dd89565c6276 | 253 | ret = mi2cChannel -> write(Addr, (const char*)buffer , 2 , false); |
apalmieri | 0:dd89565c6276 | 254 | |
apalmieri | 0:dd89565c6276 | 255 | // Address is not OK |
apalmieri | 0:dd89565c6276 | 256 | if(ret != 0) |
apalmieri | 0:dd89565c6276 | 257 | return NFCTAG_ConvertStatus(ret); |
apalmieri | 0:dd89565c6276 | 258 | |
apalmieri | 0:dd89565c6276 | 259 | char * pDataChar = (char*) pData; |
apalmieri | 0:dd89565c6276 | 260 | |
apalmieri | 0:dd89565c6276 | 261 | ret = mi2cChannel -> read(DevAddr, pDataChar, Size, false ); |
apalmieri | 0:dd89565c6276 | 262 | |
apalmieri | 0:dd89565c6276 | 263 | return NFCTAG_ConvertStatus(ret); |
apalmieri | 0:dd89565c6276 | 264 | } |
apalmieri | 0:dd89565c6276 | 265 | |
apalmieri | 0:dd89565c6276 | 266 | NFCTAG_StatusTypeDef NFCTAG_ConvertStatus(uint8_t ret) { |
apalmieri | 0:dd89565c6276 | 267 | if (ret == 0) { |
apalmieri | 0:dd89565c6276 | 268 | return NFCTAG_OK; |
apalmieri | 0:dd89565c6276 | 269 | } else if ((ret == 2) || (ret == 3)) { |
apalmieri | 0:dd89565c6276 | 270 | return NFCTAG_NACK; |
apalmieri | 0:dd89565c6276 | 271 | } else { |
apalmieri | 0:dd89565c6276 | 272 | return NFCTAG_ERROR; |
apalmieri | 0:dd89565c6276 | 273 | } |
apalmieri | 0:dd89565c6276 | 274 | } |
apalmieri | 0:dd89565c6276 | 275 | |
apalmieri | 0:dd89565c6276 | 276 | |
apalmieri | 0:dd89565c6276 | 277 | /** |
apalmieri | 0:dd89565c6276 | 278 | * @brief Reads data at current address from the NFCTAG. |
apalmieri | 0:dd89565c6276 | 279 | * @param pData: pointer to store read data |
apalmieri | 0:dd89565c6276 | 280 | * @param DevAddr : Target device address |
apalmieri | 0:dd89565c6276 | 281 | * @param Size : Size in bytes of the value to be read |
apalmieri | 0:dd89565c6276 | 282 | * @retval NFCTAG enum status |
apalmieri | 0:dd89565c6276 | 283 | */ |
apalmieri | 0:dd89565c6276 | 284 | NFCTAG_StatusTypeDef ST25DV_IO_Read( uint8_t * const pData, const uint8_t DevAddr, const uint16_t Size, I2C* mi2cChannel ) |
apalmieri | 0:dd89565c6276 | 285 | { |
apalmieri | 0:dd89565c6276 | 286 | //this has to change( send addr then read) |
apalmieri | 0:dd89565c6276 | 287 | int i = 0; |
apalmieri | 0:dd89565c6276 | 288 | uint8_t ret = 4; |
apalmieri | 0:dd89565c6276 | 289 | |
apalmieri | 0:dd89565c6276 | 290 | char * pDataChar = (char*) pData; |
apalmieri | 0:dd89565c6276 | 291 | uint8_t ReadAddr = DevAddr | 1u; |
apalmieri | 0:dd89565c6276 | 292 | ret = mi2cChannel -> read(ReadAddr, pDataChar, 1, false ); |
apalmieri | 0:dd89565c6276 | 293 | |
apalmieri | 0:dd89565c6276 | 294 | |
apalmieri | 0:dd89565c6276 | 295 | // Tell slave we need to read 1byte from the current register |
apalmieri | 0:dd89565c6276 | 296 | while(mi2cChannel -> read( 0 ) != 0) { |
apalmieri | 0:dd89565c6276 | 297 | pData[i++] = mi2cChannel -> read( 0 ); |
apalmieri | 0:dd89565c6276 | 298 | |
apalmieri | 0:dd89565c6276 | 299 | } |
apalmieri | 0:dd89565c6276 | 300 | |
apalmieri | 0:dd89565c6276 | 301 | |
apalmieri | 0:dd89565c6276 | 302 | return NFCTAG_ConvertStatus( ret); |
apalmieri | 0:dd89565c6276 | 303 | } |
apalmieri | 0:dd89565c6276 | 304 | |
apalmieri | 0:dd89565c6276 | 305 | |
apalmieri | 0:dd89565c6276 | 306 | /** |
apalmieri | 0:dd89565c6276 | 307 | * @brief Checks if target device is ready for communication |
apalmieri | 0:dd89565c6276 | 308 | * @note This function is used with Memory devices |
apalmieri | 0:dd89565c6276 | 309 | * @param DevAddr : Target device address |
apalmieri | 0:dd89565c6276 | 310 | * @param mi2cChannel : I2C channel |
apalmieri | 0:dd89565c6276 | 311 | * @retval NFCTAG enum status |
apalmieri | 0:dd89565c6276 | 312 | */ |
apalmieri | 0:dd89565c6276 | 313 | NFCTAG_StatusTypeDef ST25DV_IO_IsDeviceReady( const uint8_t DevAddr, const uint32_t Trials, I2C* mi2cChannel) |
apalmieri | 0:dd89565c6276 | 314 | { |
apalmieri | 0:dd89565c6276 | 315 | int ret = 4; |
apalmieri | 0:dd89565c6276 | 316 | uint32_t count = 0; |
apalmieri | 0:dd89565c6276 | 317 | |
apalmieri | 0:dd89565c6276 | 318 | uint8_t Addr = DevAddr; |
apalmieri | 0:dd89565c6276 | 319 | |
apalmieri | 0:dd89565c6276 | 320 | |
apalmieri | 0:dd89565c6276 | 321 | while ((count++ < Trials && ret) ) { |
apalmieri | 0:dd89565c6276 | 322 | ret = mi2cChannel -> write(Addr, NULL, 0 , false); |
apalmieri | 0:dd89565c6276 | 323 | } |
apalmieri | 0:dd89565c6276 | 324 | return NFCTAG_ConvertStatus(ret); |
apalmieri | 0:dd89565c6276 | 325 | } |
apalmieri | 0:dd89565c6276 | 326 | |
apalmieri | 0:dd89565c6276 | 327 | |
apalmieri | 0:dd89565c6276 | 328 | |
apalmieri | 0:dd89565c6276 | 329 | |
apalmieri | 0:dd89565c6276 | 330 | /** |
apalmieri | 0:dd89565c6276 | 331 | * @} |
apalmieri | 0:dd89565c6276 | 332 | */ |
apalmieri | 0:dd89565c6276 | 333 | |
apalmieri | 0:dd89565c6276 | 334 | /** |
apalmieri | 0:dd89565c6276 | 335 | * @} |
apalmieri | 0:dd89565c6276 | 336 | */ |
apalmieri | 0:dd89565c6276 | 337 | |
apalmieri | 0:dd89565c6276 | 338 | /** |
apalmieri | 0:dd89565c6276 | 339 | * @} |
apalmieri | 0:dd89565c6276 | 340 | */ |
apalmieri | 0:dd89565c6276 | 341 | |
apalmieri | 0:dd89565c6276 | 342 | /******************* (C) COPYRIGHT 2017 STMicroelectronics *****END OF FILE****/ |