PN7150 NFC Controller Guide
NXP's Next-Gen NCI-Based Controller
Guide to the NXP PN7150 NCI-compliant NFC controller for embedded systems covering NCI protocol, Linux drivers, and Android HAL.
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 Controller 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 Forum-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 range 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.
See Also
Frequently Asked Questions
Our guides cover a range of experience levels. Getting Started guides are written for beginners with no prior NFC knowledge. Programming guides target developers integrating NFC into mobile apps or embedded systems. Security guides are for engineers designing secure NFC deployments for payments, access control, or authentication.
Most guides require only an NFC-enabled smartphone (iPhone 7+ or any modern Android device) and a few NFC tags (NTAG213 or NTAG215 recommended for beginners, available for under $1 each). Advanced guides may reference USB NFC readers like the ACR122U or Proxmark3 for development and testing.
Yes. Programming guides include code examples for Android (Kotlin/Java with the Android NFC API), iOS (Swift with Core NFC), and web-based tools (Web NFC API for Chrome on Android). All code samples are tested and include inline comments explaining each step.