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