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.
Related Pages
- ST25R3916 Product Page
- PN532 vs PN7160 vs ST25R3916
- Best NFC Module for Arduino
- Best NFC Module for Raspberry Pi / Linux
Raspberry Pi Wiring (SPI)
| ST25R3916 Pin | Raspberry Pi | Notes |
|---|---|---|
| MOSI | Pin 19 (MOSI / GPIO10) | SPI data to module |
| MISO | Pin 21 (MISO / GPIO9) | SPI data from module |
| SCLK | Pin 23 (SCLK / GPIO11) | SPI clock |
| CS | Pin 24 (CE0 / GPIO8) | Chip select |
| IRQ | Pin 22 (GPIO25) | Interrupt (any free GPIO) |
| 5V | Pin 2 or 4 (5V) | Power supply |
| GND | Pin 6 | Common ground |
Enable SPI with sudo raspi-config → Interface Options → SPI. The ST25R3916 can be accessed from Python using the spidev library or from C/C++ using STM’s ST25R3916 Linux library.
When to Choose ST25R3916
The ST25R3916 is a high-performance NFC reader chip. Compared to the PN532 and PN7160, its main advantages are:
- Longer ISO 15693 range — up to 11 cm on ICODE SLIX2 under test conditions, significantly more than PN532
- Active load modulation (ALM) — enables more reliable card emulation by actively driving the modulation signal instead of relying on passive loading
- Higher receiver sensitivity — important in noisy RF environments or when the tag is partially shielded
- SPI interface — direct SPI connection without NCI firmware layer, simpler integration on MCUs without I2C
The ST25R3916 is the right choice for demanding applications: long-range ISO 15693 asset tracking, payment terminal prototyping, high-performance access control, or any scenario where you need maximum RF performance from a compact module.
If you do not need extended range or ALM, the PN532 V4 or PN7160 offer simpler software stacks and broader library support for general-purpose NFC use.
Raspberry Pi Python Example
import spidev
import RPi.GPIO as GPIO
IRQ_PIN = 25 # GPIO25, Pin 22
CS_PIN = 8 # CE0
GPIO.setmode(GPIO.BCM)
GPIO.setup(IRQ_PIN, GPIO.IN)
spi = spidev.SpiDev()
spi.open(0, 0) # bus 0, device 0 (CE0)
spi.max_speed_hz = 4000000
spi.mode = 0b00
# ST25R3916 register read: set bit 6 for read, bits 5:0 for address
def read_reg(addr):
cmd = [0x40 | (addr & 0x3F), 0x00]
resp = spi.xfer2(cmd)
return resp[1]
chip_id = read_reg(0x2F) # IC Identity register
print(f"ST25R3916 chip ID: 0x{chip_id:02X}") # expect 0x09 or 0x0A
spi.close()
This example reads the IC identity register to confirm SPI communication. A full NFC polling implementation requires ST NFC library or a community driver.
Low Power Card Detection Modes
The ST25R3916 supports three hardware-level low power card detection (LPCD) techniques, making it ideal for battery-powered or always-on applications:
| Mode | How It Works | Best For |
|---|---|---|
| Capacitive sensing | Detects change in antenna capacitance when a card approaches | Very low power; no RF field needed |
| Amplitude detection | Briefly turns on RF, measures load amplitude | Reliable detection of most card types |
| Phase detection | Briefly turns on RF, measures phase shift | Accurate detection even with metal nearby |
These modes allow the ST25R3916 to sleep between polling cycles and wake the host MCU only when a card is detected — dramatically reducing average power consumption in idle state.
EMVCo 3.0 Compliance
The ST25R3916 is fully compliant with EMVCo 3.0 analog and digital standards. This means it can be used in payment terminal applications and enables fast EMVCo 3.0 certification even in harsh RF environments (near LCD displays, switching power supplies, etc.).
EMVCo compliance is relevant if your project involves contactless payment reading, transport ticketing systems, or any application that must interoperate with bank cards and mobile payment credentials (Apple Pay, Google Pay, Samsung Pay).
Supply Voltage Flexibility
The ST25R3916 operates from a wide supply range:
- 2.4V to 5.5V (−20°C to +105°C)
- 2.6V to 5.5V (−40°C to +105°C)
- IO voltage: 1.65V to 5.5V (compatible with 3.3V and 1.8V logic MCUs)
The ELECHOUSE ST25R3916 module provides 5V input with on-board regulation, simplifying power supply design.
ST25R3916 vs PN532 vs PN7160 — Technical Comparison
| Feature | ST25R3916 | PN7160 | PN532 |
|---|---|---|---|
| RF Output Power | High (direct antenna drive) | Medium | Medium |
| ISO 15693 speed | Up to 53 kbps | Standard | ✗ Not supported |
| EMVCo 3.0 | ✓ Certified | Partial | ✗ |
| LPCD modes | 3 (capacitive, amplitude, phase) | Basic | Basic |
| Card emulation ALM | ✓ Active Load Modulation | Passive only | ✓ (passive) |
| Interface | SPI only | I2C only | SPI / I2C / UART |
| Arduino library | Community / ST library | Electroniccats | Large ecosystem |
