PN7150 NFC Controller: NXP's NCI-Based Controller
The PN7150 is NXP's production-grade nfc-controller designed for Linux-based embedded systems and Android-compatible hardware. Unlike the PN532, which uses a proprietary TFI protocol, the PN7150 implements the NFC ControllerNFC ControllerDedicated IC managing NFC protocol stack in readers/smartphonesView full → Interface (NCI) standard — the same interface used by integrated NFC controllers in smartphones. Its nfc-antenna and matching network design follow the same iso-14443 and iso-15693 physical layer standards as all NFC ForumNFC ForumIndustry body developing NFC standards, specifications, and certifications since 2004View full →-compliant devices.
PN7150 vs PN532 Architecture
| Feature | PN7150 | PN532 |
|---|---|---|
| Host interface | I2C only (400 kHz) | I2C / SPI / UART |
| Protocol stack | NCI 1.1 (standard) | Proprietary TFI |
| NDEF library | Linux libnfc-nci or Android NFC HAL | Adafruit, nfcpy |
| Card emulation | Full NCI CE (CE-A, CE-B, CE-F) | Limited via tgInitAsTarget |
| Secure element | External SE interface (SWP) | None |
| HCE support | Yes (via Linux/Android HCE) | No |
| Supply voltage | 3.3 V (1.8 V I/O) | 3.3 V |
| Cost | ~$10–20 (module) | ~$5–15 |
| Best fit | Linux SBC, industrial Android | Arduino, Raspberry Pi |
NCI Architecture Overview
The NCI (NFC Controller Interface) specification defines a standardised command/response/notification protocol between the NFC controller IC and the host processor. This standardisation means the PN7150 can be driven by:
- Android NFC HAL (for Android-based products)
- libnfc-nci (NXP's open-source Linux stack)
- Custom NCI host implementation (for RTOS embedded systems)
NCI commands flow as 3-byte headers followed by variable-length payloads:
[MT|GID] [OID] [Length] [Payload...]
MT: Message Type (Command/Response/Notification)
GID: Group ID (Core, RF, NFCEE, Proprietary)
OID: Opcode ID
Hardware Integration
The PN7150 is available as a bare IC (HVQFN40 package) or as a pre-certified module (OM27150CDK, OM5578). The module includes the antenna circuit and simplifies RF design.
Minimum connections (bare IC):
| PN7150 Pin | Signal | Notes |
|---|---|---|
| VDD_IO | 1.8 V | Level of I2C signals |
| VDD | 3.3 V | Core supply |
| GND | GND | |
| SDA | I2C data | 4.7 kΩ pull-up to VDD_IO |
| SCL | I2C clock | 4.7 kΩ pull-up to VDD_IO |
| IRQ | Host interrupt | Active-high, signals data ready |
| VEN | Enable | Pull high to enable; toggle low for reset |
The IRQ line is critical — the PN7150 drives it high when an NCI notification or response is ready. Without IRQ handling, you must poll, which increases latency significantly.
Linux Setup with libnfc-nci
NXP provides libnfc-nci and a companion Linux SE service on GitHub:
# Install dependencies
sudo apt install libpcsclite-dev libtool autoconf automake
# Clone and build NXP Linux stack
git clone https://github.com/NXPNFCLinux/linux_libnfc-nci
cd linux_libnfc-nci
./configure --prefix=/usr
make && sudo make install
Configure the I2C device in linux_libnfc-nci/conf/libnfc-nci.conf:
NCI_TRANSPORT=I2C
I2C_DEV=/dev/i2c-1
I2C_ADDR=0x28
Test with the included NFC demo:
nfcDemoApp poll # Poll for any tag
nfcDemoApp write # Write NDEF to tag
Raspberry Pi Integration
On Raspberry Pi 4/5 with Raspberry Pi OS:
- Connect PN7150 module to GPIO: SDA→GPIO2, SCL→GPIO3, IRQ→GPIO25, VEN→GPIO24
- Enable I2C and configure device tree overlay:
# /boot/config.txt
dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=2,i2c_gpio_scl=3
- Verify I2C detection:
i2cdetect -y 1 # Should show 0x28 (PN7150 default address)
Android HAL Integration
For Android-based products using the PN7150:
- NXP provides a reference Android NFC HAL at
hardware/nxp/nfc/in AOSP - The HAL communicates with the PN7150 via I2C using NCI protocol
- Enable in
device.mk:
PRODUCT_PACKAGES += [email protected]
- Device-specific configuration in
libnfc-nxp.confhandles timing, proprietary extensions, and SE routing tables.
Card Emulation (HCE) Setup
Unlike the PN532, the PN7150 supports full Host Card Emulation through the NCI NFCEE interface. Configure the CE routing table to direct RF activations to the host processor:
NCI Command: RF_SET_LISTEN_MODE_ROUTING_CMD
Entry 1: Protocol-based routing — ISO-DEP → HCE_HOST
Entry 2: Technology-based routing — NFC-A → HCE_HOST
On Linux this is handled by libnfc-nci's routing manager. On Android it is managed by the NFC service via NfcRoutingTable.
PN7150 vs PN7160 (Successor)
| Feature | PN7150 | PN7160 |
|---|---|---|
| NCI version | 1.1 | 2.0 |
| Secure element interface | SWP | SWP + eSE direct |
| WLC (Wireless Charging) | No | Yes |
| NFC-V read rangeread rangeMaximum communication distance between reader and tagView full → improvement | Standard | +20% |
| Production status | Mature | Current (2024) |
For new designs starting in 2024+, evaluate the PN7160 for its NCI 2.0 support and WLC capability.
Use the Chip Selector to compare the PN7150 against other NFC controller ICs for your target platform, and the Compatibility Checker to verify tag-type support across the NFC protocol stack.