NUCLEO-NFC01A1 board drivers.

Dependents:   Nucleo_NFC_Example I2C_NFC_Master Print_Entire_Nucleo_NFC01A1_Memory

Fork of X-NUCLEO-NFC01A1 by Enrico Gregoratto

Warning: Deprecated!

Official and up-to-date drivers can be found at this link.

Revision:
3:0528e68eac4a
Child:
4:1814ea3853a7
diff -r 59b69e7375c4 -r 0528e68eac4a drv_I2C_M24SR.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drv_I2C_M24SR.h	Wed Dec 17 00:32:28 2014 +0000
@@ -0,0 +1,162 @@
+/**
+  ******************************************************************************
+  * @file    drv_I2C_M24SR.h
+  * @author  MMY Application Team
+  * @version V1.1.0
+  * @date    20-October-2014
+  * @brief   This file provides a set of functions needed to manage the I2C of
+						 the M24SR device.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MMY-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+	
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __DRV_I2CM24SR_H
+#define __DRV_I2CM24SR_H
+
+
+#ifdef __MBED__ /* UNDEFINED types with mbed */
+	#ifdef TARGET_NUCLEO_F411RE
+		#include "stm32f4xx.h"
+	#elif TARGET_NUCLEO_F401RE
+		#include "stm32f4xx.h"
+	#elif defined TARGET_NUCLEO_L053R8
+		#include "stm32l0xx.h"
+	#elif defined TARGET_NUCLEO_F030R8
+		#include "stm32F0xx.h"
+	#elif defined TARGET_NUCLEO_F302R8
+		#include "stm32F3xx.h"
+	#elif defined TARGET_NUCLEO_L152RE
+		#include "stm32l1xx.h"
+	#else
+		#error "You need to update your code to this new microcontroller"
+	#endif
+#else
+	#ifdef STM32F401xE
+		#include "stm32f4xx_hal.h"
+	#elif defined STM32F030x8
+		#include "stm32f0xx_hal.h"
+	#elif defined STM32F302x8
+		#include "stm32f3xx_hal.h"
+	#elif defined STM32L053xx
+		#include "stm32l0xx_hal.h"
+	#elif defined STM32L152xE
+		#include "stm32l1xx_hal.h"
+	#else
+		#error "You need to update your code to this new microcontroller"
+	#endif
+#endif
+
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "string.h"
+#include "stdio.h"
+#include "stdbool.h"
+	 
+/* Flags ---------------------------------------------------------------------*/
+/* If both of this two flags are disabled, then the I2C polling will be used */
+//#define I2C_GPO_SYNCHRO_ALLOWED /* allow tu use GPO polling as I2C synchronization */ 
+//#define I2C_GPO_INTERRUPT_ALLOWED /* allow tu use GPO interrupt as I2C synchronization ! NOT SUPPORTED BY MBED ! */ 
+	 
+#define EXTERNAL_PULLUP /* If SCL is already pulled up using an external resistor */
+
+#define M24SR_POLL_DELAY 10 /* Delay (in ms) before starting to poll the device for command completion */
+
+/* macro function ------------------------------------------------------------*/	 
+ 
+#ifndef errchk
+#define errchk(fCall) if (status = (fCall), status != M24SR_STATUS_SUCCESS) \
+	{goto Error;} else
+#endif
+
+/*!< constant Unsigned integer types  */
+typedef const unsigned char     uc8;
+typedef const unsigned short    uc16;
+//typedef const unsigned long     uc32;
+
+#define M24SR_I2C_TIMEOUT   	200 /* I2C Time out (ms), this is the maximum time needed by M24SR to complete any command */
+#define M24SR_I2C_POLLING  		1 /* In case M24SR will reply ACK failed allow to perform retry before returning error (HAL option not used) */
+#define M24SR_ADDR           	0xAC   /*!< M24SR address */
+
+	
+/* error code ---------------------------------------------------------------------------------*/
+#define M24SR_ERRORCODE_FILEOVERFLOW							0x6280
+#define M24SR_ERRORCODE_ENDOFFILE									0x6282
+#define M24SR_ERRORCODE_PASSWORDREQUIRED					0x63C0
+#define M24SR_ERRORCODE_PASSWORDINCORRECT2RETRY		0x63C2
+#define M24SR_ERRORCODE_PASSWORDINCORRECT1RETRY		0x63C1
+#define M24SR_ERRORCODE_RFSESSIONKILLED						0x6500
+#define M24SR_ERRORCODE_UNSUCCESSFULUPDATING			0x6581
+#define M24SR_ERRORCODE_WRONGHLENGTH							0x6700
+#define M24SR_ERRORCODE_COMMANDINCORRECT					0x6981
+#define M24SR_ERRORCODE_SECURITYSTATUS						0x6982
+#define M24SR_ERRORCODE_REFERENCEDATANOTUSABLE		0x6984
+#define M24SR_ERRORCODE_INCORRECTPARAMETER				0x6A80
+#define M24SR_ERRORCODE_FILENOTFOUND							0x6A82
+#define M24SR_ERRORCODE_FILEOVERFLOWLC						0x6A84
+#define M24SR_ERRORCODE_INCORRECTP1P2							0x6A86
+#define M24SR_ERRORCODE_INSNOTSUPPORTED						0x6D00
+#define M24SR_ERRORCODE_CLASSNOTSUPPORTED					0x6E00
+#define M24SR_ERRORCODE_DAFAULT										0x6F00
+	
+/* Status and error code -----------------------------------------------------*/	 
+#define M24SR_STATUS_SUCCESS									0x0000
+#define M24SR_ERROR_DEFAULT										0x0010
+#define M24SR_ERROR_I2CTIMEOUT								0x0011
+#define M24SR_ERROR_CRC												0x0012
+#define M24SR_ERROR_NACK											0x0013
+#define M24SR_ERROR_PARAMETER									0x0014 
+#define M24SR_ERROR_NBATEMPT									0x0015 
+#define M24SR_ERROR_NOACKNOWLEDGE							0x0016
+    
+/*  mask	------------------------------------------------------------------------------------*/
+typedef enum{
+	M24SR_WAITINGTIME_UNKNOWN= 0,
+	M24SR_WAITINGTIME_POLLING,
+	M24SR_WAITINGTIME_TIMEOUT,
+	M24SR_WAITINGTIME_GPO,
+	M24SR_INTERRUPT_GPO
+}M24SR_WAITINGTIME_MGMT; 
+
+/*  public function	--------------------------------------------------------------------------*/
+
+void          M24SR_I2CInit                			( void );
+void          M24SR_GPOInit                			( void );
+void          M24SR_WaitMs                          ( uint32_t time_ms );
+void          M24SR_GetTick                         ( uint32_t *ptickstart );
+void          M24SR_GPO_ReadPin                     ( GPIO_PinState *pPinState);
+void          M24SR_RFDIS_WritePin                  ( GPIO_PinState PinState);
+void	      M24SR_SetI2CSynchroMode    			( uint8_t mode );
+int8_t        M24SR_SendI2Ccommand 					( uint8_t NbByte , uint8_t *pBuffer );
+int8_t        M24SR_IsAnswerReady 				  	( void );
+int8_t        M24SR_PollI2C 						( void );
+int8_t        M24SR_ReceiveI2Cresponse 				( uint8_t NbByte , uint8_t *pBuffer );
+void          M24SR_RFConfig_Hard					( uint8_t OnOffChoice);
+
+#endif 
+
+#ifdef __cplusplus
+}
+#endif
+
+/******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/