My Project
 All Classes Functions Variables Pages
MFRC522.h
1 
75 #ifndef MFRC522_h
76 #define MFRC522_h
77 
78 
79 #include <stdint.h>
80 #include <SPI.h>
81 
82 typedef uint8_t byte;
83 
84 // Firmware data for self-test
85 // Reference values based on firmware version
86 // Hint: if needed, you can remove unused self-test data to save flash memory
87 //
88 // Version 0.0 (0x90)
89 // Philips Semiconductors; Preliminary Specification Revision 2.0 - 01 August 2005; 16.1 self-test
90 const byte MFRC522_firmware_referenceV0_0[] = {
91  0x00, 0x87, 0x98, 0x0f, 0x49, 0xFF, 0x07, 0x19,
92  0xBF, 0x22, 0x30, 0x49, 0x59, 0x63, 0xAD, 0xCA,
93  0x7F, 0xE3, 0x4E, 0x03, 0x5C, 0x4E, 0x49, 0x50,
94  0x47, 0x9A, 0x37, 0x61, 0xE7, 0xE2, 0xC6, 0x2E,
95  0x75, 0x5A, 0xED, 0x04, 0x3D, 0x02, 0x4B, 0x78,
96  0x32, 0xFF, 0x58, 0x3B, 0x7C, 0xE9, 0x00, 0x94,
97  0xB4, 0x4A, 0x59, 0x5B, 0xFD, 0xC9, 0x29, 0xDF,
98  0x35, 0x96, 0x98, 0x9E, 0x4F, 0x30, 0x32, 0x8D
99 };
100 // Version 1.0 (0x91)
101 // NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test
102 const byte MFRC522_firmware_referenceV1_0[] = {
103  0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C,
104  0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73,
105  0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A,
106  0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E,
107  0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC,
108  0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41,
109  0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02,
110  0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79
111 };
112 // Version 2.0 (0x92)
113 // NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test
114 const byte MFRC522_firmware_referenceV2_0[] = {
115  0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95,
116  0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE,
117  0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82,
118  0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49,
119  0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81,
120  0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9,
121  0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D,
122  0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F
123 };
124 // Clone
125 // Fudan Semiconductor FM17522 (0x88)
126 const byte FM17522_firmware_reference[] = {
127  0x00, 0xD6, 0x78, 0x8C, 0xE2, 0xAA, 0x0C, 0x18,
128  0x2A, 0xB8, 0x7A, 0x7F, 0xD3, 0x6A, 0xCF, 0x0B,
129  0xB1, 0x37, 0x63, 0x4B, 0x69, 0xAE, 0x91, 0xC7,
130  0xC3, 0x97, 0xAE, 0x77, 0xF4, 0x37, 0xD7, 0x9B,
131  0x7C, 0xF5, 0x3C, 0x11, 0x8F, 0x15, 0xC3, 0xD7,
132  0xC1, 0x5B, 0x00, 0x2A, 0xD0, 0x75, 0xDE, 0x9E,
133  0x51, 0x64, 0xAB, 0x3E, 0xE9, 0x15, 0xB5, 0xAB,
134  0x56, 0x9A, 0x98, 0x82, 0x26, 0xEA, 0x2A, 0x62
135 };
136 
137 class MFRC522 {
138 public:
139  // Size of the MFRC522 FIFO
140  static constexpr byte FIFO_SIZE = 64; // The FIFO is 64 bytes.
141  // Default value for unused pin
142  static constexpr uint8_t UNUSED_PIN = UINT8_MAX;
143 
144  // MFRC522 registers. Described in chapter 9 of the datasheet.
145  // When using SPI all addresses are shifted one bit left in the "SPI address byte" (section 8.1.2.3)
146  enum PCD_Register : byte {
147  // Page 0: Command and status
148  // 0x00 // reserved for future use
149  CommandReg = 0x01 << 1, // starts and stops command execution
150  ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits
151  DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits
152  ComIrqReg = 0x04 << 1, // interrupt request bits
153  DivIrqReg = 0x05 << 1, // interrupt request bits
154  ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed
155  Status1Reg = 0x07 << 1, // communication status bits
156  Status2Reg = 0x08 << 1, // receiver and transmitter status bits
157  FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer
158  FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer
159  WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning
160  ControlReg = 0x0C << 1, // miscellaneous control registers
161  BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames
162  CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface
163  // 0x0F // reserved for future use
164 
165  // Page 1: Command
166  // 0x10 // reserved for future use
167  ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving
168  TxModeReg = 0x12 << 1, // defines transmission data rate and framing
169  RxModeReg = 0x13 << 1, // defines reception data rate and framing
170  TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2
171  TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation
172  TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver
173  RxSelReg = 0x17 << 1, // selects internal receiver settings
174  RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder
175  DemodReg = 0x19 << 1, // defines demodulator settings
176  // 0x1A // reserved for future use
177  // 0x1B // reserved for future use
178  MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters
179  MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters
180  // 0x1E // reserved for future use
181  SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface
182 
183  // Page 2: Configuration
184  // 0x20 // reserved for future use
185  CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation
186  CRCResultRegL = 0x22 << 1,
187  // 0x23 // reserved for future use
188  ModWidthReg = 0x24 << 1, // controls the ModWidth setting?
189  // 0x25 // reserved for future use
190  RFCfgReg = 0x26 << 1, // configures the receiver gain
191  GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation
192  CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation
193  ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation
194  TModeReg = 0x2A << 1, // defines settings for the internal timer
195  TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg.
196  TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value
197  TReloadRegL = 0x2D << 1,
198  TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value
199  TCounterValueRegL = 0x2F << 1,
200 
201  // Page 3: Test Registers
202  // 0x30 // reserved for future use
203  TestSel1Reg = 0x31 << 1, // general test signal configuration
204  TestSel2Reg = 0x32 << 1, // general test signal configuration
205  TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7
206  TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus
207  TestBusReg = 0x35 << 1, // shows the status of the internal test bus
208  AutoTestReg = 0x36 << 1, // controls the digital self-test
209  VersionReg = 0x37 << 1, // shows the software version
210  AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2
211  TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1
212  TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2
213  TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels
214  // 0x3C // reserved for production tests
215  // 0x3D // reserved for production tests
216  // 0x3E // reserved for production tests
217  // 0x3F // reserved for production tests
218  };
219 
220  // MFRC522 commands. Described in chapter 10 of the datasheet.
221  enum PCD_Command : byte {
222  PCD_Idle = 0x00, // no action, cancels current command execution
223  PCD_Mem = 0x01, // stores 25 bytes into the internal buffer
224  PCD_GenerateRandomID = 0x02, // generates a 10-byte random ID number
225  PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self-test
226  PCD_Transmit = 0x04, // transmits data from the FIFO buffer
227  PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit
228  PCD_Receive = 0x08, // activates the receiver circuits
229  PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission
230  PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader
231  PCD_SoftReset = 0x0F // resets the MFRC522
232  };
233 
234  // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD).
235  // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf
236  enum PCD_RxGain : byte {
237  RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum
238  RxGain_23dB = 0x01 << 4, // 001b - 23 dB
239  RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b
240  RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b
241  RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default
242  RxGain_38dB = 0x05 << 4, // 101b - 38 dB
243  RxGain_43dB = 0x06 << 4, // 110b - 43 dB
244  RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum
245  RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB
246  RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB
247  RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB
248  };
249 
250  // Commands sent to the PICC.
251  enum PICC_Command : byte {
252  // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4)
253  PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame.
254  PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame.
255  PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision.
256  PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1
257  PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2
258  PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3
259  PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT.
260  // The commands used for MIFARE Classic (from http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf, Section 9)
261  // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector.
262  // The read/write commands can also be used for MIFARE Ultralight.
263  PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A
264  PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B
265  PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight.
266  PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight.
267  PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register.
268  PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register.
269  PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register.
270  PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block.
271  // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6)
272  // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight.
273  PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC.
274  };
275 
276  // MIFARE constants that does not fit anywhere else
277  enum MIFARE_Misc {
278  MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK.
279  MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes.
280  };
281 
282  // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more.
283  // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered
284  enum PICC_Type : byte {
285  PICC_TYPE_UNKNOWN ,
286  PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4
287  PICC_TYPE_ISO_18092 , // PICC compliant with ISO/IEC 18092 (NFC)
288  PICC_TYPE_MIFARE_MINI , // MIFARE Classic protocol, 320 bytes
289  PICC_TYPE_MIFARE_1K , // MIFARE Classic protocol, 1KB
290  PICC_TYPE_MIFARE_4K , // MIFARE Classic protocol, 4KB
291  PICC_TYPE_MIFARE_UL , // MIFARE Ultralight or Ultralight C
292  PICC_TYPE_MIFARE_PLUS , // MIFARE Plus
293  PICC_TYPE_MIFARE_DESFIRE, // MIFARE DESFire
294  PICC_TYPE_TNP3XXX , // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure
295  PICC_TYPE_NOT_COMPLETE = 0xff // SAK indicates UID is not complete.
296  };
297 
298  // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more.
299  // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered
300  enum StatusCode : byte {
301  STATUS_OK , // Success
302  STATUS_ERROR , // Error in communication
303  STATUS_COLLISION , // Collission detected
304  STATUS_TIMEOUT , // Timeout in communication.
305  STATUS_NO_ROOM , // A buffer is not big enough.
306  STATUS_INTERNAL_ERROR , // Internal error in the code. Should not happen ;-)
307  STATUS_INVALID , // Invalid argument.
308  STATUS_CRC_WRONG , // The CRC_A does not match
309  STATUS_MIFARE_NACK = 0xff // A MIFARE PICC responded with NAK.
310  };
311 
312  // A struct used for passing the UID of a PICC.
313  typedef struct {
314  byte size; // Number of bytes in the UID. 4, 7 or 10.
315  byte uidByte[10];
316  byte sak; // The SAK (Select acknowledge) byte returned from the PICC after successful selection.
317  } Uid;
318 
319  // A struct used for passing a MIFARE Crypto1 key
320  typedef struct {
321  byte keyByte[MF_KEY_SIZE];
322  } MIFARE_Key;
323 
324  // Member variables
325  Uid uid; // Used by PICC_ReadCardSerial().
326 
328  // Functions for setting up the Arduino
330 
331  //MFRC522();
332 
334  // Basic interface functions for communicating with the MFRC522
336 
337  void PCD_WriteRegister(PCD_Register reg, byte value);
338  void PCD_WriteRegister(PCD_Register reg, byte count, byte* values);
339  byte PCD_ReadRegister(PCD_Register reg);
340  void PCD_ReadRegister(PCD_Register reg, byte count, byte* values, byte rxAlign = 0);
341  void PCD_SetRegisterBitMask(PCD_Register reg, byte mask);
342  void PCD_ClearRegisterBitMask(PCD_Register reg, byte mask);
343  StatusCode PCD_CalculateCRC(byte* data, byte length, byte* result);
344 
346  // Functions for manipulating the MFRC522
348  void PCD_Init();
349  void PCD_Init(byte chipSelectPin, byte resetPowerDownPin);
350  void PCD_Reset();
351  void PCD_AntennaOn();
352  void PCD_AntennaOff();
353  byte PCD_GetAntennaGain();
354  void PCD_SetAntennaGain(byte mask);
355  bool PCD_PerformSelfTest();
356 
358  // Functions for communicating with PICCs
360  StatusCode PCD_TransceiveData(byte* sendData, byte sendLen, byte* backData, byte* backLen, byte* validBits = nullptr, byte rxAlign = 0, bool checkCRC = false);
361  StatusCode PCD_CommunicateWithPICC(byte command, byte waitIRq, byte* sendData, byte sendLen, byte* backData = nullptr, byte* backLen = nullptr, byte* validBits = nullptr, byte rxAlign = 0, bool checkCRC = false);
362  StatusCode PICC_RequestA(byte* bufferATQA, byte* bufferSize);
363  StatusCode PICC_WakeupA(byte* bufferATQA, byte* bufferSize);
364  StatusCode PICC_REQA_or_WUPA(byte command, byte* bufferATQA, byte* bufferSize);
365  virtual StatusCode PICC_Select(Uid* uid, byte validBits = 0);
366  StatusCode PICC_HaltA();
367 
369  // Functions for communicating with MIFARE PICCs
371  StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key* key, Uid* uid);
372  void PCD_StopCrypto1();
373  StatusCode MIFARE_Read(byte blockAddr, byte* buffer, byte* bufferSize);
374  StatusCode MIFARE_Write(byte blockAddr, byte* buffer, byte bufferSize);
375  StatusCode MIFARE_Ultralight_Write(byte page, byte* buffer, byte bufferSize);
376  StatusCode MIFARE_Decrement(byte blockAddr, int32_t delta);
377  StatusCode MIFARE_Increment(byte blockAddr, int32_t delta);
378  StatusCode MIFARE_Restore(byte blockAddr);
379  StatusCode MIFARE_Transfer(byte blockAddr);
380  StatusCode MIFARE_GetValue(byte blockAddr, int32_t* value);
381  StatusCode MIFARE_SetValue(byte blockAddr, int32_t value);
382  StatusCode PCD_NTAG216_AUTH(byte* passWord, byte pACK[]);
383 
385  // Support functions
387  StatusCode PCD_MIFARE_Transceive(byte* sendData, byte sendLen, bool acceptTimeout = false);
388  static PICC_Type PICC_GetType(byte sak);
389 
390  // Support functions for debuging
392  void PICC_DumpToSerial(Uid* uid);
393  void PICC_DumpDetailsToSerial(Uid* uid);
394  void PICC_DumpMifareClassicToSerial(Uid* uid, PICC_Type piccType, MIFARE_Key* key);
395  void PICC_DumpMifareClassicSectorToSerial(Uid* uid, MIFARE_Key* key, byte sector);
397 
398  // Advanced functions for MIFARE
399  void MIFARE_SetAccessBits(byte* accessBitBuffer, byte g0, byte g1, byte g2, byte g3);
400 
402  // Convenience functions - does not add extra functionality
404  virtual bool PICC_IsNewCardPresent();
405  virtual bool PICC_ReadCardSerial();
406 
407 protected:
408  // Pins
409  byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low)
410  byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low)
411 
412 
413  // Functions for communicating with MIFARE PICCs
414  StatusCode MIFARE_TwoStepHelper(byte command, byte blockAddr, int32_t data);
415  SPI m_spi;
416 };
417 
418 #endif
StatusCode MIFARE_Transfer(byte blockAddr)
Definition: MFRC522.cpp:1039
void PCD_WriteRegister(PCD_Register reg, byte value)
Definition: MFRC522.cpp:47
StatusCode MIFARE_Decrement(byte blockAddr, int32_t delta)
Definition: MFRC522.cpp:969
StatusCode PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData=nullptr, byte *backLen=nullptr, byte *validBits=nullptr, byte rxAlign=0, bool checkCRC=false)
Definition: MFRC522.cpp:443
bool PCD_PerformSelfTest()
Definition: MFRC522.cpp:330
StatusCode PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout=false)
Definition: MFRC522.cpp:1167
virtual bool PICC_IsNewCardPresent()
Definition: MFRC522.cpp:1582
Handle SPI protocol.
Definition: SPI.h:15
StatusCode MIFARE_TwoStepHelper(byte command, byte blockAddr, int32_t data)
Definition: MFRC522.cpp:1013
void PCD_SetRegisterBitMask(PCD_Register reg, byte mask)
Definition: MFRC522.cpp:138
Definition: MFRC522.h:313
virtual StatusCode PICC_Select(Uid *uid, byte validBits=0)
Definition: MFRC522.cpp:586
void PCD_ClearRegisterBitMask(PCD_Register reg, byte mask)
Definition: MFRC522.cpp:150
void PCD_StopCrypto1()
Definition: MFRC522.cpp:854
void PCD_Init()
Definition: MFRC522.cpp:197
void PICC_DumpDetailsToSerial(Uid *uid)
Definition: MFRC522.cpp:1304
void PICC_DumpMifareClassicToSerial(Uid *uid, PICC_Type piccType, MIFARE_Key *key)
Definition: MFRC522.cpp:1336
void PCD_Reset()
Definition: MFRC522.cpp:266
void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3)
Definition: MFRC522.cpp:1561
void PCD_AntennaOff()
Definition: MFRC522.cpp:294
StatusCode PICC_WakeupA(byte *bufferATQA, byte *bufferSize)
Definition: MFRC522.cpp:540
Definition: MFRC522.h:320
StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize)
Definition: MFRC522.cpp:910
StatusCode PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize)
Definition: MFRC522.cpp:554
StatusCode PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits=nullptr, byte rxAlign=0, bool checkCRC=false)
Definition: MFRC522.cpp:422
void PCD_SetAntennaGain(byte mask)
Definition: MFRC522.cpp:316
StatusCode PCD_CalculateCRC(byte *data, byte length, byte *result)
Definition: MFRC522.cpp:164
StatusCode MIFARE_Restore(byte blockAddr)
Definition: MFRC522.cpp:998
StatusCode MIFARE_Increment(byte blockAddr, int32_t delta)
Definition: MFRC522.cpp:984
StatusCode MIFARE_SetValue(byte blockAddr, int32_t value)
Definition: MFRC522.cpp:1089
void PICC_DumpMifareUltralightToSerial()
Definition: MFRC522.cpp:1517
StatusCode MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize)
Definition: MFRC522.cpp:939
void PCD_AntennaOn()
Definition: MFRC522.cpp:283
byte PCD_GetAntennaGain()
Definition: MFRC522.cpp:306
void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector)
Definition: MFRC522.cpp:1376
StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize)
Definition: MFRC522.cpp:879
Definition: MFRC522.h:137
static PICC_Type PICC_GetType(byte sak)
Definition: MFRC522.cpp:1200
StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid)
Definition: MFRC522.cpp:827
void PCD_DumpVersionToSerial()
Definition: MFRC522.cpp:1226
StatusCode PCD_NTAG216_AUTH(byte *passWord, byte pACK[])
Definition: MFRC522.cpp:1120
void PICC_DumpToSerial(Uid *uid)
Definition: MFRC522.cpp:1257
byte PCD_ReadRegister(PCD_Register reg)
Definition: MFRC522.cpp:84
StatusCode PICC_RequestA(byte *bufferATQA, byte *bufferSize)
Definition: MFRC522.cpp:527
StatusCode MIFARE_GetValue(byte blockAddr, int32_t *value)
Definition: MFRC522.cpp:1063
virtual bool PICC_ReadCardSerial()
Definition: MFRC522.cpp:1605
StatusCode PICC_HaltA()
Definition: MFRC522.cpp:782