77 #include <user_config.h> 78 #include <SmingCore.h> 87 const byte MFRC522_firmware_referenceV0_0[] PROGMEM = {
88 0x00, 0x87, 0x98, 0x0f, 0x49, 0xFF, 0x07, 0x19,
89 0xBF, 0x22, 0x30, 0x49, 0x59, 0x63, 0xAD, 0xCA,
90 0x7F, 0xE3, 0x4E, 0x03, 0x5C, 0x4E, 0x49, 0x50,
91 0x47, 0x9A, 0x37, 0x61, 0xE7, 0xE2, 0xC6, 0x2E,
92 0x75, 0x5A, 0xED, 0x04, 0x3D, 0x02, 0x4B, 0x78,
93 0x32, 0xFF, 0x58, 0x3B, 0x7C, 0xE9, 0x00, 0x94,
94 0xB4, 0x4A, 0x59, 0x5B, 0xFD, 0xC9, 0x29, 0xDF,
95 0x35, 0x96, 0x98, 0x9E, 0x4F, 0x30, 0x32, 0x8D
99 const byte MFRC522_firmware_referenceV1_0[] PROGMEM = {
100 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C,
101 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73,
102 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A,
103 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E,
104 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC,
105 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41,
106 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02,
107 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79
111 const byte MFRC522_firmware_referenceV2_0[] PROGMEM = {
112 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95,
113 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE,
114 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82,
115 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49,
116 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81,
117 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9,
118 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D,
119 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F
123 const byte FM17522_firmware_reference[] PROGMEM = {
124 0x00, 0xD6, 0x78, 0x8C, 0xE2, 0xAA, 0x0C, 0x18,
125 0x2A, 0xB8, 0x7A, 0x7F, 0xD3, 0x6A, 0xCF, 0x0B,
126 0xB1, 0x37, 0x63, 0x4B, 0x69, 0xAE, 0x91, 0xC7,
127 0xC3, 0x97, 0xAE, 0x77, 0xF4, 0x37, 0xD7, 0x9B,
128 0x7C, 0xF5, 0x3C, 0x11, 0x8F, 0x15, 0xC3, 0xD7,
129 0xC1, 0x5B, 0x00, 0x2A, 0xD0, 0x75, 0xDE, 0x9E,
130 0x51, 0x64, 0xAB, 0x3E, 0xE9, 0x15, 0xB5, 0xAB,
131 0x56, 0x9A, 0x98, 0x82, 0x26, 0xEA, 0x2A, 0x62
141 CommandReg = 0x01 << 1,
142 ComIEnReg = 0x02 << 1,
143 DivIEnReg = 0x03 << 1,
144 ComIrqReg = 0x04 << 1,
145 DivIrqReg = 0x05 << 1,
146 ErrorReg = 0x06 << 1,
147 Status1Reg = 0x07 << 1,
148 Status2Reg = 0x08 << 1,
149 FIFODataReg = 0x09 << 1,
150 FIFOLevelReg = 0x0A << 1,
151 WaterLevelReg = 0x0B << 1,
152 ControlReg = 0x0C << 1,
153 BitFramingReg = 0x0D << 1,
160 TxModeReg = 0x12 << 1,
161 RxModeReg = 0x13 << 1,
162 TxControlReg = 0x14 << 1,
163 TxASKReg = 0x15 << 1,
164 TxSelReg = 0x16 << 1,
165 RxSelReg = 0x17 << 1,
166 RxThresholdReg = 0x18 << 1,
167 DemodReg = 0x19 << 1,
173 SerialSpeedReg = 0x1F << 1,
177 CRCResultRegH = 0x21 << 1,
178 CRCResultRegL = 0x22 << 1,
180 ModWidthReg = 0x24 << 1,
182 RFCfgReg = 0x26 << 1,
184 CWGsPReg = 0x28 << 1,
185 ModGsPReg = 0x29 << 1,
186 TModeReg = 0x2A << 1,
187 TPrescalerReg = 0x2B << 1,
188 TReloadRegH = 0x2C << 1,
189 TReloadRegL = 0x2D << 1,
190 TCounterValueRegH = 0x2E << 1,
191 TCounterValueRegL = 0x2F << 1,
195 TestSel1Reg = 0x31 << 1,
196 TestSel2Reg = 0x32 << 1,
197 TestPinEnReg = 0x33 << 1,
198 TestPinValueReg = 0x34 << 1,
199 TestBusReg = 0x35 << 1,
200 AutoTestReg = 0x36 << 1,
201 VersionReg = 0x37 << 1,
202 AnalogTestReg = 0x38 << 1,
203 TestDAC1Reg = 0x39 << 1,
204 TestDAC2Reg = 0x3A << 1,
205 TestADCReg = 0x3B << 1
216 PCD_GenerateRandomID = 0x02,
219 PCD_NoCmdChange = 0x07,
221 PCD_Transceive = 0x0C,
222 PCD_MFAuthent = 0x0E,
229 RxGain_18dB = 0x00 << 4,
230 RxGain_23dB = 0x01 << 4,
231 RxGain_18dB_2 = 0x02 << 4,
232 RxGain_23dB_2 = 0x03 << 4,
233 RxGain_33dB = 0x04 << 4,
234 RxGain_38dB = 0x05 << 4,
235 RxGain_43dB = 0x06 << 4,
236 RxGain_48dB = 0x07 << 4,
237 RxGain_min = 0x00 << 4,
238 RxGain_avg = 0x04 << 4,
239 RxGain_max = 0x07 << 4
245 PICC_CMD_REQA = 0x26,
246 PICC_CMD_WUPA = 0x52,
248 PICC_CMD_SEL_CL1 = 0x93,
249 PICC_CMD_SEL_CL2 = 0x95,
250 PICC_CMD_SEL_CL3 = 0x97,
251 PICC_CMD_HLTA = 0x50,
255 PICC_CMD_MF_AUTH_KEY_A = 0x60,
256 PICC_CMD_MF_AUTH_KEY_B = 0x61,
257 PICC_CMD_MF_READ = 0x30,
258 PICC_CMD_MF_WRITE = 0xA0,
259 PICC_CMD_MF_DECREMENT = 0xC0,
260 PICC_CMD_MF_INCREMENT = 0xC1,
261 PICC_CMD_MF_RESTORE = 0xC2,
262 PICC_CMD_MF_TRANSFER = 0xB0,
265 PICC_CMD_UL_WRITE = 0xA2
276 PICC_TYPE_UNKNOWN = 0,
277 PICC_TYPE_ISO_14443_4 = 1,
278 PICC_TYPE_ISO_18092 = 2,
279 PICC_TYPE_MIFARE_MINI = 3,
280 PICC_TYPE_MIFARE_1K = 4,
281 PICC_TYPE_MIFARE_4K = 5,
282 PICC_TYPE_MIFARE_UL = 6,
283 PICC_TYPE_MIFARE_PLUS = 7,
284 PICC_TYPE_TNP3XXX = 8,
285 PICC_TYPE_NOT_COMPLETE = 255
292 STATUS_COLLISION = 3,
295 STATUS_INTERNAL_ERROR = 6,
297 STATUS_CRC_WRONG = 8,
298 STATUS_MIFARE_NACK = 9
310 byte keyByte[MF_KEY_SIZE];
317 static const byte FIFO_SIZE = 64;
322 MFRC522(byte chipSelectPin, byte resetPowerDownPin);
328 void PCD_WriteRegister(byte reg, byte value);
329 void PCD_WriteRegister(byte reg, byte count, byte *values);
330 byte PCD_ReadRegister(byte reg);
331 void PCD_ReadRegister(byte reg, byte count, byte *values, byte rxAlign = 0);
332 void setBitMask(
unsigned char reg,
unsigned char mask);
333 void PCD_SetRegisterBitMask(byte reg, byte mask);
334 void PCD_ClearRegisterBitMask(byte reg, byte mask);
335 byte PCD_CalculateCRC(byte *data, byte length, byte *result);
341 void ICACHE_FLASH_ATTR setControlPins(byte csPin,byte pdPin);
343 void PCD_AntennaOn();
344 void PCD_AntennaOff();
345 byte PCD_GetAntennaGain();
346 void PCD_SetAntennaGain(byte mask);
347 bool PCD_PerformSelfTest();
352 byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0,
bool checkCRC =
false);
353 byte PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0,
bool checkCRC =
false);
354 byte PICC_RequestA(byte *bufferATQA, byte *bufferSize);
355 byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize);
356 byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize);
357 byte PICC_Select(
Uid *uid, byte validBits = 0);
363 byte PCD_Authenticate(byte command, byte blockAddr,
MIFARE_Key *key,
Uid *uid);
364 void PCD_StopCrypto1();
365 byte MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize);
366 byte MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize);
367 byte MIFARE_Decrement(byte blockAddr,
long delta);
368 byte MIFARE_Increment(byte blockAddr,
long delta);
369 byte MIFARE_Restore(byte blockAddr);
370 byte MIFARE_Transfer(byte blockAddr);
371 byte MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize);
372 byte MIFARE_GetValue(byte blockAddr,
long *value);
373 byte MIFARE_SetValue(byte blockAddr,
long value);
378 byte PCD_MIFARE_Transceive(byte *sendData, byte sendLen,
bool acceptTimeout =
false);
380 const char *GetStatusCodeName(byte code);
382 byte PICC_GetType(byte sak);
384 const char *PICC_GetTypeName(byte type);
386 void PICC_DumpToSerial(
Uid *uid);
387 void PICC_DumpMifareClassicToSerial(
Uid *uid, byte piccType,
MIFARE_Key *key);
388 void PICC_DumpMifareClassicSectorToSerial(
Uid *uid,
MIFARE_Key *key, byte sector);
389 void PICC_DumpMifareUltralightToSerial();
390 void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3);
391 bool MIFARE_OpenUidBackdoor(
bool logErrors);
392 bool MIFARE_SetUid(byte *newUid, byte uidSize,
bool logErrors);
393 bool MIFARE_UnbrickUidSector(
bool logErrors);
398 bool PICC_IsNewCardPresent();
399 bool PICC_ReadCardSerial();
403 byte _resetPowerDownPin;
404 byte MIFARE_TwoStepHelper(byte command, byte blockAddr,
long data);
Definition: MFRC522.h:302
Definition: MFRC522.h:309
Definition: MFRC522.h:134