Merge pull request #95 from Rotzbua/master
Style improved, keywords updated
This commit is contained in:
46
MFRC522.cpp
46
MFRC522.cpp
@@ -100,7 +100,7 @@ void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One o
|
|||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Serial.print("Reading "); Serial.print(count); Serial.println(" bytes from register.");
|
//Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register."));
|
||||||
byte address = 0x80 | (reg & 0x7E); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
|
byte address = 0x80 | (reg & 0x7E); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||||
byte index = 0; // Index in values array.
|
byte index = 0; // Index in values array.
|
||||||
digitalWrite(_chipSelectPin, LOW); // Select slave
|
digitalWrite(_chipSelectPin, LOW); // Select slave
|
||||||
@@ -280,7 +280,6 @@ void MFRC522::PCD_SetAntennaGain(byte mask) {
|
|||||||
*/
|
*/
|
||||||
bool MFRC522::PCD_PerformSelfTest() {
|
bool MFRC522::PCD_PerformSelfTest() {
|
||||||
// This follows directly the steps outlined in 16.1.1
|
// This follows directly the steps outlined in 16.1.1
|
||||||
|
|
||||||
// 1. Perform a soft reset.
|
// 1. Perform a soft reset.
|
||||||
PCD_Reset();
|
PCD_Reset();
|
||||||
|
|
||||||
@@ -315,7 +314,6 @@ bool MFRC522::PCD_PerformSelfTest() {
|
|||||||
PCD_ReadRegister(FIFODataReg, 64, result, 0);
|
PCD_ReadRegister(FIFODataReg, 64, result, 0);
|
||||||
|
|
||||||
// Auto self-test done
|
// Auto self-test done
|
||||||
|
|
||||||
// Reset AutoTestReg register to be 0 again. Required for normal operation.
|
// Reset AutoTestReg register to be 0 again. Required for normal operation.
|
||||||
PCD_WriteRegister(AutoTestReg, 0x00);
|
PCD_WriteRegister(AutoTestReg, 0x00);
|
||||||
|
|
||||||
@@ -643,7 +641,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp
|
|||||||
while (!selectDone) {
|
while (!selectDone) {
|
||||||
// Find out how many bits and bytes to send and receive.
|
// Find out how many bits and bytes to send and receive.
|
||||||
if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT.
|
if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT.
|
||||||
//Serial.print("SELECT: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC);
|
//Serial.print(F("SELECT: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC);
|
||||||
buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes
|
buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes
|
||||||
// Calculate BCC - Block Check Character
|
// Calculate BCC - Block Check Character
|
||||||
buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5];
|
buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5];
|
||||||
@@ -659,7 +657,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp
|
|||||||
responseLength = 3;
|
responseLength = 3;
|
||||||
}
|
}
|
||||||
else { // This is an ANTICOLLISION.
|
else { // This is an ANTICOLLISION.
|
||||||
//Serial.print("ANTICOLLISION: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC);
|
//Serial.print(F("ANTICOLLISION: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC);
|
||||||
txLastBits = currentLevelKnownBits % 8;
|
txLastBits = currentLevelKnownBits % 8;
|
||||||
count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part.
|
count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part.
|
||||||
index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs
|
index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs
|
||||||
@@ -1226,7 +1224,10 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro
|
|||||||
// UID
|
// UID
|
||||||
Serial.print(F("Card UID:"));
|
Serial.print(F("Card UID:"));
|
||||||
for (byte i = 0; i < uid->size; i++) {
|
for (byte i = 0; i < uid->size; i++) {
|
||||||
Serial.print(uid->uidByte[i] < 0x10 ? " 0" : " ");
|
if(uid->uidByte[i] < 0x10)
|
||||||
|
Serial.print(F(" 0"));
|
||||||
|
else
|
||||||
|
Serial.print(F(" "));
|
||||||
Serial.print(uid->uidByte[i], HEX);
|
Serial.print(uid->uidByte[i], HEX);
|
||||||
}
|
}
|
||||||
Serial.println();
|
Serial.println();
|
||||||
@@ -1360,7 +1361,10 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
|
|||||||
blockAddr = firstBlock + blockOffset;
|
blockAddr = firstBlock + blockOffset;
|
||||||
// Sector number - only on first line
|
// Sector number - only on first line
|
||||||
if (isSectorTrailer) {
|
if (isSectorTrailer) {
|
||||||
Serial.print(sector < 10 ? " " : " "); // Pad with spaces
|
if(sector < 10)
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
|
else
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
Serial.print(sector);
|
Serial.print(sector);
|
||||||
Serial.print(F(" "));
|
Serial.print(F(" "));
|
||||||
}
|
}
|
||||||
@@ -1368,7 +1372,14 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
|
|||||||
Serial.print(F(" "));
|
Serial.print(F(" "));
|
||||||
}
|
}
|
||||||
// Block number
|
// Block number
|
||||||
Serial.print(blockAddr < 10 ? " " : (blockAddr < 100 ? " " : " ")); // Pad with spaces
|
if(blockAddr < 10)
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
|
else {
|
||||||
|
if(blockAddr < 100)
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
|
else
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
|
}
|
||||||
Serial.print(blockAddr);
|
Serial.print(blockAddr);
|
||||||
Serial.print(F(" "));
|
Serial.print(F(" "));
|
||||||
// Establish encrypted communications before reading the first block
|
// Establish encrypted communications before reading the first block
|
||||||
@@ -1390,7 +1401,10 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
|
|||||||
}
|
}
|
||||||
// Dump data
|
// Dump data
|
||||||
for (byte index = 0; index < 16; index++) {
|
for (byte index = 0; index < 16; index++) {
|
||||||
Serial.print(buffer[index] < 0x10 ? " 0" : " ");
|
if(buffer[index] < 0x10)
|
||||||
|
Serial.print(F(" 0"));
|
||||||
|
else
|
||||||
|
Serial.print(F(" "));
|
||||||
Serial.print(buffer[index], HEX);
|
Serial.print(buffer[index], HEX);
|
||||||
if ((index % 4) == 3) {
|
if ((index % 4) == 3) {
|
||||||
Serial.print(F(" "));
|
Serial.print(F(" "));
|
||||||
@@ -1425,8 +1439,8 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
|
|||||||
if (firstInGroup) {
|
if (firstInGroup) {
|
||||||
// Print access bits
|
// Print access bits
|
||||||
Serial.print(F(" [ "));
|
Serial.print(F(" [ "));
|
||||||
Serial.print((g[group] >> 2) & 1, DEC); Serial.print(" ");
|
Serial.print((g[group] >> 2) & 1, DEC); Serial.print(F(" "));
|
||||||
Serial.print((g[group] >> 1) & 1, DEC); Serial.print(" ");
|
Serial.print((g[group] >> 1) & 1, DEC); Serial.print(F(" "));
|
||||||
Serial.print((g[group] >> 0) & 1, DEC);
|
Serial.print((g[group] >> 0) & 1, DEC);
|
||||||
Serial.print(F(" ] "));
|
Serial.print(F(" ] "));
|
||||||
if (invertedError) {
|
if (invertedError) {
|
||||||
@@ -1468,12 +1482,18 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() {
|
|||||||
// Dump data
|
// Dump data
|
||||||
for (byte offset = 0; offset < 4; offset++) {
|
for (byte offset = 0; offset < 4; offset++) {
|
||||||
i = page + offset;
|
i = page + offset;
|
||||||
Serial.print(i < 10 ? " " : " "); // Pad with spaces
|
if(i < 10)
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
|
else
|
||||||
|
Serial.print(F(" ")); // Pad with spaces
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" "));
|
Serial.print(F(" "));
|
||||||
for (byte index = 0; index < 4; index++) {
|
for (byte index = 0; index < 4; index++) {
|
||||||
i = 4 * offset + index;
|
i = 4 * offset + index;
|
||||||
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
|
if(buffer[i] < 0x10)
|
||||||
|
Serial.print(F(" 0"));
|
||||||
|
else
|
||||||
|
Serial.print(F(" "));
|
||||||
Serial.print(buffer[i], HEX);
|
Serial.print(buffer[i], HEX);
|
||||||
}
|
}
|
||||||
Serial.println();
|
Serial.println();
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
* Bytes 6-8: Access Bits
|
* Bytes 6-8: Access Bits
|
||||||
* Bytes 9: User data
|
* Bytes 9: User data
|
||||||
* Bytes 10-15: Key B (or user data)
|
* Bytes 10-15: Key B (or user data)
|
||||||
* Block 0 is read only manufacturer data.
|
* Block 0 is read-only manufacturer data.
|
||||||
* To access a block, an authentication using a key from the block's sector must be performed first.
|
* To access a block, an authentication using a key from the block's sector must be performed first.
|
||||||
* Example: To read from block 10, first authenticate using a key from sector 3 (blocks 8-11).
|
* Example: To read from block 10, first authenticate using a key from sector 3 (blocks 8-11).
|
||||||
* All keys are set to FFFFFFFFFFFFh at chip delivery.
|
* All keys are set to FFFFFFFFFFFFh at chip delivery.
|
||||||
@@ -218,8 +218,8 @@ public:
|
|||||||
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.
|
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.
|
||||||
PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision.
|
PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision.
|
||||||
PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1
|
PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1
|
||||||
PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 1
|
PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2
|
||||||
PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 1
|
PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3
|
||||||
PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT.
|
PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT.
|
||||||
// The commands used for MIFARE Classic (from http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, Section 9)
|
// The commands used for MIFARE Classic (from http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, Section 9)
|
||||||
// Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector.
|
// Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector.
|
||||||
@@ -322,7 +322,6 @@ public:
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false);
|
byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false);
|
||||||
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);
|
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);
|
||||||
|
|
||||||
byte PICC_RequestA(byte *bufferATQA, byte *bufferSize);
|
byte PICC_RequestA(byte *bufferATQA, byte *bufferSize);
|
||||||
byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize);
|
byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize);
|
||||||
byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize);
|
byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize);
|
||||||
|
|||||||
@@ -82,13 +82,14 @@ Protocols
|
|||||||
|
|
||||||
2. The reader and the tags communicate using a 13.56 MHz electromagnetic field.
|
2. The reader and the tags communicate using a 13.56 MHz electromagnetic field.
|
||||||
|
|
||||||
* The protocol is defined in ISO/IEC 14443-3:2011 Part 3.
|
* The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A.
|
||||||
|
|
||||||
* Details are found in chapter 6 *"Type A – Initialization and anticollision"*.
|
* Details are found in chapter 6 *"Type A – Initialization and anticollision"*.
|
||||||
|
|
||||||
* See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version
|
* See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version
|
||||||
of the final draft (which might be outdated in some areas).
|
of the final draft (which might be outdated in some areas).
|
||||||
|
|
||||||
|
* The reader do not support ISO/IEC 14443-3 Type B.
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|||||||
BIN
doc/rfidmifare.pdf
Normal file
BIN
doc/rfidmifare.pdf
Normal file
Binary file not shown.
19
keywords.txt
19
keywords.txt
@@ -19,7 +19,10 @@ MIFARE_Key KEYWORD1
|
|||||||
#######################################
|
#######################################
|
||||||
# KEYWORD2 Methods and functions
|
# KEYWORD2 Methods and functions
|
||||||
#######################################
|
#######################################
|
||||||
|
# Functions for setting up the Arduino
|
||||||
setSPIConfig KEYWORD2
|
setSPIConfig KEYWORD2
|
||||||
|
|
||||||
|
# Basic interface functions for communicating with the MFRC522
|
||||||
PCD_WriteRegister KEYWORD2
|
PCD_WriteRegister KEYWORD2
|
||||||
PCD_WriteRegister KEYWORD2
|
PCD_WriteRegister KEYWORD2
|
||||||
PCD_ReadRegister KEYWORD2
|
PCD_ReadRegister KEYWORD2
|
||||||
@@ -28,12 +31,17 @@ setBitMask KEYWORD2
|
|||||||
PCD_SetRegisterBitMask KEYWORD2
|
PCD_SetRegisterBitMask KEYWORD2
|
||||||
PCD_ClearRegisterBitMask KEYWORD2
|
PCD_ClearRegisterBitMask KEYWORD2
|
||||||
PCD_CalculateCRC KEYWORD2
|
PCD_CalculateCRC KEYWORD2
|
||||||
|
|
||||||
|
# Functions for manipulating the MFRC522
|
||||||
PCD_Init KEYWORD2
|
PCD_Init KEYWORD2
|
||||||
PCD_Reset KEYWORD2
|
PCD_Reset KEYWORD2
|
||||||
PCD_AntennaOn KEYWORD2
|
PCD_AntennaOn KEYWORD2
|
||||||
PCD_AntennaOff KEYWORD2
|
PCD_AntennaOff KEYWORD2
|
||||||
PCD_GetAntennaGain KEYWORD2
|
PCD_GetAntennaGain KEYWORD2
|
||||||
PCD_SetAntennaGain KEYWORD2
|
PCD_SetAntennaGain KEYWORD2
|
||||||
|
PCD_PerformSelfTest KEYWORD2
|
||||||
|
|
||||||
|
# Functions for communicating with PICCs
|
||||||
PCD_TransceiveData KEYWORD2
|
PCD_TransceiveData KEYWORD2
|
||||||
PCD_CommunicateWithPICC KEYWORD2
|
PCD_CommunicateWithPICC KEYWORD2
|
||||||
PICC_RequestA KEYWORD2
|
PICC_RequestA KEYWORD2
|
||||||
@@ -41,6 +49,8 @@ PICC_WakeupA KEYWORD2
|
|||||||
PICC_REQA_or_WUPA KEYWORD2
|
PICC_REQA_or_WUPA KEYWORD2
|
||||||
PICC_Select KEYWORD2
|
PICC_Select KEYWORD2
|
||||||
PICC_HaltA KEYWORD2
|
PICC_HaltA KEYWORD2
|
||||||
|
|
||||||
|
# Functions for communicating with MIFARE PICCs
|
||||||
PCD_Authenticate KEYWORD2
|
PCD_Authenticate KEYWORD2
|
||||||
PCD_StopCrypto1 KEYWORD2
|
PCD_StopCrypto1 KEYWORD2
|
||||||
MIFARE_Read KEYWORD2
|
MIFARE_Read KEYWORD2
|
||||||
@@ -49,13 +59,22 @@ MIFARE_Increment KEYWORD2
|
|||||||
MIFARE_Ultralight_Write KEYWORD2
|
MIFARE_Ultralight_Write KEYWORD2
|
||||||
MIFARE_GetValue KEYWORD2
|
MIFARE_GetValue KEYWORD2
|
||||||
MIFARE_SetValue KEYWORD2
|
MIFARE_SetValue KEYWORD2
|
||||||
|
|
||||||
|
# Support functions
|
||||||
PCD_MIFARE_Transceive KEYWORD2
|
PCD_MIFARE_Transceive KEYWORD2
|
||||||
|
GetStatusCodeName KEYWORD2
|
||||||
PICC_GetType KEYWORD2
|
PICC_GetType KEYWORD2
|
||||||
|
PICC_GetTypeName KEYWORD2
|
||||||
PICC_DumpToSerial KEYWORD2
|
PICC_DumpToSerial KEYWORD2
|
||||||
PICC_DumpMifareClassicToSerial KEYWORD2
|
PICC_DumpMifareClassicToSerial KEYWORD2
|
||||||
PICC_DumpMifareClassicSectorToSerial KEYWORD2
|
PICC_DumpMifareClassicSectorToSerial KEYWORD2
|
||||||
PICC_DumpMifareUltralightToSerial KEYWORD2
|
PICC_DumpMifareUltralightToSerial KEYWORD2
|
||||||
MIFARE_SetAccessBits KEYWORD2
|
MIFARE_SetAccessBits KEYWORD2
|
||||||
|
MIFARE_OpenUidBackdoor KEYWORD2
|
||||||
|
MIFARE_SetUid KEYWORD2
|
||||||
|
MIFARE_UnbrickUidSector KEYWORD2
|
||||||
|
|
||||||
|
# Convenience functions - does not add extra functionality
|
||||||
PICC_IsNewCardPresent KEYWORD2
|
PICC_IsNewCardPresent KEYWORD2
|
||||||
PICC_ReadCardSerial KEYWORD2
|
PICC_ReadCardSerial KEYWORD2
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user