Obsługa czytnika kart Mifare

img_4897Jakiś czas temu opisywaliśmy na blogu jak podłączyć czytnik kart 125 kHz do Arduino za pomocą interfejsu UART. Dziś artykuł w podobnej tematyce lecz tym razem weźmiemy na warsztat czytnik kart Mifare komunikujący się z mikrokontrolerem za pomocą magistrali SPI.

 

 

Co będzie nam potrzebne?

Będziemy potrzebowali kontrolera, który obsłuży czytnik np. Arduino, Teensy lub Raspberry Pi oraz samego czytnika. W tym artykule będę opisywał wszystkie czynności, które musimy wykonać w oparciu o Teensy 3.2, jednak na Arduino będzie wyglądało to niemalże identycznie. Opcjonalnie możemy dodać też diodę z rezystorem, która zasygnalizuje nam odczyt karty.

Jak podłączyć?

Na początku jedna bardzo ważna uwaga. Czytnik, którego używamy pracuje na napięciu zasilania 3.3V i w żadnym wypadku nie toleruje on 5V z Arduino lub pinu Vin Teensy podłączonego przez USB.

Rzućmy okiem na pinout Teensy na tej stronie. Piny oznaczone kolorem zielonym to magistrala SPI. Pozwolę sobie krótko omówić nazewnictwo użyte na stronie pjrc.

  • CS – Chip Select (występuje też pod nazwą SS lub SDA)
  • DOUT – Data Output (najczęściej spotykane pod nazwą MOSI czyli Master Output Slave Input)
  • DIN – Data Input (najczęściej spotykane pod nazwą MISO czyli Master Input Slave Output)
  • SCK – Serial Clock – sygnał zegarowy magistrali

Teraz już wszystko staje się jasne :) Wystarczy że podłączymy czytnik kart do Teensy wg. następującego schematu (po lewej nazwa pinu na czytniku kart, po prawej numer pinu Teensy):

  • SDA – 10 (CS)
  • SCK – 13 (SCK)
  • MOSI – 11 (DOUT)
  • MISO – 12 (DIN)
  • GND – GND
  • RST – 9
  • 3.3V – Vin

Ja dodałem jeszcze czerwonego LED’a na pinie 14, który będzie sygnalizował odczyt karty.

Obsługa czytnika od strony programistycznej

Najprościej o działaniu czytnika możemy się przekonać wgrywając szkic DumpInfo z przykładów z zakładki MFRC522 (musimy najpierw wgrać tę bibliotekę https://github.com/miguelbalboa/rfid). Nie musimy w szkicu nic zmieniać, wystarczy wgrać i otworzyć port szeregowy.

Możemy też wgrać mój prosty szkic, który wypisuje same adresy na port szeregowy i odczytuje ich do 30 (liczba ustawiona na sztywno. Nic nie stoi na przeszkodzie, żeby dostosować kod do własnych potrzeb). Porównując te adresy możemy zrobić np. zamek na smartcardy lub urządzenia elektryczne załączane kartą (z pomocą modułu przekaźnika). W zestawie z czytnikiem dostajemy kartę i breloczyk zbliżeniowy, ale możemy też spróbować użyć innych kart, które mamy pod ręką. Z tych, które mam w portfelu udało się odczytać legitymację studencką i kartę na punkty z freshmarketu. Poniżej przedstawiam jak prezentuje się w działaniu złożony układ.

img_4893 img_4900 img_4904