ST25R3916 Documentation covers quick start steps, SPI wiring, ESP32 setup, performance notes, test workflow, and troubleshooting for the ELECHOUSE ST25R3916 NFC Reader Module.
Quick Start
- Use the module over SPI. This board is built around the high-performance STMicroelectronics ST25R3916 NFC reader IC.
- Wire the board to your host MCU using MOSI, MISO, SCLK, CS, IRQ, 5V, and GND.
- Install the ST25R3916 Arduino sample / library package referenced in the test document.
- Open the test sketch, compile, upload, and watch Serial Monitor at 115200 baud.
- Present a tag to confirm detection and SPI communication.
Key Technical Facts
- Chip: STMicroelectronics ST25R3916
- Operating frequency: 13.56 MHz
- Interface: SPI
- Supported standards: ISO 14443A/B, ISO 15693, FeliCa, NFC Forum Type 1–5
- Card emulation: NFC Forum Type 4 with active load modulation
- Typical strength: long reading distance, especially on ISO 15693 tags
SPI Wiring
| ESP32 Pin | ST25R3916 Pin | Notes |
|---|---|---|
| D23 | MOSI | SPI MOSI |
| D19 | MISO | SPI MISO |
| D18 | SCLK | SPI clock |
| D5 | CS | Chip select |
| D4 | IRQ | Interrupt |
| VIN | 5V | Power |
| GND | GND | Common ground |
Supported Platforms
- ESP32
- Arduino-class boards with SPI
- STM32 and other ARM MCUs
- Raspberry Pi via SPI
- Any microcontroller with a stable SPI interface
Initialization Method
- Install Arduino IDE and ESP32 board support.
- Install the ST25R3916 library ZIP / sample package.
- Open the sample sketch
testingCode_LEDor equivalent test sketch. - Verify the board / port / upload speed settings.
- Upload the sketch, open Serial Monitor at 115200, and test with a nearby tag.
Example Test Workflow
# Arduino IDE baseline test flow
1. Install ESP32 board package
2. Install ST25R3916 sample library ZIP
3. Open testingCode_LED
4. Verify sketch
5. Upload to ESP32
6. Open Serial Monitor at 115200
7. Tap a tag and watch UID output
Libraries and Resources
Reading Performance Highlights
Under ELECHOUSE test conditions with the on-board PCB antenna, the ST25R3916 module showed strong performance across multiple tag families:
- NTAG213 / NTAG216: about 6.5 cm
- FeliCa: about 5.0 cm
- MIFARE DESFire: about 2.8 cm
- ISO 15693 ICODE SLI-S: about 9.5 cm
- ISO 15693 ICODE SLIX2: up to 11.0 cm
Actual distance varies with tag type, orientation, shielding, and surrounding metal.
Common Errors
- No serial output: wrong COM / serial port or wrong baud rate.
- Sketch compiles with warnings: some library warnings may be harmless if upload and runtime behavior are correct.
- No LED blink / no UID: re-check CS and IRQ first, then MOSI / MISO / SCLK.
- Weak reading distance: tag is too far away, orientation is poor, or there is strong nearby interference.
Troubleshooting
- Start with the provided LED / UID detection example before building a full application.
- Keep the tag within close range during first tests.
- Double-check MOSI / MISO are not swapped.
- Confirm your ESP32 is in normal run mode and Serial Monitor is set to 115200 baud.
Version Differences / Positioning
- Compared with PN532, ST25R3916 usually offers stronger high-performance reader behavior and longer ISO 15693 range.
- Compared with PN7160 / PN7161, ST25R3916 focuses on SPI-hosted high-performance reading rather than NCI 2.0 Linux / Android workflows.
Update History
- 2026-04-05: First public ST25R3916 documentation page published.
- Reference basis: ELECHOUSE product page performance table and SPI test guide.
Supported Protocols Detail
| Protocol | Standard | Typical Tag / Card | Read | Write | Card Emulation |
|---|---|---|---|---|---|
| MIFARE Classic | ISO 14443A | 1K / 4K key fobs | ✓ | ✓ | — |
| MIFARE DESFire EV1/EV2 | ISO 14443A | Secure access cards | ✓ | ✓ | — |
| NTAG 213/215/216 | ISO 14443A | NFC stickers, wristbands | ✓ | ✓ | — |
| ISO 14443B | ISO 14443B | Bank cards, ID cards | UID | — | — |
| FeliCa | ISO 18092 / JIS 6319 | Suica, Octopus | ✓ | ✓ | — |
| ISO 15693 / NFC-V | ISO 15693 | ICODE SLI, ICODE SLIX2, industrial | ✓ | ✓ | — |
| NFC Forum Type 4 emulation | ISO 14443A | NDEF HCE | — | — | Active load modulation |
Arduino / ESP32 Code Example — Read UID
#include <SPI.h>
#include "ST25R3916.h" // include ST25R3916 library
#define SS_PIN 5
#define IRQ_PIN 4
ST25R3916 rfid(SS_PIN, IRQ_PIN);
void setup() {
Serial.begin(115200);
SPI.begin();
rfid.begin();
Serial.println("ST25R3916 ready");
}
void loop() {
if (rfid.readPassiveTargetID()) {
Serial.print("UID: ");
for (int i = 0; i < rfid.uidLength; i++) {
Serial.print(rfid.uid[i], HEX);
Serial.print(" ");
}
Serial.println();
delay(1000);
}
}
Reading ISO 15693 Tags
The ST25R3916 provides longer reading distance on ISO 15693 tags compared with PN532. This makes it well-suited for industrial label reading and asset tracking.
// ISO 15693 inventory / scan (library-dependent, conceptual example)
rfid.iso15693Inventory(); // returns list of tag UIDs in field
Under ELECHOUSE test conditions, ICODE SLIX2 tags were readable at up to 11.0 cm, significantly exceeding typical PN532 ISO 14443 read range.
Card Emulation
The ST25R3916 supports NFC Forum Type 4 card emulation via active load modulation. This can be used to emulate smart cards in testing, access control proof-of-concept, or HCE (Host Card Emulation) scenarios when integrated with a host processor.
