Takes memory from a Nucleo NFC01A1 and sends it via I2C.

Dependencies:   mbed NUCLEO-NFC01A1 lib_NFC_M24SR lib_NFC_NDEF

Committer:
jbriede
Date:
Mon Aug 10 15:01:38 2015 +0000
Revision:
0:bd569d022b29
This program reads the memory from a Nucleo NFC01A1 and sends it via I2C.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jbriede 0:bd569d022b29 1 // header
jbriede 0:bd569d022b29 2 #include "mbed.h"
jbriede 0:bd569d022b29 3 #include "lib_TagType4.h"
jbriede 0:bd569d022b29 4 #include "lib_NDEF.h"
jbriede 0:bd569d022b29 5 #include "I2C.h"
jbriede 0:bd569d022b29 6 #define BITSIZE 100
jbriede 0:bd569d022b29 7 #define MAXMEMORY 8190 //pretty sure....
jbriede 0:bd569d022b29 8
jbriede 0:bd569d022b29 9 Serial pc(SERIAL_TX, SERIAL_RX);
jbriede 0:bd569d022b29 10
jbriede 0:bd569d022b29 11 I2C isquaredc(D14,D15); // I2C pins are D14 and D15
jbriede 0:bd569d022b29 12
jbriede 0:bd569d022b29 13 DigitalOut myled(LED1);
jbriede 0:bd569d022b29 14 //various LEDs on NFC Shield
jbriede 0:bd569d022b29 15 DigitalOut nfcled1(D5);
jbriede 0:bd569d022b29 16 DigitalOut nfcled2(D4);
jbriede 0:bd569d022b29 17 DigitalOut nfcled3(D2);
jbriede 0:bd569d022b29 18 //acknowledgement pins
jbriede 0:bd569d022b29 19 DigitalOut indicatorM2S(D13);
jbriede 0:bd569d022b29 20 DigitalIn indicatorS2M(D10);
jbriede 0:bd569d022b29 21 DigitalIn NFC_Written(D12);
jbriede 0:bd569d022b29 22
jbriede 0:bd569d022b29 23 int main() {
jbriede 0:bd569d022b29 24 // Create NDEF buffer
jbriede 0:bd569d022b29 25 uint8_t NDEF_Buffer[BITSIZE], Zero_Buffer[MAXMEMORY];
jbriede 0:bd569d022b29 26 memset(NDEF_Buffer, 0, sizeof(NDEF_Buffer));
jbriede 0:bd569d022b29 27 memset(Zero_Buffer, 0, sizeof(Zero_Buffer)); // will not change
jbriede 0:bd569d022b29 28
jbriede 0:bd569d022b29 29 // start up info... the following code is necessary to read the NFC shield
jbriede 0:bd569d022b29 30 sCCFileInfo CCFileStruct;
jbriede 0:bd569d022b29 31 sCCFileInfo *pCCFile;
jbriede 0:bd569d022b29 32 pCCFile = &CCFileStruct;
jbriede 0:bd569d022b29 33
jbriede 0:bd569d022b29 34 uint16_t status = SUCCESS;
jbriede 0:bd569d022b29 35 uint8_t CCBuffer[15];
jbriede 0:bd569d022b29 36
jbriede 0:bd569d022b29 37 status = TagT4Init( CCBuffer, sizeof(CCBuffer));
jbriede 0:bd569d022b29 38
jbriede 0:bd569d022b29 39 if( status == SUCCESS)
jbriede 0:bd569d022b29 40 {
jbriede 0:bd569d022b29 41 pCCFile->NumberCCByte = (uint16_t) ((CCBuffer[0x00]<<8) | CCBuffer[0x01]);
jbriede 0:bd569d022b29 42 pCCFile->Version = CCBuffer[0x02];
jbriede 0:bd569d022b29 43 pCCFile->MaxReadByte = (uint16_t) ((CCBuffer[0x03]<<8) | CCBuffer[0x04]);
jbriede 0:bd569d022b29 44 pCCFile->MaxWriteByte = (uint16_t) ((CCBuffer[0x05]<<8) | CCBuffer[0x06]);
jbriede 0:bd569d022b29 45 pCCFile->TField = CCBuffer[0x07];
jbriede 0:bd569d022b29 46 pCCFile->LField = CCBuffer[0x08];
jbriede 0:bd569d022b29 47 pCCFile->FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]);
jbriede 0:bd569d022b29 48 pCCFile->NDEFFileMaxSize = (uint16_t) ((CCBuffer[0x0B]<<8) | CCBuffer[0x0C]);
jbriede 0:bd569d022b29 49 pCCFile->ReadAccess = CCBuffer[0x0D];
jbriede 0:bd569d022b29 50 pCCFile->WriteAccess = CCBuffer[0x0E];
jbriede 0:bd569d022b29 51 }
jbriede 0:bd569d022b29 52
jbriede 0:bd569d022b29 53 // open NDEF session
jbriede 0:bd569d022b29 54 OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION);
jbriede 0:bd569d022b29 55
jbriede 0:bd569d022b29 56 // write all zeros to NDEF memory
jbriede 0:bd569d022b29 57 NDEF_WriteNDEF(Zero_Buffer);
jbriede 0:bd569d022b29 58
jbriede 0:bd569d022b29 59 // close NDEF session
jbriede 0:bd569d022b29 60 CloseNDEFSession(pCCFile->FileID);
jbriede 0:bd569d022b29 61
jbriede 0:bd569d022b29 62 // creat while loop
jbriede 0:bd569d022b29 63
jbriede 0:bd569d022b29 64
jbriede 0:bd569d022b29 65 indicatorM2S = 0;
jbriede 0:bd569d022b29 66
jbriede 0:bd569d022b29 67 pc.printf("init \n");
jbriede 0:bd569d022b29 68 while(1) {
jbriede 0:bd569d022b29 69 if (NFC_Written==0) {
jbriede 0:bd569d022b29 70 pc.printf("session\n");
jbriede 0:bd569d022b29 71 wait(4);
jbriede 0:bd569d022b29 72 //open NDEF session
jbriede 0:bd569d022b29 73 OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION);
jbriede 0:bd569d022b29 74
jbriede 0:bd569d022b29 75 // read NDEF
jbriede 0:bd569d022b29 76 NDEF_ReadNDEF(NDEF_Buffer);
jbriede 0:bd569d022b29 77
jbriede 0:bd569d022b29 78 // close NDEF session
jbriede 0:bd569d022b29 79 CloseNDEFSession(pCCFile->FileID);
jbriede 0:bd569d022b29 80
jbriede 0:bd569d022b29 81
jbriede 0:bd569d022b29 82 // if NDEF is not all 0s, take the store memory in variable
jbriede 0:bd569d022b29 83 if ((memcmp(Zero_Buffer, NDEF_Buffer, sizeof(NDEF_Buffer)))!=0){
jbriede 0:bd569d022b29 84
jbriede 0:bd569d022b29 85 pc.printf("Tag Identified...\n");
jbriede 0:bd569d022b29 86
jbriede 0:bd569d022b29 87 indicatorM2S = 1; // Master indicates to slave that there is a message waiting
jbriede 0:bd569d022b29 88
jbriede 0:bd569d022b29 89 pc.printf("M2S set HIGH...\n");
jbriede 0:bd569d022b29 90
jbriede 0:bd569d022b29 91 char send[BITSIZE]; // converting to char in order to send via i2c
jbriede 0:bd569d022b29 92 memcpy(send, NDEF_Buffer, BITSIZE);
jbriede 0:bd569d022b29 93
jbriede 0:bd569d022b29 94 while(1){ // waiting for slave to indicate it is ready to receive message
jbriede 0:bd569d022b29 95 if (indicatorS2M.read() == 1)
jbriede 0:bd569d022b29 96
jbriede 0:bd569d022b29 97 break;
jbriede 0:bd569d022b29 98 // probably should add some type of time out function
jbriede 0:bd569d022b29 99 }
jbriede 0:bd569d022b29 100 pc.printf("S2M awknowledgement recieved...\n");
jbriede 0:bd569d022b29 101 //Send data via I2C
jbriede 0:bd569d022b29 102 isquaredc.write(0x10, send, BITSIZE, 1);
jbriede 0:bd569d022b29 103 pc.printf("I2C.write...\n");
jbriede 0:bd569d022b29 104 // turn off M2S signal
jbriede 0:bd569d022b29 105 indicatorM2S =0;
jbriede 0:bd569d022b29 106
jbriede 0:bd569d022b29 107 // write all 0s to the NFC memory
jbriede 0:bd569d022b29 108 OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION);
jbriede 0:bd569d022b29 109 NDEF_WriteNDEF(Zero_Buffer);
jbriede 0:bd569d022b29 110 CloseNDEFSession(pCCFile->FileID);
jbriede 0:bd569d022b29 111 memset(NDEF_Buffer, 0, sizeof(NDEF_Buffer));
jbriede 0:bd569d022b29 112 }
jbriede 0:bd569d022b29 113 }
jbriede 0:bd569d022b29 114 }
jbriede 0:bd569d022b29 115 }