From ff4f51f38bbbb92f61364a779ac01ee49de21d58 Mon Sep 17 00:00:00 2001 From: heziegl Date: Sun, 14 Jan 2018 13:04:01 +0100 Subject: [PATCH] fix #293 #324 #347, hang of PCD_Init() on ESP8266 boards (#354) On the Wemos D1 mini ESP8266 board the RST pin was LOW all the time and the MFRC522::PCD_Init() didn't reset the MFRC522 because of a non working digitalWrite, resulting in a endless loop. --- src/MFRC522.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/MFRC522.cpp b/src/MFRC522.cpp index 7800e24..0038a51 100644 --- a/src/MFRC522.cpp +++ b/src/MFRC522.cpp @@ -198,11 +198,12 @@ void MFRC522::PCD_Init() { digitalWrite(_chipSelectPin, HIGH); // If a valid pin number has been set, pull device out of power down / reset state. - if (_resetPowerDownPin != UINT8_MAX) { - // Set the resetPowerDownPin as digital output, do not reset or power down. - pinMode(_resetPowerDownPin, OUTPUT); + if (_resetPowerDownPin != UNUSED_PIN) { + // First set the resetPowerDownPin as digital input, to check the MFRC522 power down mode. + pinMode(_resetPowerDownPin, INPUT); if (digitalRead(_resetPowerDownPin) == LOW) { // The MFRC522 chip is in power down mode. + pinMode(_resetPowerDownPin, OUTPUT); // Now set the resetPowerDownPin as digital output. digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms. delay(50);