Płytka wymaga Raspberry Pi Rev2. o rozmieszczeniu sygnałów GPIO-P1 przedstawionym w tabeli 1. Dla potrzeb współpracy domyślnie jest używany interfejs UART, wspierany przez bibliotekę libnfc. Możliwe jest też zastosowanie interfejsu I²C. Dla ułatwienia współpracy z innymi komputerkami (oprócz Raspberry Pi) płytka ma złącze EH w standardzie Arduino.
Moduł jest oparty o popularny układ PN532 firmy NXP. Odpowiada on za kompleksową obsługę kart zbliżeniowych Mifare, umożliwiając szybkie i łatwe wykonanie urządzeń NFC. Schemat blokowy układu pokazano na rysunku 1.
Schemat modułu NFC przedstawia rysunek 2. Moduł nie odbiega od noty aplikacyjnej NXP. Rezonator kwarcowy X1 jest elementem układu zegarowego, rezystory R3 i R6, kondensatory C6, C7, C11 i C16 dopasowują antenę i stanowią filtr EMC. Pozostałe kondensatory filtrują zasilanie. Antenę L wykonano na płytce drukowanej. Ułatwia to uruchomienie modułu uwalniając od konieczności nawijania cewek antenowych. Niestety, jest okupione nieco mniejszą dobrocią ograniczającą zasięg do ok. 3 cm w przypadku kart i 1 cm w przypadku żetonów.
Do komunikacji z Raspberry jest wykorzystywany interfejs UART. Aby nie ograniczać użyteczności pozostawiono także możliwość komunikacji poprzez I²C. Wyboru interfejsu dokonuje się za pomocą zwór SSEL/SSEL1/SSEL2, zgodnie z opisem umieszczonym na płytce. Dodatkowo, interfejs komunikacyjny wyprowadzono na złącze "I²C" zgodne z Arduino.
Moduł jest zasilany z 5 V. Należy pamiętać o konieczności dopasowania poziomów logicznych interfejsu w zależności od współpracującego układu, gdyż PN532 pracuje z napięciem 3,3 V. Moduł ma sygnalizację załączenia zasilania za pomocą diody świecącej LD1 oraz diodę LD2 sterowaną z GPIO4, która może być użyta do sygnalizacji działania NFC.
Układ zmontowano na niewielkiej, dwustronnej płytce drukowanej. Jej schemat montażowy pokazano na rysunku 3. Montaż nie wymaga opisu, należy tylko zwrócić uwagę na prawidłowe przylutowanie pada termicznego U1 oraz odpowiednie wlutowanie zwór SSEL/SSEL1/SSEL2 w zależności od używanego interfejsu komunikacyjnego (domyślnie UART).
Aby w praktyce najszybciej sprawdzić działanie modułu konieczne są drobne zmiany konfiguracji PI oraz instalacja biblioteki libnfc. W pierwszej kolejności musimy uzyskać dostęp do portu szeregowego, który jest domyślnie zablokowany przez terminal SSH. W tym celu należy otworzyć do edycji plik cmdline.txt ( $ sudo nano /boot/cmdline.txt) i usunąć wpisy dotyczące konsoli console=ttyAMA0,115200 kgdboc=ttyAMA0,115200. Następnie należy otworzyć do edycji plik initab ($ sudo nano / etc/initab) i opatrzyć komentarzem linię T0:23respawn:/sbin/getty -L ttyAMA0 115200 vt100 (#T0:23respawn:/sbin/getty -L ttyAMA0 115200 vt100). Po wprowadzeniu zmian, należy zrestartować Raspberry.
Po tej operacji port szeregowy UART jest dostępny dla innych aplikacji. Aby wykorzystać płytkę NFC jest konieczna jeszcze instalacja darmowej biblioteki libnfc (najnowsza wersja 1.7.1), do pobrania z: http://goo.gl/3qIidU. Bibliotekę należy pobrać i rozpakować do folderu domowego Pi /home/pi/libnfc-1.7.1. Następnie należy stworzyć katalog dla plików konfiguracyjnych sudo mkdir /etc/nfc && sudo mkdir /etc/nfc/devices.d/ oraz edytować zawartość sudo nano /etc/nfc/devices.d/pn532_via_uart.conf uzupełniając zawartość pliku:
## Typical configuration file for PN532 board
name = "NFC PN532 UART"
connstring = pn532_uart:/dev/ttyAMA0
allow_intrusive_scan = true
log_level = 3
Następnie należy wydać polecenia:
cd /etc/nfc
sudo nano libnfc.conf
i uzupełnić zawartość pliku:
# Allow device auto-detection (default: true)
# Note: if this auto-detection is disabled, user has to set manually a device
# configuration using file or environment variable allow_autoscan = true
# Allow intrusive auto-detection (default: false)
# Warning: intrusive autodetection can seriously disturb other devices
# This option is not recommended, user should prefer to add manually his device.
#allow_intrusive_scan = false
# Set log level (default: error)
# Valid log levels are (in order of verbosity): 0 (none), 1 (error), 2 (info), 3 (debug)
# Note: if you compiled with --enable-debug option, the default log level is "debug"
#log_level = 1
# Manually set default device (no default)
# To set a default device, you must set both name and connstring for your device
# Note: if autoscan is enabled, default device will be the first device available in device list.
#device.name = "microBuilder.eu"
#device.connstring = "pn532_uart:/dev/ttyAMA0"
Po zapisaniu plików konfiguracyjnych jest konieczne skompilowanie biblioteki z wcześniej ustalonymi parametrami. Należy wrócić do katalogu /home/pi/libnfc-1.7.1 i wydać polecenie konfigurujące driver dla UART sudo ./configure --sysconfdir= /etc --prefix=/usr --with-drivers=pn532_uart oraz uruchomić sudo make clean all i sudo make install all.
Po pomyślnym zakończeniu pracy kompilatora wracamy do podkatalogu biblioteki /home/pi/libnfc-1.7.1 ( cd /utils) i wydajemy polecenie sudo ./nfc-list. Jeżeli wszystkie wcześniejsze operacje przebiegły pomyślnie i moduł jest zmontowany poprawnie, czytnik kart zostanie zainicjowany, następnie przechodzimy do katalogu cd ../examples i wydajemy polecenie sudo ./nfc-poll.
Program będzie oczekiwał na kartę, po zbliżeniu zostanie odczytany jej numer. Przykładowy odczyt pokazano na rysunku 4. Jeżeli wszystko funkcjonuje poprawnie, czytnik może być użyty we własnej aplikacji.
Adam Tatuś, EP