This program is for reading and writing from /to MIFARE Classic 1k ,MIFARE Ultralight MF0ICU1,MIFARE Ultralight NTAG213,MIFARE Ultralight NTAG203

Dependencies:   mbed

Committer:
sheralikhan
Date:
Thu May 25 07:16:28 2017 +0000
Revision:
2:e27413743e1b
Parent:
1:27fb38198323
Child:
3:f9ed412458d5
MFRC522 read and write function

Who changed what in which revision?

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