• Python version 2.6 or newer (but not Python 3)
  • Python usb1 module to access USB devices through libusb
  • Python serial module to access serial (incl. FTDI) devices
  • Python docopt module for some of the example programs

Supported Devices

The contactless devices known to be working with nfcpy are listed below with the device path column showing the full path argument for the nfc.clf.ContactlessFrontend.open() method or the --device option that most example programs support. The testbed column shows the devices that are regularly tested with nfcpy.

Manufacturer Product NFC Chip Device Path Testbed Notes
Sony RC-S330 RC-S956 usb:054c:02e1 Yes [1]
Sony RC-S360 RC-S956 usb:054c:02e1 Yes [1]
Sony RC-S370 RC-S956 usb:054c:02e1 No [1]
Sony RC-S380/S Port100 usb:054c:06c1 Yes [2]
Sony RC-S380/P Port100 usb:054c:06c3 No [2]
Sony Board PN531v4.2 usb:054c:0193 Yes [3]
Philips/NXP Board PN531v4.2 usb:04cc:0531 Yes [3]
Identive SCL3710 PN531 usb:04cc:0531 No [4]
ACS ACR122U PN532v1.4 usb:072f:2200 Yes [5]
ACS ACR122U PN532v1.6 usb:072f:2200 Yes [5]
Stollmann Reader PN532v1.4 tty:USB0:pn532 Yes [6]
Adafruit Board PN532v1.6 tty:AMA0:pn532 Yes [7]
Identive SCL3711 PN533v2.7 usb:04e6:5591 Yes [8]
Identive SCL3712 PN533 usb:04e6:5593 No [9]
SensorID StickID PN533v2.7 usb:04cc:2533 Yes [10]
Arygon ADRA PN531v4.2 tty:USB0:arygon Yes  
[1](1, 2, 3) The Sony RC-S330, RC-S360, and RC-S370 are in fact identical devicess, the difference is only in size and thus antenna.
[2](1, 2) The only known difference between RC-S380/S and RC-S380/P is that the RC-380/S has the CE and FCC certification marks for sales in Europe and US.
[3](1, 2) This is a reference board that was once designed by Philips and Sony and has a hardware switch to select either the Philips or Sony USB Vendor/Product ID. The chip can only handle Type A and Type F technology.
[4]This device is supported as a standard PN531. It has been reported to work as expected but is not part of regular testing.
[5](1, 2) While the ACR122U internally uses a PN532 contactless chip the functionality provided by a PN532 can not be fully used due to an additional controller that implements a USB-CCID interface (for PC/SC) towards the host. It is possible using PCSC_Escape commands to unleash some functionality but this this is not equivalent to directly accessing a PN532. It is not recommended to buy this device for use with nfcpy.
[6]The path shown is for Ubuntu Linux in case the reader is the first UART/USB bridge found by the OS. Also on Windows OS the path is slightly different (com:COM1:pn532).
[7]This is sold by Adafruit as “PN532 NFC/RFID Controller Breakout Board” and can directly be connected to a serial port of, for example, a Raspberry Pi (the device path shown is for the Raspberry Pi’s UART, when using a USB/UART bridge it would be usb:USB0:pn532). Note that the serial link speed is only 115200 baud when connected at /dev/ttyAMA0 while with a USB/UART bridge it may be up to 921600 baud (on Linux the driver tries to figure this out).
[8]The SCL3711 has a relatively small antenna that winds around the circuitry and may be the reason for less superior performance when operating as a target in passive communication mode (where the external field must be modulated).
[9]The SCL3712 has been reported to work but is not available for regular testing.
[10]The SensorID USB stick is a native PN533. It has no EEPROM attached and thus uses the default NXP Vendor/Product IDs from the ROM code. Absence of an EEPROM also means that the firmware uses default RF settings.

Functional Support

The following table summarizes the functional support level of the supported devices. Identical devices are aggregated under one of the product names. Only testbed devices are covered. In the table an x means that the function is supported by hardware and software while an o means that the hardware would support but but the software not yet implemented. More information about individual driver / hardware restrictions can be found in the nfc.clf documentation.

Tag Read/Write Tag Emulation Peer2Peer
1 2 3 4A 4B 1 2 3 4A 4B I T ac
RC-S380 x x x x x o x o x x
RC-S956 x x x x o o x x
PN533 x x x x x o x o x x x
PN532 x x x x x o x o x x x
PN531 x x x o o x x x
ACR122U x x x x x

General Notes

  • Testbed devices are verified to work with the latest stable nfcpy release. Test platforms are Ubuntu Linux (usually the latest version), Raspbian (with Raspberry Pi 2 Model B), and Windows (currently a Windows 7 virtual machine). No tests are done for MAC OS X because of lack of hardware.
  • All device architectures with a PN532 or PN533 suffer from a firmware bug concerning Type 1 Tags with dynamic memory layout (e.g. the Topaz 512). With nfcpy version 0.10 this restriction could be removed by directly adressing the Contactless Interface Unit (CIU) within the chip.
  • The ACR122U is not supported as P2P Target because the listen time can not be set to less than 5 seconds. It can not be overstated that the ACR122U is not a good choice for nfcpy.

Implementation Status

Specification Status
TS NFC Digital Protocol 1.1 implemented
TS NFC Activity 1.1 implemented
TS Type 1 Tag Operation 1.2 implemented
TS Type 2 Tag Operation 1.2 implemented
TS Type 3 Tag Operation 1.2 implemented
TS Type 4 Tag Operation 3.0 implemented
TS NFC Data Exchange Format 1.0 except chunking
TS NFC Record Type Definition 1.0 implemented
TS Text Record Type 1.0 implemented
TS URI Record Type 1.0 implemented
TS Smart Poster Record Type 1.0 implemented
TS Signature Record Type not implemented
TS Logical Link Control Protocol 1.3 implemented
TS Simple NDEF Exchange Protocol 1.0 implemented
TS Connection Handover 1.2 implemented
TS Personal Health Communication 1.0 implemented
AD Bluetooth Secure Simple Pairing implemented