MFRC522 Writing and reading RFID tag

Dependencies:   mbed

Committer:
sheralikhan
Date:
Wed Aug 30 09:48:28 2017 +0000
Revision:
1:0cc7ec8623d2
Parent:
0:f7bdb80c0ef2
Writing and Reading

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sheralikhan 1:0cc7ec8623d2 1 //Test of cheap 13.56Mhz RFID-RC522 module
sheralikhan 0:f7bdb80c0ef2 2 //Connect as follows:
sheralikhan 1:0cc7ec8623d2 3 //RFID pins -> WIZWiki-W7500 header CN5 (Arduino-compatible header)
sheralikhan 0:f7bdb80c0ef2 4 //----------------------------------------
sheralikhan 1:0cc7ec8623d2 5 //1.RFID IRQ -> Not used. Leave open
sheralikhan 1:0cc7ec8623d2 6 //2.RFID MISO -> WIZWiki-W7500 SPI_MISO =D12
sheralikhan 1:0cc7ec8623d2 7 //3.RFID MOSI -> WIZWiki-W7500 SPI_MOSI =D11
sheralikhan 1:0cc7ec8623d2 8 //4.RFID SCK -> WIZWiki-W7500 SPI_SCK =D13
sheralikhan 1:0cc7ec8623d2 9 //5.RFID SDA -> WIZWiki-W7500 SPI_CS =D10
sheralikhan 1:0cc7ec8623d2 10 //6.RFID RST -> WIZWiki-W7500 =D9
sheralikhan 0:f7bdb80c0ef2 11 //3.3V and Gnd to the respective pins
sheralikhan 0:f7bdb80c0ef2 12
sheralikhan 1:0cc7ec8623d2 13
sheralikhan 1:0cc7ec8623d2 14 //Adding Library for Mbed
sheralikhan 0:f7bdb80c0ef2 15 #include "mbed.h"
sheralikhan 1:0cc7ec8623d2 16 //Adding Library for MFRC522
sheralikhan 0:f7bdb80c0ef2 17 #include "MFRC522.h"
sheralikhan 1:0cc7ec8623d2 18 //Adding Library for SPI protocol
sheralikhan 0:f7bdb80c0ef2 19 #include "SPI.h"
sheralikhan 0:f7bdb80c0ef2 20 #define VERSION "RFID_2017_04_03"
sheralikhan 0:f7bdb80c0ef2 21 #define CIBLE "WIZwiki-W7500"
sheralikhan 0:f7bdb80c0ef2 22
sheralikhan 0:f7bdb80c0ef2 23
sheralikhan 0:f7bdb80c0ef2 24 // ARMmbed WIZwiki W7500 Pin for MFRC522 SPI Communication
sheralikhan 0:f7bdb80c0ef2 25 #define SPI_MOSI D11
sheralikhan 0:f7bdb80c0ef2 26 #define SPI_MISO D12
sheralikhan 0:f7bdb80c0ef2 27 #define SPI_SCLK D13
sheralikhan 0:f7bdb80c0ef2 28 #define SPI_CS D10
sheralikhan 0:f7bdb80c0ef2 29
sheralikhan 1:0cc7ec8623d2 30 // WIZWiki-W7500 Pin for MFRC522 reset(pick another D pin if you need D8)
sheralikhan 0:f7bdb80c0ef2 31 #define MF_RESET D9
sheralikhan 0:f7bdb80c0ef2 32
sheralikhan 1:0cc7ec8623d2 33
sheralikhan 1:0cc7ec8623d2 34 //Declaration of LED
sheralikhan 0:f7bdb80c0ef2 35 DigitalOut LedGreen(D7);
sheralikhan 0:f7bdb80c0ef2 36 DigitalOut LedRed(D6);
sheralikhan 0:f7bdb80c0ef2 37 DigitalOut LedYellow(D5);
sheralikhan 0:f7bdb80c0ef2 38
sheralikhan 0:f7bdb80c0ef2 39 //Serial connection to PC for output
sheralikhan 0:f7bdb80c0ef2 40 Serial pc(USBTX, USBRX);
sheralikhan 0:f7bdb80c0ef2 41
sheralikhan 1:0cc7ec8623d2 42
sheralikhan 1:0cc7ec8623d2 43 //Declaration MFRC522 class
sheralikhan 0:f7bdb80c0ef2 44 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
sheralikhan 0:f7bdb80c0ef2 45
sheralikhan 0:f7bdb80c0ef2 46 //* Local functions */
sheralikhan 0:f7bdb80c0ef2 47 void DumpToSerial(MFRC522::Uid *uid);
sheralikhan 0:f7bdb80c0ef2 48 void DumpMifareClassicToSerial (MFRC522::Uid *uid, uint8_t piccType, MFRC522::MIFARE_Key *key);
sheralikhan 0:f7bdb80c0ef2 49 void DumpMifareClassicSectorToSerial(MFRC522::Uid *uid, MFRC522::MIFARE_Key *key, uint8_t sector);
sheralikhan 0:f7bdb80c0ef2 50 void DumpMifareUltralightToSerial (void);
sheralikhan 0:f7bdb80c0ef2 51
sheralikhan 0:f7bdb80c0ef2 52
sheralikhan 1:0cc7ec8623d2 53 //Create function for writting data
sheralikhan 0:f7bdb80c0ef2 54 void WriteToRfidTag(MFRC522::Uid *uid)
sheralikhan 0:f7bdb80c0ef2 55 {
sheralikhan 0:f7bdb80c0ef2 56
sheralikhan 1:0cc7ec8623d2 57 //Declaration of MFRC522 key
sheralikhan 0:f7bdb80c0ef2 58 MFRC522::MIFARE_Key key;
sheralikhan 1:0cc7ec8623d2 59 //Declaration of MFRC522 status
sheralikhan 0:f7bdb80c0ef2 60 MFRC522::StatusCode status;
sheralikhan 0:f7bdb80c0ef2 61 uint8_t buffer[16];
sheralikhan 0:f7bdb80c0ef2 62 uint8_t block;
sheralikhan 0:f7bdb80c0ef2 63 uint8_t len;
sheralikhan 0:f7bdb80c0ef2 64 while(true) {
sheralikhan 0:f7bdb80c0ef2 65 LedGreen=1;
sheralikhan 0:f7bdb80c0ef2 66 for (uint8_t i = 0; i < 6; i++) {
sheralikhan 0:f7bdb80c0ef2 67 key.keyByte[i] = 0xFF;
sheralikhan 0:f7bdb80c0ef2 68 }
sheralikhan 0:f7bdb80c0ef2 69 // Look for new cards
sheralikhan 0:f7bdb80c0ef2 70 if ( ! RfChip.PICC_IsNewCardPresent()) {
sheralikhan 0:f7bdb80c0ef2 71 continue;
sheralikhan 0:f7bdb80c0ef2 72 }
sheralikhan 0:f7bdb80c0ef2 73
sheralikhan 0:f7bdb80c0ef2 74 // Select one of the cards
sheralikhan 0:f7bdb80c0ef2 75 if ( ! RfChip.PICC_ReadCardSerial()) {
sheralikhan 0:f7bdb80c0ef2 76 continue;
sheralikhan 0:f7bdb80c0ef2 77 }
sheralikhan 0:f7bdb80c0ef2 78
sheralikhan 0:f7bdb80c0ef2 79 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 80 pc.printf("Card UID: "); //Dump UID
sheralikhan 0:f7bdb80c0ef2 81 for (uint8_t i = 0; i < RfChip.uid.size; i++) {
sheralikhan 0:f7bdb80c0ef2 82 pc.printf(RfChip.uid.uidByte[i] < 0x10 ? " 0" : " ");
sheralikhan 0:f7bdb80c0ef2 83 printf(" %X", RfChip.uid.uidByte[i]);
sheralikhan 0:f7bdb80c0ef2 84 }
sheralikhan 0:f7bdb80c0ef2 85 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 86 pc.printf("PICC type: "); // Dump PICC type
sheralikhan 0:f7bdb80c0ef2 87 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
sheralikhan 0:f7bdb80c0ef2 88 pc.printf( RfChip.PICC_GetTypeName(piccType));
sheralikhan 0:f7bdb80c0ef2 89 LedGreen=0;
sheralikhan 0:f7bdb80c0ef2 90
sheralikhan 0:f7bdb80c0ef2 91 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 92 pc.printf("Enter 1 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 93 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 94 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 95 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 96 }
sheralikhan 0:f7bdb80c0ef2 97 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 98 block = 1;
sheralikhan 0:f7bdb80c0ef2 99 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 100 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 101 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 102 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 103 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 104 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 105 continue;
sheralikhan 0:f7bdb80c0ef2 106 }
sheralikhan 0:f7bdb80c0ef2 107 // Write block
sheralikhan 0:f7bdb80c0ef2 108 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 109 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 110 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 111 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 112 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 113 continue;
sheralikhan 0:f7bdb80c0ef2 114 } else {
sheralikhan 0:f7bdb80c0ef2 115 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 116 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 117 }
sheralikhan 0:f7bdb80c0ef2 118 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 119 pc.printf("Enter 2 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 120 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 121 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 122 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 123 }
sheralikhan 0:f7bdb80c0ef2 124 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 125 block = 2;
sheralikhan 0:f7bdb80c0ef2 126 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 127 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 128 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 129 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 130 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 131 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 132 continue;
sheralikhan 0:f7bdb80c0ef2 133 }
sheralikhan 0:f7bdb80c0ef2 134
sheralikhan 0:f7bdb80c0ef2 135 // Write block
sheralikhan 0:f7bdb80c0ef2 136 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 137 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 138 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 139 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 140 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 141 continue;
sheralikhan 0:f7bdb80c0ef2 142 } else {
sheralikhan 0:f7bdb80c0ef2 143 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 144 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 145 }
sheralikhan 1:0cc7ec8623d2 146 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 147 pc.printf("Enter 4 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 148 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 149 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 150 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 151 }
sheralikhan 0:f7bdb80c0ef2 152 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 153 block = 4;
sheralikhan 0:f7bdb80c0ef2 154 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 155 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 156 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 157 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 158 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 159 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 160 continue;
sheralikhan 0:f7bdb80c0ef2 161 }
sheralikhan 0:f7bdb80c0ef2 162 // Write block
sheralikhan 0:f7bdb80c0ef2 163 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 164 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 165 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 166 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 167 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 168 continue;
sheralikhan 0:f7bdb80c0ef2 169 } else {
sheralikhan 0:f7bdb80c0ef2 170 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 171 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 172 }
sheralikhan 0:f7bdb80c0ef2 173 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 174 pc.printf("Enter 5 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 175 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 176 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 177 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 178 }
sheralikhan 0:f7bdb80c0ef2 179 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 180 block = 5;
sheralikhan 1:0cc7ec8623d2 181 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 182 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 183 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 184 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 185 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 186 LedRed=1;
sheralikhan 1:0cc7ec8623d2 187 continue;
sheralikhan 1:0cc7ec8623d2 188 }
sheralikhan 1:0cc7ec8623d2 189
sheralikhan 1:0cc7ec8623d2 190 // Write block
sheralikhan 1:0cc7ec8623d2 191 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 192 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 193 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 194 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 195 LedRed=1;
sheralikhan 1:0cc7ec8623d2 196 continue;
sheralikhan 1:0cc7ec8623d2 197 } else {
sheralikhan 1:0cc7ec8623d2 198 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 199 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 200 }
sheralikhan 1:0cc7ec8623d2 201 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 202 pc.printf("Enter 6 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 203 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 204 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 205 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 206 }
sheralikhan 1:0cc7ec8623d2 207 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 208 block = 6;
sheralikhan 1:0cc7ec8623d2 209 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 210 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 211 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 212 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 213 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 214 LedRed=1;
sheralikhan 1:0cc7ec8623d2 215 continue;
sheralikhan 1:0cc7ec8623d2 216 }
sheralikhan 1:0cc7ec8623d2 217 // Write block
sheralikhan 1:0cc7ec8623d2 218 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 219 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 220 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 221 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 222 LedRed=1;
sheralikhan 1:0cc7ec8623d2 223 continue;
sheralikhan 1:0cc7ec8623d2 224 } else {
sheralikhan 1:0cc7ec8623d2 225 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 226 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 227 }
sheralikhan 1:0cc7ec8623d2 228 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 229 pc.printf("Enter 8 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 230 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 231 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 232 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 233 }
sheralikhan 1:0cc7ec8623d2 234 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 235 block = 8;
sheralikhan 0:f7bdb80c0ef2 236 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 237 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 238 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 239 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 240 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 241 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 242 continue;
sheralikhan 0:f7bdb80c0ef2 243 }
sheralikhan 0:f7bdb80c0ef2 244
sheralikhan 0:f7bdb80c0ef2 245 // Write block
sheralikhan 0:f7bdb80c0ef2 246 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 247 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 248 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 249 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 250 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 251 continue;
sheralikhan 0:f7bdb80c0ef2 252 } else {
sheralikhan 0:f7bdb80c0ef2 253 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 254 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 255 }
sheralikhan 0:f7bdb80c0ef2 256 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 257 pc.printf("Enter 9 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 258 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 259 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 260 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 261 }
sheralikhan 0:f7bdb80c0ef2 262 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 263 block = 9;
sheralikhan 0:f7bdb80c0ef2 264 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 265 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 266 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 267 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 268 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 269 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 270 continue;
sheralikhan 0:f7bdb80c0ef2 271 }
sheralikhan 1:0cc7ec8623d2 272
sheralikhan 0:f7bdb80c0ef2 273 // Write block
sheralikhan 0:f7bdb80c0ef2 274 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 275 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 276 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 277 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 278 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 279 continue;
sheralikhan 0:f7bdb80c0ef2 280 } else {
sheralikhan 0:f7bdb80c0ef2 281 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 282 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 283 }
sheralikhan 0:f7bdb80c0ef2 284 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 285 pc.printf("Enter 10 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 286 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 287 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 288 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 289 }
sheralikhan 0:f7bdb80c0ef2 290 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 291 block = 10;
sheralikhan 0:f7bdb80c0ef2 292 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 293 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 294 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 295 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 296 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 297 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 298 continue;
sheralikhan 0:f7bdb80c0ef2 299 }
sheralikhan 0:f7bdb80c0ef2 300
sheralikhan 0:f7bdb80c0ef2 301 // Write block
sheralikhan 0:f7bdb80c0ef2 302 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 303 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 304 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 305 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 306 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 307 continue;
sheralikhan 0:f7bdb80c0ef2 308 } else {
sheralikhan 0:f7bdb80c0ef2 309 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 310 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 311 }
sheralikhan 1:0cc7ec8623d2 312 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 313 pc.printf("Enter 12 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 314 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 315 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 316 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 317 }
sheralikhan 1:0cc7ec8623d2 318 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 319 block = 12;
sheralikhan 1:0cc7ec8623d2 320 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 321 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 322 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 323 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 324 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 325 LedRed=1;
sheralikhan 1:0cc7ec8623d2 326 continue;
sheralikhan 1:0cc7ec8623d2 327 }
sheralikhan 1:0cc7ec8623d2 328
sheralikhan 1:0cc7ec8623d2 329 // Write block
sheralikhan 1:0cc7ec8623d2 330 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 331 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 332 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 333 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 334 LedRed=1;
sheralikhan 1:0cc7ec8623d2 335 continue;
sheralikhan 1:0cc7ec8623d2 336 } else {
sheralikhan 1:0cc7ec8623d2 337 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 338 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 339 }
sheralikhan 1:0cc7ec8623d2 340 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 341 pc.printf("Enter 13 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 342 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 343 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 344 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 345 }
sheralikhan 1:0cc7ec8623d2 346 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 347 block = 13;
sheralikhan 1:0cc7ec8623d2 348 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 349 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 350 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 351 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 352 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 353 LedRed=1;
sheralikhan 1:0cc7ec8623d2 354 continue;
sheralikhan 1:0cc7ec8623d2 355 }
sheralikhan 1:0cc7ec8623d2 356
sheralikhan 1:0cc7ec8623d2 357 // Write block
sheralikhan 1:0cc7ec8623d2 358 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 359 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 360 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 361 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 362 LedRed=1;
sheralikhan 1:0cc7ec8623d2 363 continue;
sheralikhan 1:0cc7ec8623d2 364 } else {
sheralikhan 1:0cc7ec8623d2 365 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 366 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 367 }
sheralikhan 1:0cc7ec8623d2 368 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 369 pc.printf("Enter 14 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 370 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 371 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 372 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 373 }
sheralikhan 0:f7bdb80c0ef2 374 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 375 block = 14;
sheralikhan 0:f7bdb80c0ef2 376 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 377 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 378 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 379 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 380 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 381 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 382 continue;
sheralikhan 0:f7bdb80c0ef2 383 }
sheralikhan 0:f7bdb80c0ef2 384
sheralikhan 0:f7bdb80c0ef2 385 // Write block
sheralikhan 0:f7bdb80c0ef2 386 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 387 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 388 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 389 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 390 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 391 continue;
sheralikhan 0:f7bdb80c0ef2 392 } else {
sheralikhan 0:f7bdb80c0ef2 393 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 394 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 395 }
sheralikhan 1:0cc7ec8623d2 396
sheralikhan 1:0cc7ec8623d2 397
sheralikhan 1:0cc7ec8623d2 398 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 399 pc.printf("Enter 16 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 400 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 401 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 402 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 403 }
sheralikhan 1:0cc7ec8623d2 404 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 405 block = 16;
sheralikhan 1:0cc7ec8623d2 406 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 407 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 408 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 409 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 410 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 411 LedRed=1;
sheralikhan 1:0cc7ec8623d2 412 continue;
sheralikhan 1:0cc7ec8623d2 413 }
sheralikhan 1:0cc7ec8623d2 414
sheralikhan 1:0cc7ec8623d2 415 // Write block
sheralikhan 1:0cc7ec8623d2 416 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 417 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 418 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 419 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 420 LedRed=1;
sheralikhan 1:0cc7ec8623d2 421 continue;
sheralikhan 1:0cc7ec8623d2 422 } else {
sheralikhan 1:0cc7ec8623d2 423 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 424 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 425 }
sheralikhan 0:f7bdb80c0ef2 426 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 427 pc.printf("Enter 17 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 428 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 429 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 430 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 431 }
sheralikhan 0:f7bdb80c0ef2 432 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 433 block = 17;
sheralikhan 0:f7bdb80c0ef2 434 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 435 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 436 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 437 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 438 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 439 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 440 continue;
sheralikhan 0:f7bdb80c0ef2 441 }
sheralikhan 0:f7bdb80c0ef2 442
sheralikhan 0:f7bdb80c0ef2 443 // Write block
sheralikhan 0:f7bdb80c0ef2 444 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 445 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 446 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 447 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 448 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 449 continue;
sheralikhan 0:f7bdb80c0ef2 450 } else {
sheralikhan 0:f7bdb80c0ef2 451 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 452 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 453 }
sheralikhan 0:f7bdb80c0ef2 454 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 455 pc.printf("Enter 18 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 456 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 457 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 458 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 459 }
sheralikhan 0:f7bdb80c0ef2 460 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 461 block = 18;
sheralikhan 0:f7bdb80c0ef2 462 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 463 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 464 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 465 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 466 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 467 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 468 continue;
sheralikhan 0:f7bdb80c0ef2 469 }
sheralikhan 0:f7bdb80c0ef2 470
sheralikhan 0:f7bdb80c0ef2 471 // Write block
sheralikhan 0:f7bdb80c0ef2 472 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 473 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 474 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 475 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 476 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 477 continue;
sheralikhan 0:f7bdb80c0ef2 478 } else {
sheralikhan 0:f7bdb80c0ef2 479 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 480 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 481 }
sheralikhan 1:0cc7ec8623d2 482
sheralikhan 0:f7bdb80c0ef2 483 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 484 pc.printf("Enter 20 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 485 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 486 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 487 buffer[i] = pc.putc(pc.getc());
sheralikhan 0:f7bdb80c0ef2 488 }
sheralikhan 0:f7bdb80c0ef2 489 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 490 block = 20;
sheralikhan 0:f7bdb80c0ef2 491 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 492 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 493 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 494 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 495 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 496 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 497 continue;
sheralikhan 0:f7bdb80c0ef2 498 }
sheralikhan 0:f7bdb80c0ef2 499
sheralikhan 0:f7bdb80c0ef2 500 // Write block
sheralikhan 0:f7bdb80c0ef2 501 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 502 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 503 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 504 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 505 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 506 continue;
sheralikhan 0:f7bdb80c0ef2 507 } else {
sheralikhan 0:f7bdb80c0ef2 508 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 509 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 510 }
sheralikhan 0:f7bdb80c0ef2 511 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 512 pc.printf("Enter 21 block: "); // Enter Data
sheralikhan 0:f7bdb80c0ef2 513 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 514 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 515 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 516 }
sheralikhan 1:0cc7ec8623d2 517 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 518 block = 21;
sheralikhan 1:0cc7ec8623d2 519 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 520 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 521 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 522 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 523 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 524 LedRed=1;
sheralikhan 1:0cc7ec8623d2 525 continue;
sheralikhan 1:0cc7ec8623d2 526 }
sheralikhan 1:0cc7ec8623d2 527
sheralikhan 1:0cc7ec8623d2 528 // Write block
sheralikhan 1:0cc7ec8623d2 529 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 530 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 531 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 532 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 533 LedRed=1;
sheralikhan 1:0cc7ec8623d2 534 continue;
sheralikhan 1:0cc7ec8623d2 535 } else {
sheralikhan 1:0cc7ec8623d2 536 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 537 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 538 }
sheralikhan 1:0cc7ec8623d2 539 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 540 pc.printf("Enter 22 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 541 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 542 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 0:f7bdb80c0ef2 543 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 544 }
sheralikhan 1:0cc7ec8623d2 545 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 546 block = 22;
sheralikhan 1:0cc7ec8623d2 547 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 548 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 549 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 550 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 551 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 552 LedRed=1;
sheralikhan 1:0cc7ec8623d2 553 continue;
sheralikhan 1:0cc7ec8623d2 554 }
sheralikhan 1:0cc7ec8623d2 555
sheralikhan 1:0cc7ec8623d2 556 // Write block
sheralikhan 1:0cc7ec8623d2 557 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 558 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 559 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 560 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 561 LedRed=1;
sheralikhan 1:0cc7ec8623d2 562 continue;
sheralikhan 1:0cc7ec8623d2 563 } else {
sheralikhan 1:0cc7ec8623d2 564 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 565 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 566 }
sheralikhan 1:0cc7ec8623d2 567 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 568 pc.printf("Enter 24 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 569 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 570 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 571 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 572 }
sheralikhan 0:f7bdb80c0ef2 573 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 574 block = 24;
sheralikhan 1:0cc7ec8623d2 575 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 576 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 577 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 578 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 579 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 580 LedRed=1;
sheralikhan 1:0cc7ec8623d2 581 continue;
sheralikhan 1:0cc7ec8623d2 582 }
sheralikhan 1:0cc7ec8623d2 583
sheralikhan 1:0cc7ec8623d2 584 // Write block
sheralikhan 1:0cc7ec8623d2 585 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 586 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 587 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 588 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 589 LedRed=1;
sheralikhan 1:0cc7ec8623d2 590 continue;
sheralikhan 1:0cc7ec8623d2 591 } else {
sheralikhan 1:0cc7ec8623d2 592 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 593 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 594 }
sheralikhan 1:0cc7ec8623d2 595 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 596 pc.printf("Enter 25 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 597 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 598 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 599 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 600 }
sheralikhan 1:0cc7ec8623d2 601 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 602 block = 25;
sheralikhan 0:f7bdb80c0ef2 603 pc.printf("Authenticating using key A...");
sheralikhan 0:f7bdb80c0ef2 604 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 605 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 606 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 0:f7bdb80c0ef2 607 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 608 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 609 continue;
sheralikhan 0:f7bdb80c0ef2 610 }
sheralikhan 0:f7bdb80c0ef2 611
sheralikhan 0:f7bdb80c0ef2 612 // Write block
sheralikhan 0:f7bdb80c0ef2 613 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 0:f7bdb80c0ef2 614 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 615 pc.printf("MIFARE_Write() failed: ");
sheralikhan 0:f7bdb80c0ef2 616 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 617 LedRed=1;
sheralikhan 0:f7bdb80c0ef2 618 continue;
sheralikhan 0:f7bdb80c0ef2 619 } else {
sheralikhan 0:f7bdb80c0ef2 620 LedYellow=1;
sheralikhan 0:f7bdb80c0ef2 621 pc.printf("Succesfully Written to tag: ");
sheralikhan 0:f7bdb80c0ef2 622 }
sheralikhan 1:0cc7ec8623d2 623 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 624 pc.printf("Enter 26 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 625 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 626 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 627 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 628 }
sheralikhan 1:0cc7ec8623d2 629 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 630 block = 26;
sheralikhan 1:0cc7ec8623d2 631 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 632 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 633 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 634 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 635 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 636 LedRed=1;
sheralikhan 1:0cc7ec8623d2 637 continue;
sheralikhan 1:0cc7ec8623d2 638 }
sheralikhan 1:0cc7ec8623d2 639
sheralikhan 1:0cc7ec8623d2 640 // Write block
sheralikhan 1:0cc7ec8623d2 641 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 642 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 643 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 644 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 645 LedRed=1;
sheralikhan 1:0cc7ec8623d2 646 continue;
sheralikhan 1:0cc7ec8623d2 647 } else {
sheralikhan 1:0cc7ec8623d2 648 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 649 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 650 }
sheralikhan 1:0cc7ec8623d2 651 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 652 pc.printf("Enter 28 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 653 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 654 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 655 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 656 }
sheralikhan 1:0cc7ec8623d2 657 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 658 block = 28;
sheralikhan 1:0cc7ec8623d2 659 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 660 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 661 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 662 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 663 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 664 LedRed=1;
sheralikhan 1:0cc7ec8623d2 665 continue;
sheralikhan 1:0cc7ec8623d2 666 }
sheralikhan 1:0cc7ec8623d2 667
sheralikhan 1:0cc7ec8623d2 668 // Write block
sheralikhan 1:0cc7ec8623d2 669 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 670 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 671 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 672 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 673 LedRed=1;
sheralikhan 1:0cc7ec8623d2 674 continue;
sheralikhan 1:0cc7ec8623d2 675 } else {
sheralikhan 1:0cc7ec8623d2 676 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 677 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 678 }
sheralikhan 1:0cc7ec8623d2 679 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 680 pc.printf("Enter 29 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 681 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 682 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 683 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 684 }
sheralikhan 1:0cc7ec8623d2 685 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 686 block = 29;
sheralikhan 1:0cc7ec8623d2 687 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 688 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 689 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 690 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 691 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 692 LedRed=1;
sheralikhan 1:0cc7ec8623d2 693 continue;
sheralikhan 1:0cc7ec8623d2 694 }
sheralikhan 1:0cc7ec8623d2 695
sheralikhan 1:0cc7ec8623d2 696 // Write block
sheralikhan 1:0cc7ec8623d2 697 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 698 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 699 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 700 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 701 LedRed=1;
sheralikhan 1:0cc7ec8623d2 702 continue;
sheralikhan 1:0cc7ec8623d2 703 } else {
sheralikhan 1:0cc7ec8623d2 704 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 705 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 706 }
sheralikhan 1:0cc7ec8623d2 707 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 708 pc.printf("Enter 30 block: "); // Enter Data
sheralikhan 1:0cc7ec8623d2 709 len=sizeof(buffer);
sheralikhan 1:0cc7ec8623d2 710 for(uint8_t i = 0; i < 16; i++) {
sheralikhan 1:0cc7ec8623d2 711 buffer[i] = pc.putc(pc.getc());
sheralikhan 1:0cc7ec8623d2 712 }
sheralikhan 1:0cc7ec8623d2 713 printf("\n\r");
sheralikhan 1:0cc7ec8623d2 714 block = 30;
sheralikhan 1:0cc7ec8623d2 715 pc.printf("Authenticating using key A...");
sheralikhan 1:0cc7ec8623d2 716 status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
sheralikhan 1:0cc7ec8623d2 717 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 718 pc.printf("PCD_Authenticate() failed: ");
sheralikhan 1:0cc7ec8623d2 719 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 720 LedRed=1;
sheralikhan 1:0cc7ec8623d2 721 continue;
sheralikhan 1:0cc7ec8623d2 722 }
sheralikhan 1:0cc7ec8623d2 723
sheralikhan 1:0cc7ec8623d2 724 // Write block
sheralikhan 1:0cc7ec8623d2 725 status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
sheralikhan 1:0cc7ec8623d2 726 if (status != MFRC522::STATUS_OK) {
sheralikhan 1:0cc7ec8623d2 727 pc.printf("MIFARE_Write() failed: ");
sheralikhan 1:0cc7ec8623d2 728 pc.printf(RfChip.GetStatusCodeName(status));
sheralikhan 1:0cc7ec8623d2 729 LedRed=1;
sheralikhan 1:0cc7ec8623d2 730 continue;
sheralikhan 1:0cc7ec8623d2 731 } else {
sheralikhan 1:0cc7ec8623d2 732 LedYellow=1;
sheralikhan 1:0cc7ec8623d2 733 pc.printf("Succesfully Written to tag: ");
sheralikhan 1:0cc7ec8623d2 734 }
sheralikhan 1:0cc7ec8623d2 735
sheralikhan 1:0cc7ec8623d2 736 /* Here I am writing 3 Sector ie 1,2,4,5,6,7,8,9,10,12,13,14 blocks
sheralikhan 1:0cc7ec8623d2 737 If we you want to write more block so you should to define that block
sheralikhan 1:0cc7ec8623d2 738 .........................
sheralikhan 1:0cc7ec8623d2 739 ..........block..........
sheralikhan 1:0cc7ec8623d2 740 .........................
sheralikhan 1:0cc7ec8623d2 741 ..........block..........
sheralikhan 1:0cc7ec8623d2 742 .........................
sheralikhan 1:0cc7ec8623d2 743 ..........block..........
sheralikhan 1:0cc7ec8623d2 744 .........................
sheralikhan 1:0cc7ec8623d2 745 ..........block..........
sheralikhan 1:0cc7ec8623d2 746 61
sheralikhan 1:0cc7ec8623d2 747 62
sheralikhan 1:0cc7ec8623d2 748 */
sheralikhan 0:f7bdb80c0ef2 749 DumpToSerial(&(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 750 wait_ms(200);
sheralikhan 0:f7bdb80c0ef2 751 }
sheralikhan 0:f7bdb80c0ef2 752
sheralikhan 1:0cc7ec8623d2 753 } //End WriteToRfidTag()
sheralikhan 0:f7bdb80c0ef2 754
sheralikhan 1:0cc7ec8623d2 755 //Create function for reading data
sheralikhan 0:f7bdb80c0ef2 756 void DumpToSerial(MFRC522::Uid *uid)
sheralikhan 0:f7bdb80c0ef2 757 {
sheralikhan 0:f7bdb80c0ef2 758 MFRC522::MIFARE_Key key;
sheralikhan 0:f7bdb80c0ef2 759
sheralikhan 0:f7bdb80c0ef2 760 // Print Card UID
sheralikhan 0:f7bdb80c0ef2 761 printf("Card UID: ");
sheralikhan 0:f7bdb80c0ef2 762 for (uint8_t i = 0; i < RfChip.uid.size; i++) {
sheralikhan 0:f7bdb80c0ef2 763 printf(" %X", RfChip.uid.uidByte[i]);
sheralikhan 0:f7bdb80c0ef2 764 }
sheralikhan 0:f7bdb80c0ef2 765 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 766
sheralikhan 0:f7bdb80c0ef2 767 // Print Card type
sheralikhan 0:f7bdb80c0ef2 768 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
sheralikhan 0:f7bdb80c0ef2 769 printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
sheralikhan 0:f7bdb80c0ef2 770 wait_ms(1000);
sheralikhan 0:f7bdb80c0ef2 771
sheralikhan 0:f7bdb80c0ef2 772 // Dump contents
sheralikhan 0:f7bdb80c0ef2 773 switch (piccType) {
sheralikhan 0:f7bdb80c0ef2 774 case MFRC522::PICC_TYPE_MIFARE_MINI:
sheralikhan 0:f7bdb80c0ef2 775 case MFRC522::PICC_TYPE_MIFARE_1K:
sheralikhan 0:f7bdb80c0ef2 776 case MFRC522::PICC_TYPE_MIFARE_4K:
sheralikhan 0:f7bdb80c0ef2 777 // All keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
sheralikhan 0:f7bdb80c0ef2 778 for (uint8_t i = 0; i < 6; i++) {
sheralikhan 0:f7bdb80c0ef2 779 key.keyByte[i] = 0xFF;
sheralikhan 0:f7bdb80c0ef2 780 }
sheralikhan 0:f7bdb80c0ef2 781 DumpMifareClassicToSerial(uid, piccType, &key);
sheralikhan 0:f7bdb80c0ef2 782 break;
sheralikhan 0:f7bdb80c0ef2 783
sheralikhan 0:f7bdb80c0ef2 784 case MFRC522::PICC_TYPE_MIFARE_UL:
sheralikhan 0:f7bdb80c0ef2 785 DumpMifareUltralightToSerial();
sheralikhan 0:f7bdb80c0ef2 786 break;
sheralikhan 0:f7bdb80c0ef2 787 case MFRC522::PICC_TYPE_TNP3XXX:
sheralikhan 0:f7bdb80c0ef2 788 printf("Dumping memory contents not implemented for that PICC type. \n\r");
sheralikhan 0:f7bdb80c0ef2 789 break;
sheralikhan 0:f7bdb80c0ef2 790 case MFRC522::PICC_TYPE_ISO_14443_4:
sheralikhan 0:f7bdb80c0ef2 791 case MFRC522::PICC_TYPE_ISO_18092:
sheralikhan 0:f7bdb80c0ef2 792 case MFRC522::PICC_TYPE_MIFARE_PLUS:
sheralikhan 0:f7bdb80c0ef2 793 printf("Dumping memory contents not implemented for that PICC type. \n\r");
sheralikhan 0:f7bdb80c0ef2 794 break;
sheralikhan 0:f7bdb80c0ef2 795
sheralikhan 0:f7bdb80c0ef2 796 case MFRC522::PICC_TYPE_UNKNOWN:
sheralikhan 0:f7bdb80c0ef2 797 case MFRC522::PICC_TYPE_NOT_COMPLETE:
sheralikhan 0:f7bdb80c0ef2 798 default:
sheralikhan 0:f7bdb80c0ef2 799 break; // No memory dump here
sheralikhan 0:f7bdb80c0ef2 800 }
sheralikhan 0:f7bdb80c0ef2 801
sheralikhan 0:f7bdb80c0ef2 802 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 803
sheralikhan 1:0cc7ec8623d2 804 RfChip.PICC_HaltA();
sheralikhan 0:f7bdb80c0ef2 805 } // End PICC_DumpToSerial()
sheralikhan 0:f7bdb80c0ef2 806
sheralikhan 0:f7bdb80c0ef2 807 /**
sheralikhan 0:f7bdb80c0ef2 808 * Dumps memory contents of a MIFARE Classic PICC.
sheralikhan 0:f7bdb80c0ef2 809 * On success the PICC is halted after dumping the data.
sheralikhan 0:f7bdb80c0ef2 810 */
sheralikhan 0:f7bdb80c0ef2 811 void DumpMifareClassicToSerial(MFRC522::Uid *uid, uint8_t piccType, MFRC522::MIFARE_Key *key)
sheralikhan 0:f7bdb80c0ef2 812 {
sheralikhan 0:f7bdb80c0ef2 813 uint8_t no_of_sectors = 0;
sheralikhan 0:f7bdb80c0ef2 814 switch (piccType) {
sheralikhan 0:f7bdb80c0ef2 815 case MFRC522::PICC_TYPE_MIFARE_MINI:
sheralikhan 0:f7bdb80c0ef2 816 // Has 5 sectors * 4 blocks/sector * 16 bytes/block = 320 bytes.
sheralikhan 0:f7bdb80c0ef2 817 no_of_sectors = 5;
sheralikhan 0:f7bdb80c0ef2 818 break;
sheralikhan 0:f7bdb80c0ef2 819
sheralikhan 0:f7bdb80c0ef2 820 case MFRC522::PICC_TYPE_MIFARE_1K:
sheralikhan 0:f7bdb80c0ef2 821 // Has 16 sectors * 4 blocks/sector * 16 bytes/block = 1024 bytes.
sheralikhan 0:f7bdb80c0ef2 822 no_of_sectors = 16;
sheralikhan 0:f7bdb80c0ef2 823 break;
sheralikhan 0:f7bdb80c0ef2 824
sheralikhan 0:f7bdb80c0ef2 825 case MFRC522::PICC_TYPE_MIFARE_4K:
sheralikhan 0:f7bdb80c0ef2 826 // Has (32 sectors * 4 blocks/sector + 8 sectors * 16 blocks/sector) * 16 bytes/block = 4096 bytes.
sheralikhan 0:f7bdb80c0ef2 827 no_of_sectors = 40;
sheralikhan 0:f7bdb80c0ef2 828 break;
sheralikhan 0:f7bdb80c0ef2 829
sheralikhan 0:f7bdb80c0ef2 830 default:
sheralikhan 0:f7bdb80c0ef2 831 // Should not happen. Ignore.
sheralikhan 0:f7bdb80c0ef2 832 break;
sheralikhan 0:f7bdb80c0ef2 833 }
sheralikhan 0:f7bdb80c0ef2 834
sheralikhan 0:f7bdb80c0ef2 835 // Dump sectors, highest address first.
sheralikhan 0:f7bdb80c0ef2 836 if (no_of_sectors) {
sheralikhan 0:f7bdb80c0ef2 837 printf("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits \n\r");
sheralikhan 0:f7bdb80c0ef2 838 printf("----------------------------------------------------------------------------------------- \n\r");
sheralikhan 0:f7bdb80c0ef2 839 for (int8_t i = no_of_sectors-1 ; i>= 0; i--) {
sheralikhan 0:f7bdb80c0ef2 840
sheralikhan 0:f7bdb80c0ef2 841 DumpMifareClassicSectorToSerial(uid, key, i);
sheralikhan 0:f7bdb80c0ef2 842
sheralikhan 0:f7bdb80c0ef2 843
sheralikhan 0:f7bdb80c0ef2 844 }
sheralikhan 0:f7bdb80c0ef2 845 }
sheralikhan 0:f7bdb80c0ef2 846
sheralikhan 0:f7bdb80c0ef2 847 RfChip.PICC_HaltA(); // Halt the PICC before stopping the encrypted session.
sheralikhan 0:f7bdb80c0ef2 848 RfChip.PCD_StopCrypto1();
sheralikhan 0:f7bdb80c0ef2 849 } // End PICC_DumpMifareClassicToSerial()
sheralikhan 0:f7bdb80c0ef2 850
sheralikhan 0:f7bdb80c0ef2 851 /**
sheralikhan 0:f7bdb80c0ef2 852 * Dumps memory contents of a sector of a MIFARE Classic PICC.
sheralikhan 0:f7bdb80c0ef2 853 * Uses PCD_Authenticate(), MIFARE_Read() and PCD_StopCrypto1.
sheralikhan 0:f7bdb80c0ef2 854 * Always uses PICC_CMD_MF_AUTH_KEY_A because only Key A can always read the sector trailer access bits.
sheralikhan 0:f7bdb80c0ef2 855 */
sheralikhan 0:f7bdb80c0ef2 856 void DumpMifareClassicSectorToSerial(MFRC522::Uid *uid, MFRC522::MIFARE_Key *key, uint8_t sector)
sheralikhan 0:f7bdb80c0ef2 857 {
sheralikhan 0:f7bdb80c0ef2 858 uint8_t status;
sheralikhan 0:f7bdb80c0ef2 859 uint8_t firstBlock; // Address of lowest address to dump actually last block dumped)
sheralikhan 0:f7bdb80c0ef2 860 uint8_t no_of_blocks; // Number of blocks in sector
sheralikhan 0:f7bdb80c0ef2 861 bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector.
sheralikhan 0:f7bdb80c0ef2 862
sheralikhan 0:f7bdb80c0ef2 863 // The access bits are stored in a peculiar fashion.
sheralikhan 0:f7bdb80c0ef2 864 // There are four groups:
sheralikhan 0:f7bdb80c0ef2 865 // g[3] Access bits for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39)
sheralikhan 0:f7bdb80c0ef2 866 // g[2] Access bits for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39)
sheralikhan 0:f7bdb80c0ef2 867 // g[1] Access bits for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39)
sheralikhan 0:f7bdb80c0ef2 868 // g[0] Access bits for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39)
sheralikhan 0:f7bdb80c0ef2 869 // Each group has access bits [C1 C2 C3]. In this code C1 is MSB and C3 is LSB.
sheralikhan 0:f7bdb80c0ef2 870 // The four CX bits are stored together in a nible cx and an inverted nible cx_.
sheralikhan 0:f7bdb80c0ef2 871 uint8_t c1, c2, c3; // Nibbles
sheralikhan 0:f7bdb80c0ef2 872 uint8_t c1_, c2_, c3_; // Inverted nibbles
sheralikhan 0:f7bdb80c0ef2 873 bool invertedError = false; // True if one of the inverted nibbles did not match
sheralikhan 0:f7bdb80c0ef2 874 uint8_t g[4]; // Access bits for each of the four groups.
sheralikhan 0:f7bdb80c0ef2 875 uint8_t group; // 0-3 - active group for access bits
sheralikhan 0:f7bdb80c0ef2 876 bool firstInGroup; // True for the first block dumped in the group
sheralikhan 0:f7bdb80c0ef2 877
sheralikhan 0:f7bdb80c0ef2 878 // Determine position and size of sector.
sheralikhan 0:f7bdb80c0ef2 879 if (sector < 32) {
sheralikhan 0:f7bdb80c0ef2 880 // Sectors 0..31 has 4 blocks each
sheralikhan 0:f7bdb80c0ef2 881 no_of_blocks = 4;
sheralikhan 0:f7bdb80c0ef2 882 firstBlock = sector * no_of_blocks;
sheralikhan 0:f7bdb80c0ef2 883 } else if (sector < 40) {
sheralikhan 0:f7bdb80c0ef2 884 // Sectors 32-39 has 16 blocks each
sheralikhan 0:f7bdb80c0ef2 885 no_of_blocks = 16;
sheralikhan 0:f7bdb80c0ef2 886 firstBlock = 128 + (sector - 32) * no_of_blocks;
sheralikhan 0:f7bdb80c0ef2 887 } else {
sheralikhan 0:f7bdb80c0ef2 888 // Illegal input, no MIFARE Classic PICC has more than 40 sectors.
sheralikhan 0:f7bdb80c0ef2 889 return;
sheralikhan 0:f7bdb80c0ef2 890 }
sheralikhan 0:f7bdb80c0ef2 891
sheralikhan 0:f7bdb80c0ef2 892 // Dump blocks, highest address first.
sheralikhan 0:f7bdb80c0ef2 893 uint8_t byteCount;
sheralikhan 0:f7bdb80c0ef2 894 uint8_t buffer[18];
sheralikhan 0:f7bdb80c0ef2 895 uint8_t blockAddr;
sheralikhan 0:f7bdb80c0ef2 896 isSectorTrailer = true;
sheralikhan 0:f7bdb80c0ef2 897 for (int8_t blockOffset = no_of_blocks - 1; blockOffset >= 0; blockOffset--) {
sheralikhan 0:f7bdb80c0ef2 898 blockAddr = firstBlock + blockOffset;
sheralikhan 0:f7bdb80c0ef2 899
sheralikhan 0:f7bdb80c0ef2 900 // Sector number - only on first line
sheralikhan 0:f7bdb80c0ef2 901 if (isSectorTrailer) {
sheralikhan 0:f7bdb80c0ef2 902 printf(" %2d ", sector);
sheralikhan 0:f7bdb80c0ef2 903 } else {
sheralikhan 0:f7bdb80c0ef2 904 printf(" ");
sheralikhan 0:f7bdb80c0ef2 905 }
sheralikhan 0:f7bdb80c0ef2 906
sheralikhan 0:f7bdb80c0ef2 907 // Block number
sheralikhan 0:f7bdb80c0ef2 908 printf(" %3d ", blockAddr);
sheralikhan 0:f7bdb80c0ef2 909
sheralikhan 0:f7bdb80c0ef2 910 // Establish encrypted communications before reading the first block
sheralikhan 0:f7bdb80c0ef2 911 if (isSectorTrailer) {
sheralikhan 0:f7bdb80c0ef2 912 status = RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, firstBlock, key, uid);
sheralikhan 0:f7bdb80c0ef2 913 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 914 printf("PCD_Authenticate() failed: %s \r\n", RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 915 return;
sheralikhan 0:f7bdb80c0ef2 916 }
sheralikhan 0:f7bdb80c0ef2 917 }
sheralikhan 0:f7bdb80c0ef2 918
sheralikhan 0:f7bdb80c0ef2 919 // Read block
sheralikhan 0:f7bdb80c0ef2 920 byteCount = sizeof(buffer);
sheralikhan 0:f7bdb80c0ef2 921 status = RfChip.MIFARE_Read(blockAddr, buffer, &byteCount);
sheralikhan 0:f7bdb80c0ef2 922 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 923 printf("MIFARE_Read() failed: %s \r\n", RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 924 continue;
sheralikhan 0:f7bdb80c0ef2 925 }
sheralikhan 0:f7bdb80c0ef2 926
sheralikhan 0:f7bdb80c0ef2 927 // Dump data
sheralikhan 0:f7bdb80c0ef2 928 for (uint8_t index = 0; index < 16; index++) {
sheralikhan 0:f7bdb80c0ef2 929 printf(" %3d", buffer[index]);
sheralikhan 0:f7bdb80c0ef2 930 // if ((index % 4) == 3)
sheralikhan 0:f7bdb80c0ef2 931 // {
sheralikhan 0:f7bdb80c0ef2 932 // printf(" ");
sheralikhan 0:f7bdb80c0ef2 933 // }
sheralikhan 0:f7bdb80c0ef2 934 }
sheralikhan 0:f7bdb80c0ef2 935
sheralikhan 0:f7bdb80c0ef2 936 // Parse sector trailer data
sheralikhan 0:f7bdb80c0ef2 937 if (isSectorTrailer) {
sheralikhan 0:f7bdb80c0ef2 938 c1 = buffer[7] >> 4;
sheralikhan 0:f7bdb80c0ef2 939 c2 = buffer[8] & 0xF;
sheralikhan 0:f7bdb80c0ef2 940 c3 = buffer[8] >> 4;
sheralikhan 0:f7bdb80c0ef2 941 c1_ = buffer[6] & 0xF;
sheralikhan 0:f7bdb80c0ef2 942 c2_ = buffer[6] >> 4;
sheralikhan 0:f7bdb80c0ef2 943 c3_ = buffer[7] & 0xF;
sheralikhan 0:f7bdb80c0ef2 944 invertedError = (c1 != (~c1_ & 0xF)) || (c2 != (~c2_ & 0xF)) || (c3 != (~c3_ & 0xF));
sheralikhan 0:f7bdb80c0ef2 945
sheralikhan 0:f7bdb80c0ef2 946 g[0] = ((c1 & 1) << 2) | ((c2 & 1) << 1) | ((c3 & 1) << 0);
sheralikhan 0:f7bdb80c0ef2 947 g[1] = ((c1 & 2) << 1) | ((c2 & 2) << 0) | ((c3 & 2) >> 1);
sheralikhan 0:f7bdb80c0ef2 948 g[2] = ((c1 & 4) << 0) | ((c2 & 4) >> 1) | ((c3 & 4) >> 2);
sheralikhan 0:f7bdb80c0ef2 949 g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3);
sheralikhan 0:f7bdb80c0ef2 950 isSectorTrailer = false;
sheralikhan 0:f7bdb80c0ef2 951 }
sheralikhan 0:f7bdb80c0ef2 952
sheralikhan 0:f7bdb80c0ef2 953 // Which access group is this block in?
sheralikhan 0:f7bdb80c0ef2 954 if (no_of_blocks == 4) {
sheralikhan 0:f7bdb80c0ef2 955 group = blockOffset;
sheralikhan 0:f7bdb80c0ef2 956 firstInGroup = true;
sheralikhan 0:f7bdb80c0ef2 957 } else {
sheralikhan 0:f7bdb80c0ef2 958 group = blockOffset / 5;
sheralikhan 0:f7bdb80c0ef2 959 firstInGroup = (group == 3) || (group != (blockOffset + 1) / 5);
sheralikhan 0:f7bdb80c0ef2 960 }
sheralikhan 0:f7bdb80c0ef2 961
sheralikhan 0:f7bdb80c0ef2 962 if (firstInGroup) {
sheralikhan 0:f7bdb80c0ef2 963 // Print access bits
sheralikhan 0:f7bdb80c0ef2 964 printf(" [ %d %d %d ] ", (g[group] >> 2) & 1, (g[group] >> 1) & 1, (g[group] >> 0) & 1);
sheralikhan 0:f7bdb80c0ef2 965 if (invertedError) {
sheralikhan 0:f7bdb80c0ef2 966 printf(" Inverted access bits did not match! ");
sheralikhan 0:f7bdb80c0ef2 967 }
sheralikhan 0:f7bdb80c0ef2 968 }
sheralikhan 0:f7bdb80c0ef2 969
sheralikhan 0:f7bdb80c0ef2 970 if (group != 3 && (g[group] == 1 || g[group] == 6)) {
sheralikhan 0:f7bdb80c0ef2 971 // Not a sector trailer, a value block
sheralikhan 0:f7bdb80c0ef2 972 printf(" Addr = 0x%02X, Value = 0x%02X%02X%02X%02X", buffer[12],
sheralikhan 0:f7bdb80c0ef2 973 buffer[3],
sheralikhan 0:f7bdb80c0ef2 974 buffer[2],
sheralikhan 0:f7bdb80c0ef2 975 buffer[1],
sheralikhan 0:f7bdb80c0ef2 976 buffer[0]);
sheralikhan 0:f7bdb80c0ef2 977 }
sheralikhan 0:f7bdb80c0ef2 978
sheralikhan 0:f7bdb80c0ef2 979 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 980 }
sheralikhan 0:f7bdb80c0ef2 981
sheralikhan 0:f7bdb80c0ef2 982 return;
sheralikhan 0:f7bdb80c0ef2 983 } // End PICC_DumpMifareClassicSectorToSerial()
sheralikhan 0:f7bdb80c0ef2 984
sheralikhan 0:f7bdb80c0ef2 985 /**
sheralikhan 0:f7bdb80c0ef2 986 * Dumps memory contents of a MIFARE Ultralight PICC.
sheralikhan 0:f7bdb80c0ef2 987 */
sheralikhan 0:f7bdb80c0ef2 988 void DumpMifareUltralightToSerial(void)
sheralikhan 0:f7bdb80c0ef2 989 {
sheralikhan 0:f7bdb80c0ef2 990 uint8_t status;
sheralikhan 0:f7bdb80c0ef2 991 uint8_t byteCount;
sheralikhan 0:f7bdb80c0ef2 992 uint8_t buffer[18];
sheralikhan 0:f7bdb80c0ef2 993 uint8_t i;
sheralikhan 0:f7bdb80c0ef2 994
sheralikhan 0:f7bdb80c0ef2 995 printf("Page 0 1 2 3");
sheralikhan 0:f7bdb80c0ef2 996 // Try the mpages of the original Ultralight. Ultralight C has more pages.
sheralikhan 0:f7bdb80c0ef2 997 for (uint8_t page = 0; page < 16; page +=4) {
sheralikhan 0:f7bdb80c0ef2 998 // Read pages
sheralikhan 0:f7bdb80c0ef2 999 byteCount = sizeof(buffer);
sheralikhan 0:f7bdb80c0ef2 1000 status = RfChip.MIFARE_Read(page, buffer, &byteCount);
sheralikhan 0:f7bdb80c0ef2 1001 if (status != MFRC522::STATUS_OK) {
sheralikhan 0:f7bdb80c0ef2 1002 printf("MIFARE_Read() failed: %s \n\r", RfChip.GetStatusCodeName(status));
sheralikhan 0:f7bdb80c0ef2 1003 break;
sheralikhan 0:f7bdb80c0ef2 1004 }
sheralikhan 0:f7bdb80c0ef2 1005
sheralikhan 0:f7bdb80c0ef2 1006 // Dump data
sheralikhan 0:f7bdb80c0ef2 1007 for (uint8_t offset = 0; offset < 4; offset++) {
sheralikhan 0:f7bdb80c0ef2 1008 i = page + offset;
sheralikhan 0:f7bdb80c0ef2 1009 printf(" %2d ", i); // Pad with spaces
sheralikhan 0:f7bdb80c0ef2 1010 for (uint8_t index = 0; index < 4; index++) {
sheralikhan 0:f7bdb80c0ef2 1011 i = 4 * offset + index;
sheralikhan 0:f7bdb80c0ef2 1012 printf(" %02X ", buffer[i]);
sheralikhan 0:f7bdb80c0ef2 1013 }
sheralikhan 0:f7bdb80c0ef2 1014
sheralikhan 0:f7bdb80c0ef2 1015 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 1016 }
sheralikhan 0:f7bdb80c0ef2 1017 }
sheralikhan 0:f7bdb80c0ef2 1018 } // End PICC_DumpMifareUltralightToSerial()
sheralikhan 0:f7bdb80c0ef2 1019
sheralikhan 0:f7bdb80c0ef2 1020 int main()
sheralikhan 0:f7bdb80c0ef2 1021 {
sheralikhan 0:f7bdb80c0ef2 1022 /* Set debug UART speed */
sheralikhan 0:f7bdb80c0ef2 1023 printf("\n\rUART 9600 baud\n\r");
sheralikhan 0:f7bdb80c0ef2 1024 pc.baud(9600);
sheralikhan 0:f7bdb80c0ef2 1025 printf("\n\r%s %s\n\r",VERSION,CIBLE);
sheralikhan 0:f7bdb80c0ef2 1026
sheralikhan 0:f7bdb80c0ef2 1027 /* Init. RC522 Chip */
sheralikhan 0:f7bdb80c0ef2 1028 RfChip.PCD_Init();
sheralikhan 0:f7bdb80c0ef2 1029
sheralikhan 0:f7bdb80c0ef2 1030 /* Read RC522 version */
sheralikhan 0:f7bdb80c0ef2 1031 uint8_t temp = RfChip.PCD_ReadRegister(MFRC522::VersionReg);
sheralikhan 0:f7bdb80c0ef2 1032 printf("MFRC522 version: %d\n\r", temp & 0x07);
sheralikhan 0:f7bdb80c0ef2 1033 printf("\n\r");
sheralikhan 0:f7bdb80c0ef2 1034
sheralikhan 1:0cc7ec8623d2 1035 while(true) {
sheralikhan 1:0cc7ec8623d2 1036
sheralikhan 0:f7bdb80c0ef2 1037 LedGreen = 1;
sheralikhan 0:f7bdb80c0ef2 1038
sheralikhan 0:f7bdb80c0ef2 1039 // Look for new cards
sheralikhan 0:f7bdb80c0ef2 1040 if ( ! RfChip.PICC_IsNewCardPresent()) {
sheralikhan 0:f7bdb80c0ef2 1041 wait_ms(500);
sheralikhan 0:f7bdb80c0ef2 1042 continue;
sheralikhan 0:f7bdb80c0ef2 1043 }
sheralikhan 0:f7bdb80c0ef2 1044
sheralikhan 0:f7bdb80c0ef2 1045 LedRed = 0;
sheralikhan 0:f7bdb80c0ef2 1046
sheralikhan 0:f7bdb80c0ef2 1047 // Select one of the cards
sheralikhan 0:f7bdb80c0ef2 1048 if ( ! RfChip.PICC_ReadCardSerial()) {
sheralikhan 0:f7bdb80c0ef2 1049 wait_ms(500);
sheralikhan 0:f7bdb80c0ef2 1050 continue;
sheralikhan 0:f7bdb80c0ef2 1051 }
sheralikhan 0:f7bdb80c0ef2 1052
sheralikhan 0:f7bdb80c0ef2 1053 LedGreen = 0;
sheralikhan 0:f7bdb80c0ef2 1054
sheralikhan 1:0cc7ec8623d2 1055 //Calling WriteToRfidTag()
sheralikhan 0:f7bdb80c0ef2 1056 WriteToRfidTag(&(RfChip.uid));
sheralikhan 0:f7bdb80c0ef2 1057 wait_ms(200);
sheralikhan 0:f7bdb80c0ef2 1058
sheralikhan 0:f7bdb80c0ef2 1059 }
sheralikhan 0:f7bdb80c0ef2 1060 }