Biswajit Padhi
/
Writing_and_Reading_RFID_WIZWiki_W7500
MFRC522 Writing and reading RFID tag
Diff: main.cpp
- Revision:
- 1:0cc7ec8623d2
- Parent:
- 0:f7bdb80c0ef2
--- a/main.cpp Mon Apr 10 05:47:48 2017 +0000 +++ b/main.cpp Wed Aug 30 09:48:28 2017 +0000 @@ -1,20 +1,21 @@ -//Test of cheap 13.56 Mhz RFID-RC522 module from eBay -//This code is based on Martin Olejar's MFRC522 library. Minimal changes -//Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too - +//Test of cheap 13.56Mhz RFID-RC522 module //Connect as follows: -//RFID pins -> Nucleo header CN5 (Arduino-compatible header) +//RFID pins -> WIZWiki-W7500 header CN5 (Arduino-compatible header) //---------------------------------------- -//RFID IRQ=pin5 -> Not used. Leave open -//RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12 -//RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11 -//RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13 -//RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10 -//RFID RST=pin7 -> Nucleo =PA_9=D8 +//1.RFID IRQ -> Not used. Leave open +//2.RFID MISO -> WIZWiki-W7500 SPI_MISO =D12 +//3.RFID MOSI -> WIZWiki-W7500 SPI_MOSI =D11 +//4.RFID SCK -> WIZWiki-W7500 SPI_SCK =D13 +//5.RFID SDA -> WIZWiki-W7500 SPI_CS =D10 +//6.RFID RST -> WIZWiki-W7500 =D9 //3.3V and Gnd to the respective pins + +//Adding Library for Mbed #include "mbed.h" +//Adding Library for MFRC522 #include "MFRC522.h" +//Adding Library for SPI protocol #include "SPI.h" #define VERSION "RFID_2017_04_03" #define CIBLE "WIZwiki-W7500" @@ -26,9 +27,11 @@ #define SPI_SCLK D13 #define SPI_CS D10 -// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8) +// WIZWiki-W7500 Pin for MFRC522 reset(pick another D pin if you need D8) #define MF_RESET D9 + +//Declaration of LED DigitalOut LedGreen(D7); DigitalOut LedRed(D6); DigitalOut LedYellow(D5); @@ -36,6 +39,8 @@ //Serial connection to PC for output Serial pc(USBTX, USBRX); + +//Declaration MFRC522 class MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET); //* Local functions */ @@ -44,16 +49,14 @@ void DumpMifareClassicSectorToSerial(MFRC522::Uid *uid, MFRC522::MIFARE_Key *key, uint8_t sector); void DumpMifareUltralightToSerial (void); -/** - * Dumps debug info about the selected PICC to Serial. - * On success the PICC is halted after dumping the data. - * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried. - */ +//Create function for writting data void WriteToRfidTag(MFRC522::Uid *uid) { + //Declaration of MFRC522 key MFRC522::MIFARE_Key key; + //Declaration of MFRC522 status MFRC522::StatusCode status; uint8_t buffer[16]; uint8_t block; @@ -88,7 +91,7 @@ printf("\n\r"); pc.printf("Enter 1 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -115,7 +118,7 @@ printf("\n\r"); pc.printf("Enter 2 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -140,14 +143,14 @@ LedYellow=1; pc.printf("Succesfully Written to tag: "); } - printf("\n\r"); - pc.printf("Enter 8 block: "); // Enter Data + printf("\n\r"); + pc.printf("Enter 4 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); - block = 8; + block = 4; pc.printf("Authenticating using key A..."); status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); if (status != MFRC522::STATUS_OK) { @@ -168,13 +171,68 @@ pc.printf("Succesfully Written to tag: "); } printf("\n\r"); - pc.printf("Enter 33 block: "); // Enter Data + pc.printf("Enter 5 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); - block = 33; + block = 5; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 6 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 6; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 8 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 8; pc.printf("Authenticating using key A..."); status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); if (status != MFRC522::STATUS_OK) { @@ -196,13 +254,13 @@ pc.printf("Succesfully Written to tag: "); } printf("\n\r"); - pc.printf("Enter 44 block: "); // Enter Data + pc.printf("Enter 9 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); - block = 44; + block = 9; pc.printf("Authenticating using key A..."); status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); if (status != MFRC522::STATUS_OK) { @@ -211,6 +269,7 @@ LedRed=1; continue; } + // Write block status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); if (status != MFRC522::STATUS_OK) { @@ -223,13 +282,13 @@ pc.printf("Succesfully Written to tag: "); } printf("\n\r"); - pc.printf("Enter 52 block: "); // Enter Data + pc.printf("Enter 10 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); - block = 52; + block = 10; pc.printf("Authenticating using key A..."); status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); if (status != MFRC522::STATUS_OK) { @@ -250,10 +309,66 @@ LedYellow=1; pc.printf("Succesfully Written to tag: "); } - /* printf("\n\r"); + printf("\n\r"); + pc.printf("Enter 12 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 12; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 13 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 13; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); pc.printf("Enter 14 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -278,10 +393,40 @@ LedYellow=1; pc.printf("Succesfully Written to tag: "); } + + + printf("\n\r"); + pc.printf("Enter 16 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 16; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } printf("\n\r"); pc.printf("Enter 17 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -307,9 +452,9 @@ pc.printf("Succesfully Written to tag: "); } printf("\n\r"); - pc.printf("Enter 19 block: "); // Enter Data + pc.printf("Enter 18 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -334,10 +479,11 @@ LedYellow=1; pc.printf("Succesfully Written to tag: "); } + printf("\n\r"); pc.printf("Enter 20 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); } printf("\n\r"); @@ -363,13 +509,97 @@ pc.printf("Succesfully Written to tag: "); } printf("\n\r"); - pc.printf("Enter 60 block: "); // Enter Data + pc.printf("Enter 21 block: "); // Enter Data len=sizeof(buffer); - for(uint8_t i = 0; i < len; i++) { + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 21; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 22 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { buffer[i] = pc.putc(pc.getc()); - }*/ + } + printf("\n\r"); + block = 22; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 24 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } printf("\n\r"); - block = 60; + block = 24; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 25 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 25; pc.printf("Authenticating using key A..."); status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); if (status != MFRC522::STATUS_OK) { @@ -390,12 +620,139 @@ LedYellow=1; pc.printf("Succesfully Written to tag: "); } + printf("\n\r"); + pc.printf("Enter 26 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 26; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 28 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 28; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 29 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 29; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + printf("\n\r"); + pc.printf("Enter 30 block: "); // Enter Data + len=sizeof(buffer); + for(uint8_t i = 0; i < 16; i++) { + buffer[i] = pc.putc(pc.getc()); + } + printf("\n\r"); + block = 30; + pc.printf("Authenticating using key A..."); + status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid)); + if (status != MFRC522::STATUS_OK) { + pc.printf("PCD_Authenticate() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } + + // Write block + status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + pc.printf("MIFARE_Write() failed: "); + pc.printf(RfChip.GetStatusCodeName(status)); + LedRed=1; + continue; + } else { + LedYellow=1; + pc.printf("Succesfully Written to tag: "); + } + + /* Here I am writing 3 Sector ie 1,2,4,5,6,7,8,9,10,12,13,14 blocks + If we you want to write more block so you should to define that block + ......................... + ..........block.......... + ......................... + ..........block.......... + ......................... + ..........block.......... + ......................... + ..........block.......... + 61 + 62 + */ DumpToSerial(&(RfChip.uid)); wait_ms(200); } -} +} //End WriteToRfidTag() +//Create function for reading data void DumpToSerial(MFRC522::Uid *uid) { MFRC522::MIFARE_Key key; @@ -444,7 +801,7 @@ printf("\n\r"); - RfChip.PICC_HaltA(); // Already done if it was a MIFARE Classic PICC. + RfChip.PICC_HaltA(); } // End PICC_DumpToSerial() /** @@ -675,8 +1032,8 @@ printf("MFRC522 version: %d\n\r", temp & 0x07); printf("\n\r"); - while(1) { - + while(true) { + LedGreen = 1; // Look for new cards @@ -695,7 +1052,7 @@ LedGreen = 0; - //Write name to RFID tags + //Calling WriteToRfidTag() WriteToRfidTag(&(RfChip.uid)); wait_ms(200);