RFID experiments with the touchatag

Required Linux packages

I use Ubuntu 10.04 for my RFID setup. Packages in use:
libccid
pcscd
pcsc-tools
libpcsclite1
libpcsclite-dev

The driver

The default pcsc driver dislikes the touchatag reader in recent versions, giving the following output when run with pcscd -d -f :
08188882 hotplug_libusb.c:477:HPAddHotPluggable() Adding USB device: 005:022
00000056 ifdhandler.c:364:IFDHGetCapabilities() tag: 0xFAF, usb:0b97/7772:libusb:007:003 (lun: 0)
00000019 readerfactory.c:515:RFSetReaderName() Support 16 simultaneous readers
00000023 ifdhandler.c:364:IFDHGetCapabilities() tag: 0xFAD, usb:0b97/7772:libusb:007:003 (lun: 0)
00000016 readerfactory.c:195:RFAddReader() Driver is thread safe
00000018 readerfactory.c:1024:RFInitializeReader() Attempting startup of ACS ACR122U PICC Interface 01 00 using /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so
00000017 readerfactory.c:741:RFLoadReader() Reusing already loaded driver for /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so
00000063 readerfactory.c:877:RFBindFunctions() Loading IFD Handler 3.0
00000065 ifdhandler.c:82:IFDHCreateChannelByName() lun: 10000, device: usb:072f/2200:libusb:005:022
00001708 ccid_usb.c:285:OpenUSBByName() Manufacturer: Ludovic Rousseau (ludovic.rousseau@free.fr)
00000803 ccid_usb.c:295:OpenUSBByName() ProductString: Generic CCID driver
00000667 ccid_usb.c:301:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
00042283 ccid_usb.c:501:OpenUSBByName() Found Vendor/Product: 072F/2200 (ACS ACR122U PICC Interface)
00000009 ccid_usb.c:503:OpenUSBByName() Using USB bus/device: 005/022
00000006 ccid_usb.c:859:ccid_check_firmware() Firmware (1.00) is bogus! Upgrade the reader firmware or get a new reader.
00000019 ifdhandler.c:104:IFDHCreateChannelByName() failed
00000008 readerfactory.c:1050:RFInitializeReader() Open Port 200001 Failed (usb:072f/2200:libusb:005)
00000006 readerfactory.c:233:RFAddReader() ACS ACR122U PICC Interface init failed.
The solution is to fetch the version from the manufacturer: the ACR122U drivers from the manufacturer ACS version 1.0.1 is slow, version 1.0.2 'beta' is ok. After compiling and installing acsccid you need to edit the descriptionfile of the libccid drivers (Ubuntu stores the original in /etc/libccid_Info.plist, other systems may have different places referred to in the output above).

patch to not use libccid drivers for the touchatag

*** libccid_Info.plist.before	2010-12-02 19:52:52.000000000 +0100
--- libccid_Info.plist	2010-12-27 18:58:46.000000000 +0100
***************
*** 161,167 ****
  		0x046A
  		0x046A
  		0x072f
- 		0x072F
  		0x0b97
  		0x0b97
  		0x0D46
--- 161,166 ----
***************
*** 294,300 ****
  		0x005B
  		0x0070
  		0x90cc
- 		0x2200
  		0x7762
  		0x7772
  		0x3001
--- 293,298 ----
***************
*** 427,433 ****
  		Cherry SmartBoard XX1X
  		Cherry SmartTerminal XX1X
  		ACS ACR 38U-CCID
- 		ACS ACR122U PICC Interface
  		O2 Micro Oz776
  		O2 Micro Oz776
  		KOBIL KAAN Base
--- 425,430 ----

Actually doing something

Requires for example nfc-utils, part of nfc-tools. Download nfc-utils, compile (requires libpcsclite-dev), install. This gives you utils like nfc-list which are nice for a first test.

Finding UIDs

$ nfc-list
nfc-list use libnfc 1.3.9 (r609)
Connected to NFC reader: ACS ACR122U 00 00 / ACR122U102 - PN532 v1.4 (0x07)
1 ISO14443A passive target(s) was found:
    ATQA (SENS_RES): 00  44  
       UID (NFCID1): 04  ac  12  91  21  25  80  
      SAK (SEL_RES): 00  

0 Felica (212 kbps) passive target(s) was found.

0 Felica (424 kbps) passive target(s) was found.

0 ISO14443B passive target(s) was found.
I indeed had tikitag/touchatag 04AC1291212580 on the reader.

RFIDIOt

I haven't been able to get the RFID IO Tools to work in my setup. I keep running into errors like:
koos@machiavelli:~/src/RFIDIOt-1.0a$ ./cardselect.py
cardselect v0.1l (using RFIDIOt v1.0a)
  Reader: PCSC ACS ACR122U 00 00

    PCSC Communications Error
Exception AttributeError: AttributeError("'NoneType' object has no attribute 'disconnect'",) in <<bound method PCSCCardConnection.__del__ of <smartcard.pcsc.PCSCCardConnection.PCSCCardConnection instance at 0x95bb92c>> ignored

Links


Comments about this page and updates are welcome. E-mail is the preferred contact method.
Koos van den Hout e-mail: koos+website@idefix.net
Other webprojects: Camp Wireless The Virtual Bookcase