Make RFID failure non-fatal (self-test retries, 4MHz clock, diagnostic log), add beginner Wi-Fi guide + RFID troubleshooting to README

This commit is contained in:
2026-09-09 21:52:40 +02:00
parent 7599f0e6b2
commit 96d14c0538
6 changed files with 167 additions and 19 deletions

View File

@@ -21,6 +21,11 @@ static const char *TAG = "rfid";
#define RC522_TASK_STACK_SIZE (6 * 1024)
#define RC522_TASK_PRIORITY (4)
/* Conservative clock for MFRC522 clones. If the FIFO self-test still
* reports a mismatch at boot, lower this (e.g. 2000000) or check power. */
#define RC522_SPI_CLK_HZ (4000000)
#define RC522_START_ATTEMPTS (3)
static rc522_driver_handle_t s_driver;
static rc522_handle_t s_scanner;
@@ -63,6 +68,7 @@ esp_err_t rfid_manager_init(void)
.bus_config = NULL,
.dev_config = {
.spics_io_num = HW_RC522_CS_GPIO,
.clock_speed_hz = RC522_SPI_CLK_HZ,
},
.dma_chan = SPI_DMA_CH_AUTO,
.rst_io_num = HW_RC522_RST_GPIO,
@@ -96,9 +102,21 @@ esp_err_t rfid_manager_init(void)
esp_err_t rfid_manager_start(void)
{
esp_err_t ret = rc522_start(s_scanner);
esp_err_t ret = ESP_FAIL;
for (int attempt = 1; attempt <= RC522_START_ATTEMPTS; attempt++) {
ret = rc522_start(s_scanner);
if (ret == ESP_OK) {
break;
}
ESP_LOGW(TAG, "rc522_start attempt %d/%d failed: %s",
attempt, RC522_START_ATTEMPTS, esp_err_to_name(ret));
vTaskDelay(pdMS_TO_TICKS(250));
}
if (ret != ESP_OK) {
ESP_LOGE(TAG, "rc522_start failed: %s", esp_err_to_name(ret));
ESP_LOGE(TAG, "MFRC522 self-test failed (%s). Check: reader powered "
"(3.3V), SPI wiring (SCK=18/MOSI=23/MISO=19, CS=5, RST=22), "
"and if it is a clone try lowering RC522_SPI_CLK_HZ", esp_err_to_name(ret));
return ret;
}