# danjperron/micropython-mfrc522 architecture

> Architecture diagram of the GitHub repository danjperron/micropython-mfrc522, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/danjperron/micropython-mfrc522
- Repository: https://github.com/danjperron/micropython-mfrc522

## Overview

This is a MicroPython MFRC522 RFID-reader library. The main workflow is to poll for a tag, select its UID, then read or write Classic-card blocks or NTAG pages; optional examples configure access bits, handle NDEF-oriented cards, dump memory, and poll multiple readers. Source excerpts show the driver’s SPI register operations and several example call sites. Other README-listed examples are represented by their exact tree paths, but their internal wiring is not inferred.

Main entry points: [`mfrc522.py`](https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py) (MFRC522 driver), [`Pico_example/CreateNdefTag.py`](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/CreateNdefTag.py) (Create NDEF tag), [`Pico_example/EraseNdefTag.py`](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/EraseNdefTag.py) (Erase NDEF tag), [`Pico_example/Pico_read.py`](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Pico_read.py) (Pico tag dump)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_driver["Reader driver"]
  node_driver["MFRC522 driver<br/>[mfrc522.py]"]
  node_spi["SPI register I/O<br/>[mfrc522.py]"]
  node_tag_ops["Tag operations<br/>[mfrc522.py]"]
end

subgraph group_access["Card access"]
  node_access_bits["Access-bit codec<br/>[RfidAccess.py]"]
end

subgraph group_examples["Usage examples"]
  node_read_example["Pico tag dump<br/>[Pico_read.py]"]
  node_write_example["Pico block write<br/>[Pico_write.py]"]
  node_ndef_create["Create NDEF tag<br/>[CreateNdefTag.py]"]
  node_ndef_erase["Erase NDEF tag<br/>[EraseNdefTag.py]"]
  node_ndef_read["Read NDEF tag<br/>[ReadNdefTag.py]"]
  node_multi["Four-reader polling<br/>[Read4Readers.py]"]
  node_classic_examples["Classic read examples<br/>[read.py]"]
  node_multi_generic["Multi-reader example<br/>[MultiReaders.py]"]
  node_pico_access["Access configuration<br/>[RfidAccess.py]"]
end

node_person(("Board user"))
node_reader_hw["MFRC522 reader"]
node_tag["RFID tag"]

node_driver -->|"uses"| node_spi
node_spi -->|"register I/O"| node_reader_hw
node_tag_ops -->|"uses protocol"| node_driver
node_reader_hw -->|"communicates"| node_tag
node_read_example -->|"polls and dumps"| node_driver
node_write_example -->|"authenticates and writes"| node_driver
node_ndef_create -->|"writes tag"| node_driver
node_ndef_create -->|"builds permissions"| node_access_bits
node_ndef_erase -->|"resets and dumps"| node_driver
node_ndef_erase -->|"builds trailer"| node_access_bits
node_ndef_read -->|"dumps sectors"| node_driver
node_multi -->|"polls readers"| node_driver
node_classic_examples -->|"uses reader"| node_driver
node_multi_generic -->|"uses reader"| node_driver
node_person -->|"runs"| node_read_example
node_person -->|"runs"| node_write_example
node_person -->|"runs"| node_ndef_create
node_person -->|"runs"| node_ndef_erase
node_person -->|"runs"| node_ndef_read
node_person -->|"runs"| node_multi

click node_driver "https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py"
click node_spi "https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py"
click node_tag_ops "https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py"
click node_access_bits "https://github.com/danjperron/micropython-mfrc522/blob/master/RfidAccess.py"
click node_read_example "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Pico_read.py"
click node_write_example "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Pico_write.py"
click node_ndef_create "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/CreateNdefTag.py"
click node_ndef_erase "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/EraseNdefTag.py"
click node_ndef_read "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/ReadNdefTag.py"
click node_multi "https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Read4Readers.py"
click node_classic_examples "https://github.com/danjperron/micropython-mfrc522/blob/master/examples/read.py"
click node_multi_generic "https://github.com/danjperron/micropython-mfrc522/blob/master/examples/MultiReaders.py"
click node_pico_access "https://github.com/danjperron/micropython-mfrc522/blob/master/RfidAccess.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_driver,node_spi,node_tag_ops,node_person toneBlue
class node_access_bits toneAmber
class node_read_example,node_write_example,node_ndef_create,node_ndef_erase,node_ndef_read,node_multi,node_classic_examples,node_multi_generic,node_pico_access toneMint
class node_reader_hw,node_tag toneIndigo
```

## Components

### Reader driver

- [MFRC522 driver](https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py): `mfrc522.py`
- [SPI register I/O](https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py): `mfrc522.py`
- [Tag operations](https://github.com/danjperron/micropython-mfrc522/blob/master/mfrc522.py): `mfrc522.py`

### Card access

- [Access-bit codec](https://github.com/danjperron/micropython-mfrc522/blob/master/RfidAccess.py): `RfidAccess.py`

### Usage examples

- [Pico tag dump](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Pico_read.py): `Pico_example/Pico_read.py`
- [Pico block write](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Pico_write.py): `Pico_example/Pico_write.py`
- [Create NDEF tag](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/CreateNdefTag.py): `Pico_example/CreateNdefTag.py`
- [Erase NDEF tag](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/EraseNdefTag.py): `Pico_example/EraseNdefTag.py`
- [Read NDEF tag](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/ReadNdefTag.py): `Pico_example/ReadNdefTag.py`
- [Four-reader polling](https://github.com/danjperron/micropython-mfrc522/blob/master/Pico_example/Read4Readers.py): `Pico_example/Read4Readers.py`
- [Classic read examples](https://github.com/danjperron/micropython-mfrc522/blob/master/examples/read.py): `examples/read.py`
- [Multi-reader example](https://github.com/danjperron/micropython-mfrc522/blob/master/examples/MultiReaders.py): `examples/MultiReaders.py`
- [Access configuration](https://github.com/danjperron/micropython-mfrc522/blob/master/RfidAccess.py): `RfidAccess.py`

### Other components

- **Board user**
- **MFRC522 reader**
- **RFID tag**

## Connections

- MFRC522 driver → SPI register I/O: uses
- SPI register I/O → MFRC522 reader: register I/O
- Tag operations → MFRC522 driver: uses protocol
- MFRC522 reader → RFID tag: communicates
- Pico tag dump → MFRC522 driver: polls and dumps
- Pico block write → MFRC522 driver: authenticates and writes
- Create NDEF tag → MFRC522 driver: writes tag
- Create NDEF tag → Access-bit codec: builds permissions
- Erase NDEF tag → MFRC522 driver: resets and dumps
- Erase NDEF tag → Access-bit codec: builds trailer
- Read NDEF tag → MFRC522 driver: dumps sectors
- Four-reader polling → MFRC522 driver: polls readers
- Classic read examples → MFRC522 driver: uses reader
- Multi-reader example → MFRC522 driver: uses reader
- Board user → Pico tag dump: runs
- Board user → Pico block write: runs
- Board user → Create NDEF tag: runs
- Board user → Erase NDEF tag: runs
- Board user → Read NDEF tag: runs
- Board user → Four-reader polling: runs
