ST25R3916 Documentation

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

  1. Use the module over SPI. This board is built around the high-performance STMicroelectronics ST25R3916 NFC reader IC.
  2. Wire the board to your host MCU using MOSI, MISO, SCLK, CS, IRQ, 5V, and GND.
  3. Install the ST25R3916 Arduino sample / library package referenced in the test document.
  4. Open the test sketch, compile, upload, and watch Serial Monitor at 115200 baud.
  5. 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

  1. Install Arduino IDE and ESP32 board support.
  2. Install the ST25R3916 library ZIP / sample package.
  3. Open the sample sketch testingCode_LED or equivalent test sketch.
  4. Verify the board / port / upload speed settings.
  5. 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

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
Shopping Cart