From 912085f17979dbe34c6c348d3d201438476180aa Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:15:34 +0100 Subject: [PATCH 01/12] Add UART driver. --- src/MFRC522DriverUART.cpp | 96 +++++++++++++++++++++++++++++++++++++++ src/MFRC522DriverUART.h | 32 +++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/MFRC522DriverUART.cpp create mode 100644 src/MFRC522DriverUART.h diff --git a/src/MFRC522DriverUART.cpp b/src/MFRC522DriverUART.cpp new file mode 100644 index 0000000..16ace32 --- /dev/null +++ b/src/MFRC522DriverUART.cpp @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +#include "MFRC522Debug.h" +#include "MFRC522DriverUART.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Basic interface functions for communicating with the MFRC522DriverUART +///////////////////////////////////////////////////////////////////////////////////// + +bool MFRC522DriverUART::init() { + // Surrounding code should initialize the serial port. + _serial.setTimeout(10); + return true; +} + +/** + * Writes a byte to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +void MFRC522DriverUART::PCD_WriteRegister(const PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + const byte value ///< The value to write. + ) { + // PCD_ReadRegister(reg); + Serial.print(MFRC522Debug::toString(reg)); + Serial.printf(" < 0x%02x \n", value); + _serial.write(reg); + // read back the echoes address: + byte readBack = 0xff; + _serial.readBytes(&readBack, 1); + if (readBack != reg) + Serial.printf("Different address was read back 0x%02x != 0x%02x \n", reg, readBack); + _serial.write(value); +} // End PCD_WriteRegister(). + +/** + * Writes a number of bytes to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +void MFRC522DriverUART::PCD_WriteRegister(const MFRC522Constants::PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + const byte count, ///< The number of bytes to write to the register. + byte *const values ///< The values to write. Byte array. + ) { + for (byte i = 0; i < count; i++) + { + PCD_WriteRegister(reg, values[i]); + } +} // End PCD_WriteRegister() + +/** + * Reads a byte from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +byte MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg ///< The register to read from. One of the PCD_Register enums. + ) { + byte value = 0; + byte regRead = reg | 0xC0; + _serial.write(regRead); + _serial.readBytes(&value, 1); + Serial.print(MFRC522Debug::toString(reg)); + Serial.printf(" : 0x%02x \n", value); + return value; +} // End PCD_ReadRegister() + +/** + * Reads a number of bytes from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg, ///< The register to read from. One of the PCD_Register enums. + const byte count, ///< The number of bytes to read. + byte *const values, ///< Byte array to store the values in. + const byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated. + ) { + // Sanity check. + if(count == 0 || values == nullptr) { + return; + } + + byte index = 0; + + while(index < count) { + if(index == 0 && rxAlign) { // Only update bit positions rxAlign..7 in values[0] + // Create bit mask for bit positions rxAlign..7 + byte mask = 0; + + for(byte i = rxAlign; i <= 7; i++) { + mask |= (1 << i); + } + byte value = PCD_ReadRegister(reg); + + // Apply mask to both current value of values[0] and the new data in value. + values[0] = (values[index] & ~mask) | (value & mask); + } else { // Normal case + values[index] = PCD_ReadRegister(reg); + } + index++; + } +} // End PCD_ReadRegister() diff --git a/src/MFRC522DriverUART.h b/src/MFRC522DriverUART.h new file mode 100644 index 0000000..37f5fd0 --- /dev/null +++ b/src/MFRC522DriverUART.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +#pragma once + +#include +#include + +class MFRC522DriverUART : public MFRC522Driver { +public: + //using PCD_Register = MFRC522Constants::PCD_Register; + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for setting up the Arduino. + ///////////////////////////////////////////////////////////////////////////////////// + + bool init() override; + + ///////////////////////////////////////////////////////////////////////////////////// + // Basic interface functions for communicating with the MFRC522. + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_WriteRegister(const PCD_Register reg, const byte value) override; + void PCD_WriteRegister(const PCD_Register reg, const byte count, byte *const values) override; + byte PCD_ReadRegister(const PCD_Register reg) override; + void PCD_ReadRegister(const PCD_Register reg, const byte count, byte *const values, const byte rxAlign = 0) override; + + + MFRC522DriverUART(Stream& serial) : + MFRC522Driver(), + _serial(serial) + {} + +protected: + Stream& _serial; +}; From b44d41007be11765ae9bb78898fbe85ad1032849 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:41:28 +0100 Subject: [PATCH 02/12] Add example --- examples/CustomUART/CustomUART.ino | 62 +++++++++++++++++++++++++ examples/CustomUART/RC522-UART-mod.jpg | Bin 0 -> 67013 bytes 2 files changed, 62 insertions(+) create mode 100644 examples/CustomUART/CustomUART.ino create mode 100644 examples/CustomUART/RC522-UART-mod.jpg diff --git a/examples/CustomUART/CustomUART.ino b/examples/CustomUART/CustomUART.ino new file mode 100644 index 0000000..dabe6a6 --- /dev/null +++ b/examples/CustomUART/CustomUART.ino @@ -0,0 +1,62 @@ +#include +#include "MFRC522v2.h" +#include "MFRC522DriverPinSimple.h" +#include "MFRC522Debug.h" +#include "MFRC522DriverUART.h" +#include "MFRC522DriverSPI.h" + +// This exampe was tested with an ESP32. +// It needs the following wiring (which can be fully customized due to the powerful pinmux of the ESP32): +// RC-522 module | ESP32 +// SDA (RX) | 22 (txPin) +// MISO (TX) | 23 (rxPin) +// RESET | 21 +// +// Don't forget to modify the RC-522: Disconnect the EA pin (32) from Vcc and wire it to GND. +// See RC522-UART-mod.jpg for reference. + +MFRC522DriverUART driver{Serial1}; // Create UART driver. + +MFRC522 mfrc522{driver}; // Create MFRC522 instance. + +#define RESET_PIN 21 + +void setup() +{ + pinMode(RESET_PIN, OUTPUT); + digitalWrite(RESET_PIN, LOW); // power down + delay(100); + digitalWrite(RESET_PIN, HIGH); // Reset by positive edge. + //--- Start serial + Serial.begin (115200) ; + Serial1.begin(9600, SERIAL_8N1, /* rxPin */ 23, /* txPin */ 22); + //--- Wait for serial (blink led at 10 Hz during waiting) + while (!Serial) { + delay (50) ; + } + + while (!Serial1) { + delay (50) ; + } + + delay(1000); + + driver.PCD_ReadRegister(MFRC522Constants::PCD_Register::VersionReg); + mfrc522.PCD_Init(); // Init MFRC522 board. + MFRC522Debug::PCD_DumpVersionToSerial(mfrc522, Serial); // Show details of PCD - MFRC522 Card Reader details. + + Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); +} + +void loop() +{ + Serial.println("Checking for card..."); + if ( mfrc522.PICC_IsNewCardPresent()) + { + Serial.println("Card present."); + if (mfrc522.PICC_ReadCardSerial()) { + MFRC522Debug::PICC_DumpToSerial(mfrc522, Serial, &(mfrc522.uid)); + } + } + delay(1000); +} \ No newline at end of file diff --git a/examples/CustomUART/RC522-UART-mod.jpg b/examples/CustomUART/RC522-UART-mod.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5dfe2135583a2ed8b8e76c0366b464cf1139781 GIT binary patch literal 67013 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 Date: Sat, 23 Nov 2024 12:41:40 +0100 Subject: [PATCH 03/12] Remove debug output. --- src/MFRC522DriverUART.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/MFRC522DriverUART.cpp b/src/MFRC522DriverUART.cpp index 16ace32..5594165 100644 --- a/src/MFRC522DriverUART.cpp +++ b/src/MFRC522DriverUART.cpp @@ -20,14 +20,10 @@ void MFRC522DriverUART::PCD_WriteRegister(const PCD_Register reg, ///< The re const byte value ///< The value to write. ) { // PCD_ReadRegister(reg); - Serial.print(MFRC522Debug::toString(reg)); - Serial.printf(" < 0x%02x \n", value); _serial.write(reg); // read back the echoes address: byte readBack = 0xff; _serial.readBytes(&readBack, 1); - if (readBack != reg) - Serial.printf("Different address was read back 0x%02x != 0x%02x \n", reg, readBack); _serial.write(value); } // End PCD_WriteRegister(). @@ -55,8 +51,6 @@ byte MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg ///< The regi byte regRead = reg | 0xC0; _serial.write(regRead); _serial.readBytes(&value, 1); - Serial.print(MFRC522Debug::toString(reg)); - Serial.printf(" : 0x%02x \n", value); return value; } // End PCD_ReadRegister() From 9ab0a92a548a266d6b70a498f216a1463061fecb Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:47:04 +0100 Subject: [PATCH 04/12] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ebac169..255c82d 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,6 @@ If you got a bad board and you can tell us how to detect those boards (silk, chi * Use of IRQ pin. But there is a proof-of-concept example. * With Intel Galileo (Gen2) see [#310](https://github.com/miguelbalboa/rfid/issues/310), not supported by software. * Power reduction modes [#269](https://github.com/miguelbalboa/rfid/issues/269), not supported by software. - * UART instead of SPI [#281](https://github.com/miguelbalboa/rfid/issues/281), not supported by software. * **Need more?** From 18250935061b3925fdb8b17020b612b59fc9b63e Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Thu, 21 Nov 2024 20:58:13 +0100 Subject: [PATCH 05/12] Get a string for each register definition --- src/MFRC522Debug.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++ src/MFRC522Debug.h | 3 +++ 2 files changed, 60 insertions(+) diff --git a/src/MFRC522Debug.cpp b/src/MFRC522Debug.cpp index f9f9f11..f81ea50 100644 --- a/src/MFRC522Debug.cpp +++ b/src/MFRC522Debug.cpp @@ -432,3 +432,60 @@ void MFRC522Debug::PICC_DumpMifareUltralightToSerial(MFRC522 &device, Print &log } } } // End PICC_DumpMifareUltralightToSerial() + +String MFRC522Debug::toString(PCD_Register reg) +{ + switch(reg) + { + case PCD_Register::CommandReg : return "CommandReg "; + case PCD_Register::ComIEnReg : return "ComIEnReg "; + case PCD_Register::DivIEnReg : return "DivIEnReg "; + case PCD_Register::ComIrqReg : return "ComIrqReg "; + case PCD_Register::DivIrqReg : return "DivIrqReg "; + case PCD_Register::ErrorReg : return "ErrorReg "; + case PCD_Register::Status1Reg : return "Status1Reg "; + case PCD_Register::Status2Reg : return "Status2Reg "; + case PCD_Register::FIFODataReg : return "FIFODataReg "; + case PCD_Register::FIFOLevelReg : return "FIFOLevelReg "; + case PCD_Register::WaterLevelReg : return "WaterLevelReg "; + case PCD_Register::ControlReg : return "ControlReg "; + case PCD_Register::BitFramingReg : return "BitFramingReg "; + case PCD_Register::CollReg : return "CollReg "; + case PCD_Register::ModeReg : return "ModeReg "; + case PCD_Register::TxModeReg : return "TxModeReg "; + case PCD_Register::RxModeReg : return "RxModeReg "; + case PCD_Register::TxControlReg : return "TxControlReg "; + case PCD_Register::TxASKReg : return "TxASKReg "; + case PCD_Register::TxSelReg : return "TxSelReg "; + case PCD_Register::RxSelReg : return "RxSelReg "; + case PCD_Register::RxThresholdReg : return "RxThresholdReg "; + case PCD_Register::DemodReg : return "DemodReg "; + case PCD_Register::MfTxReg : return "MfTxReg "; + case PCD_Register::MfRxReg : return "MfRxReg "; + case PCD_Register::SerialSpeedReg : return "SerialSpeedReg "; + case PCD_Register::CRCResultRegH : return "CRCResultRegH "; + case PCD_Register::CRCResultRegL : return "CRCResultRegL "; + case PCD_Register::ModWidthReg : return "ModWidthReg "; + case PCD_Register::RFCfgReg : return "RFCfgReg "; + case PCD_Register::GsNReg : return "GsNReg "; + case PCD_Register::CWGsPReg : return "CWGsPReg "; + case PCD_Register::ModGsPReg : return "ModGsPReg "; + case PCD_Register::TModeReg : return "TModeReg "; + case PCD_Register::TPrescalerReg : return "TPrescalerReg "; + case PCD_Register::TReloadRegH : return "TReloadRegH "; + case PCD_Register::TReloadRegL : return "TReloadRegL "; + case PCD_Register::TCounterValueRegH : return "TCounterValueRegH"; + case PCD_Register::TCounterValueRegL : return "TCounterValueRegL"; + case PCD_Register::TestSel1Reg : return "TestSel1Reg "; + case PCD_Register::TestSel2Reg : return "TestSel2Reg "; + case PCD_Register::TestPinEnReg : return "TestPinEnReg "; + case PCD_Register::TestPinValueReg : return "TestPinValueReg "; + case PCD_Register::TestBusReg : return "TestBusReg "; + case PCD_Register::AutoTestReg : return "AutoTestReg "; + case PCD_Register::VersionReg : return "VersionReg "; + case PCD_Register::AnalogTestReg : return "AnalogTestReg "; + case PCD_Register::TestDAC1Reg : return "TestDAC1Reg "; + case PCD_Register::TestDAC2Reg : return "TestDAC2Reg "; + case PCD_Register::TestADCReg : return "TestADCReg "; + } +} diff --git a/src/MFRC522Debug.h b/src/MFRC522Debug.h index 6ef590a..24baa88 100644 --- a/src/MFRC522Debug.h +++ b/src/MFRC522Debug.h @@ -13,6 +13,7 @@ class MFRC522Debug { using PCD_Version = MFRC522Constants::PCD_Version; using Uid = MFRC522Constants::Uid; using MIFARE_Key = MFRC522Constants::MIFARE_Key; + using PCD_Register = MFRC522Constants::PCD_Register; public: // Get human readable code and type @@ -30,4 +31,6 @@ class MFRC522Debug { static void PICC_DumpMifareClassicToSerial(MFRC522 &device, Print &logPrint, Uid *uid, PICC_Type piccType, MIFARE_Key *key); static void PICC_DumpMifareClassicSectorToSerial(MFRC522 &device, Print &logPrint, Uid *uid, MIFARE_Key *key, byte sector); static void PICC_DumpMifareUltralightToSerial(MFRC522 &device, Print &logPrint); + + static String toString(PCD_Register reg); }; From b9c2c094746351c5e6c65ab10961ebfbe70e450b Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:15:34 +0100 Subject: [PATCH 06/12] Add UART driver. --- src/MFRC522DriverUART.cpp | 96 +++++++++++++++++++++++++++++++++++++++ src/MFRC522DriverUART.h | 32 +++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/MFRC522DriverUART.cpp create mode 100644 src/MFRC522DriverUART.h diff --git a/src/MFRC522DriverUART.cpp b/src/MFRC522DriverUART.cpp new file mode 100644 index 0000000..16ace32 --- /dev/null +++ b/src/MFRC522DriverUART.cpp @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +#include "MFRC522Debug.h" +#include "MFRC522DriverUART.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Basic interface functions for communicating with the MFRC522DriverUART +///////////////////////////////////////////////////////////////////////////////////// + +bool MFRC522DriverUART::init() { + // Surrounding code should initialize the serial port. + _serial.setTimeout(10); + return true; +} + +/** + * Writes a byte to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +void MFRC522DriverUART::PCD_WriteRegister(const PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + const byte value ///< The value to write. + ) { + // PCD_ReadRegister(reg); + Serial.print(MFRC522Debug::toString(reg)); + Serial.printf(" < 0x%02x \n", value); + _serial.write(reg); + // read back the echoes address: + byte readBack = 0xff; + _serial.readBytes(&readBack, 1); + if (readBack != reg) + Serial.printf("Different address was read back 0x%02x != 0x%02x \n", reg, readBack); + _serial.write(value); +} // End PCD_WriteRegister(). + +/** + * Writes a number of bytes to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +void MFRC522DriverUART::PCD_WriteRegister(const MFRC522Constants::PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + const byte count, ///< The number of bytes to write to the register. + byte *const values ///< The values to write. Byte array. + ) { + for (byte i = 0; i < count; i++) + { + PCD_WriteRegister(reg, values[i]); + } +} // End PCD_WriteRegister() + +/** + * Reads a byte from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.4. + */ +byte MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg ///< The register to read from. One of the PCD_Register enums. + ) { + byte value = 0; + byte regRead = reg | 0xC0; + _serial.write(regRead); + _serial.readBytes(&value, 1); + Serial.print(MFRC522Debug::toString(reg)); + Serial.printf(" : 0x%02x \n", value); + return value; +} // End PCD_ReadRegister() + +/** + * Reads a number of bytes from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg, ///< The register to read from. One of the PCD_Register enums. + const byte count, ///< The number of bytes to read. + byte *const values, ///< Byte array to store the values in. + const byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated. + ) { + // Sanity check. + if(count == 0 || values == nullptr) { + return; + } + + byte index = 0; + + while(index < count) { + if(index == 0 && rxAlign) { // Only update bit positions rxAlign..7 in values[0] + // Create bit mask for bit positions rxAlign..7 + byte mask = 0; + + for(byte i = rxAlign; i <= 7; i++) { + mask |= (1 << i); + } + byte value = PCD_ReadRegister(reg); + + // Apply mask to both current value of values[0] and the new data in value. + values[0] = (values[index] & ~mask) | (value & mask); + } else { // Normal case + values[index] = PCD_ReadRegister(reg); + } + index++; + } +} // End PCD_ReadRegister() diff --git a/src/MFRC522DriverUART.h b/src/MFRC522DriverUART.h new file mode 100644 index 0000000..37f5fd0 --- /dev/null +++ b/src/MFRC522DriverUART.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: LGPL-2.1 */ +#pragma once + +#include +#include + +class MFRC522DriverUART : public MFRC522Driver { +public: + //using PCD_Register = MFRC522Constants::PCD_Register; + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for setting up the Arduino. + ///////////////////////////////////////////////////////////////////////////////////// + + bool init() override; + + ///////////////////////////////////////////////////////////////////////////////////// + // Basic interface functions for communicating with the MFRC522. + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_WriteRegister(const PCD_Register reg, const byte value) override; + void PCD_WriteRegister(const PCD_Register reg, const byte count, byte *const values) override; + byte PCD_ReadRegister(const PCD_Register reg) override; + void PCD_ReadRegister(const PCD_Register reg, const byte count, byte *const values, const byte rxAlign = 0) override; + + + MFRC522DriverUART(Stream& serial) : + MFRC522Driver(), + _serial(serial) + {} + +protected: + Stream& _serial; +}; From 1dd8a8257246ddef4c2c10ef11f416eeee8a350a Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:41:28 +0100 Subject: [PATCH 07/12] Add example --- examples/CustomUART/CustomUART.ino | 62 +++++++++++++++++++++++++ examples/CustomUART/RC522-UART-mod.jpg | Bin 0 -> 67013 bytes 2 files changed, 62 insertions(+) create mode 100644 examples/CustomUART/CustomUART.ino create mode 100644 examples/CustomUART/RC522-UART-mod.jpg diff --git a/examples/CustomUART/CustomUART.ino b/examples/CustomUART/CustomUART.ino new file mode 100644 index 0000000..dabe6a6 --- /dev/null +++ b/examples/CustomUART/CustomUART.ino @@ -0,0 +1,62 @@ +#include +#include "MFRC522v2.h" +#include "MFRC522DriverPinSimple.h" +#include "MFRC522Debug.h" +#include "MFRC522DriverUART.h" +#include "MFRC522DriverSPI.h" + +// This exampe was tested with an ESP32. +// It needs the following wiring (which can be fully customized due to the powerful pinmux of the ESP32): +// RC-522 module | ESP32 +// SDA (RX) | 22 (txPin) +// MISO (TX) | 23 (rxPin) +// RESET | 21 +// +// Don't forget to modify the RC-522: Disconnect the EA pin (32) from Vcc and wire it to GND. +// See RC522-UART-mod.jpg for reference. + +MFRC522DriverUART driver{Serial1}; // Create UART driver. + +MFRC522 mfrc522{driver}; // Create MFRC522 instance. + +#define RESET_PIN 21 + +void setup() +{ + pinMode(RESET_PIN, OUTPUT); + digitalWrite(RESET_PIN, LOW); // power down + delay(100); + digitalWrite(RESET_PIN, HIGH); // Reset by positive edge. + //--- Start serial + Serial.begin (115200) ; + Serial1.begin(9600, SERIAL_8N1, /* rxPin */ 23, /* txPin */ 22); + //--- Wait for serial (blink led at 10 Hz during waiting) + while (!Serial) { + delay (50) ; + } + + while (!Serial1) { + delay (50) ; + } + + delay(1000); + + driver.PCD_ReadRegister(MFRC522Constants::PCD_Register::VersionReg); + mfrc522.PCD_Init(); // Init MFRC522 board. + MFRC522Debug::PCD_DumpVersionToSerial(mfrc522, Serial); // Show details of PCD - MFRC522 Card Reader details. + + Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); +} + +void loop() +{ + Serial.println("Checking for card..."); + if ( mfrc522.PICC_IsNewCardPresent()) + { + Serial.println("Card present."); + if (mfrc522.PICC_ReadCardSerial()) { + MFRC522Debug::PICC_DumpToSerial(mfrc522, Serial, &(mfrc522.uid)); + } + } + delay(1000); +} \ No newline at end of file diff --git a/examples/CustomUART/RC522-UART-mod.jpg b/examples/CustomUART/RC522-UART-mod.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5dfe2135583a2ed8b8e76c0366b464cf1139781 GIT binary patch literal 67013 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 Date: Sat, 23 Nov 2024 12:41:40 +0100 Subject: [PATCH 08/12] Remove debug output. --- src/MFRC522DriverUART.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/MFRC522DriverUART.cpp b/src/MFRC522DriverUART.cpp index 16ace32..5594165 100644 --- a/src/MFRC522DriverUART.cpp +++ b/src/MFRC522DriverUART.cpp @@ -20,14 +20,10 @@ void MFRC522DriverUART::PCD_WriteRegister(const PCD_Register reg, ///< The re const byte value ///< The value to write. ) { // PCD_ReadRegister(reg); - Serial.print(MFRC522Debug::toString(reg)); - Serial.printf(" < 0x%02x \n", value); _serial.write(reg); // read back the echoes address: byte readBack = 0xff; _serial.readBytes(&readBack, 1); - if (readBack != reg) - Serial.printf("Different address was read back 0x%02x != 0x%02x \n", reg, readBack); _serial.write(value); } // End PCD_WriteRegister(). @@ -55,8 +51,6 @@ byte MFRC522DriverUART::PCD_ReadRegister(const PCD_Register reg ///< The regi byte regRead = reg | 0xC0; _serial.write(regRead); _serial.readBytes(&value, 1); - Serial.print(MFRC522Debug::toString(reg)); - Serial.printf(" : 0x%02x \n", value); return value; } // End PCD_ReadRegister() From 79624be9a6cb331af03b611dca4c76a1ab685692 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Sat, 23 Nov 2024 12:47:04 +0100 Subject: [PATCH 09/12] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ebac169..255c82d 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,6 @@ If you got a bad board and you can tell us how to detect those boards (silk, chi * Use of IRQ pin. But there is a proof-of-concept example. * With Intel Galileo (Gen2) see [#310](https://github.com/miguelbalboa/rfid/issues/310), not supported by software. * Power reduction modes [#269](https://github.com/miguelbalboa/rfid/issues/269), not supported by software. - * UART instead of SPI [#281](https://github.com/miguelbalboa/rfid/issues/281), not supported by software. * **Need more?** From ccfeaabd629323663589cec6929780c78383a88e Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Thu, 21 Nov 2024 20:58:13 +0100 Subject: [PATCH 10/12] Get a string for each register definition --- src/MFRC522Debug.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++ src/MFRC522Debug.h | 3 +++ 2 files changed, 60 insertions(+) diff --git a/src/MFRC522Debug.cpp b/src/MFRC522Debug.cpp index f9f9f11..f81ea50 100644 --- a/src/MFRC522Debug.cpp +++ b/src/MFRC522Debug.cpp @@ -432,3 +432,60 @@ void MFRC522Debug::PICC_DumpMifareUltralightToSerial(MFRC522 &device, Print &log } } } // End PICC_DumpMifareUltralightToSerial() + +String MFRC522Debug::toString(PCD_Register reg) +{ + switch(reg) + { + case PCD_Register::CommandReg : return "CommandReg "; + case PCD_Register::ComIEnReg : return "ComIEnReg "; + case PCD_Register::DivIEnReg : return "DivIEnReg "; + case PCD_Register::ComIrqReg : return "ComIrqReg "; + case PCD_Register::DivIrqReg : return "DivIrqReg "; + case PCD_Register::ErrorReg : return "ErrorReg "; + case PCD_Register::Status1Reg : return "Status1Reg "; + case PCD_Register::Status2Reg : return "Status2Reg "; + case PCD_Register::FIFODataReg : return "FIFODataReg "; + case PCD_Register::FIFOLevelReg : return "FIFOLevelReg "; + case PCD_Register::WaterLevelReg : return "WaterLevelReg "; + case PCD_Register::ControlReg : return "ControlReg "; + case PCD_Register::BitFramingReg : return "BitFramingReg "; + case PCD_Register::CollReg : return "CollReg "; + case PCD_Register::ModeReg : return "ModeReg "; + case PCD_Register::TxModeReg : return "TxModeReg "; + case PCD_Register::RxModeReg : return "RxModeReg "; + case PCD_Register::TxControlReg : return "TxControlReg "; + case PCD_Register::TxASKReg : return "TxASKReg "; + case PCD_Register::TxSelReg : return "TxSelReg "; + case PCD_Register::RxSelReg : return "RxSelReg "; + case PCD_Register::RxThresholdReg : return "RxThresholdReg "; + case PCD_Register::DemodReg : return "DemodReg "; + case PCD_Register::MfTxReg : return "MfTxReg "; + case PCD_Register::MfRxReg : return "MfRxReg "; + case PCD_Register::SerialSpeedReg : return "SerialSpeedReg "; + case PCD_Register::CRCResultRegH : return "CRCResultRegH "; + case PCD_Register::CRCResultRegL : return "CRCResultRegL "; + case PCD_Register::ModWidthReg : return "ModWidthReg "; + case PCD_Register::RFCfgReg : return "RFCfgReg "; + case PCD_Register::GsNReg : return "GsNReg "; + case PCD_Register::CWGsPReg : return "CWGsPReg "; + case PCD_Register::ModGsPReg : return "ModGsPReg "; + case PCD_Register::TModeReg : return "TModeReg "; + case PCD_Register::TPrescalerReg : return "TPrescalerReg "; + case PCD_Register::TReloadRegH : return "TReloadRegH "; + case PCD_Register::TReloadRegL : return "TReloadRegL "; + case PCD_Register::TCounterValueRegH : return "TCounterValueRegH"; + case PCD_Register::TCounterValueRegL : return "TCounterValueRegL"; + case PCD_Register::TestSel1Reg : return "TestSel1Reg "; + case PCD_Register::TestSel2Reg : return "TestSel2Reg "; + case PCD_Register::TestPinEnReg : return "TestPinEnReg "; + case PCD_Register::TestPinValueReg : return "TestPinValueReg "; + case PCD_Register::TestBusReg : return "TestBusReg "; + case PCD_Register::AutoTestReg : return "AutoTestReg "; + case PCD_Register::VersionReg : return "VersionReg "; + case PCD_Register::AnalogTestReg : return "AnalogTestReg "; + case PCD_Register::TestDAC1Reg : return "TestDAC1Reg "; + case PCD_Register::TestDAC2Reg : return "TestDAC2Reg "; + case PCD_Register::TestADCReg : return "TestADCReg "; + } +} diff --git a/src/MFRC522Debug.h b/src/MFRC522Debug.h index 6ef590a..24baa88 100644 --- a/src/MFRC522Debug.h +++ b/src/MFRC522Debug.h @@ -13,6 +13,7 @@ class MFRC522Debug { using PCD_Version = MFRC522Constants::PCD_Version; using Uid = MFRC522Constants::Uid; using MIFARE_Key = MFRC522Constants::MIFARE_Key; + using PCD_Register = MFRC522Constants::PCD_Register; public: // Get human readable code and type @@ -30,4 +31,6 @@ class MFRC522Debug { static void PICC_DumpMifareClassicToSerial(MFRC522 &device, Print &logPrint, Uid *uid, PICC_Type piccType, MIFARE_Key *key); static void PICC_DumpMifareClassicSectorToSerial(MFRC522 &device, Print &logPrint, Uid *uid, MIFARE_Key *key, byte sector); static void PICC_DumpMifareUltralightToSerial(MFRC522 &device, Print &logPrint); + + static String toString(PCD_Register reg); }; From deb6b01e91508f52d6352163ea0b97c43807004e Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Tue, 1 Apr 2025 08:55:27 +0200 Subject: [PATCH 11/12] Compile Fix for AVR. --- examples/CustomUART/CustomUART.ino | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/CustomUART/CustomUART.ino b/examples/CustomUART/CustomUART.ino index dabe6a6..ecec6c3 100644 --- a/examples/CustomUART/CustomUART.ino +++ b/examples/CustomUART/CustomUART.ino @@ -29,7 +29,12 @@ void setup() digitalWrite(RESET_PIN, HIGH); // Reset by positive edge. //--- Start serial Serial.begin (115200) ; +#ifdef ESP32 Serial1.begin(9600, SERIAL_8N1, /* rxPin */ 23, /* txPin */ 22); +#else + // AVR does not support specifying of the pins when initializing a Serial device. + Serial1.begin(9600, SERIAL_8N1); +#endif //--- Wait for serial (blink led at 10 Hz during waiting) while (!Serial) { delay (50) ; From c6386ae269d91cdb00001c3f365356d302f97b0d Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Tue, 1 Apr 2025 08:55:39 +0200 Subject: [PATCH 12/12] Remove compiler warning --- src/MFRC522Debug.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MFRC522Debug.cpp b/src/MFRC522Debug.cpp index f81ea50..a497d2a 100644 --- a/src/MFRC522Debug.cpp +++ b/src/MFRC522Debug.cpp @@ -487,5 +487,6 @@ String MFRC522Debug::toString(PCD_Register reg) case PCD_Register::TestDAC1Reg : return "TestDAC1Reg "; case PCD_Register::TestDAC2Reg : return "TestDAC2Reg "; case PCD_Register::TestADCReg : return "TestADCReg "; + default : return String("Unknown Register: ") + reg; } }