Skip to content

Choosing a desktop reader

Martin Paljak edited this page Apr 29, 2021 · 10 revisions

This mini-howto is for connecting 13.65MHz Type A or B ISO 14443-4 devices to a desktop PC with a USB reader, not applicable to other RFID standards or frequencies

The main standard for smart card readers on Desktop computers is PC/SC (also used by javax.smartcardio in Java).

As a software API (vs a wire protocol) it is important to have PC/SC drivers for your device and preferrably a device with a standardized wire protocol - which for USB devices is CCID - to not need vendor drivers at all and use the CCID driver bundled with your operating system (Windows, macOS or Linux).

Thus, searching for the known reader list of the free and open source CCID driver for Linux and macOS might be a good start.

Proprietary features (reading Mifare Classic, RF protocol tweaks etc) of contactless readers are often accessed via pseudo-APDUs sent either via SCardControl (direct to readers) or SCardTransmit (to a powered card). To access low level features - if supported by the reader device - please check the specification and/or user manual of the device for further assistance.

Reader issues debugging: macOS(X)

Create sysreport.sh containing the following:

#!/bin/bash

exec > sysreport.txt 2>&1
uname -a
sw_vers
/usr/sbin/system_profiler SPHardwareDataType
java -version
/usr/sbin/system_profiler SPUSBDataType
ls -lR /usr/local/libexec/SmartCardServices /usr/libexec/SmartCardServices

Run bash sysreport.sh and send the resulting sysreport.txt

Clone this wiki locally