Obsługa modułu RFID MFRC522

1. Wstęp

Moduł czytniko-programatora RFID zbudowanego w oparciu o układ RC522 obsługuje karty zgodne ze standardem ISO/IEC 14443 A/MIFARE,MF1xxS20, MF1xxS70, MF1xxS50. Komunikacja między kartą a modułem odbywa się na częstotliwości 13,56MHz. Maksymalny zasięg modułu wynosi około 50mm.
Układ zasilany jest napięciem stałym 3,3V jednak linie danych tolerują napięcie 5V.
Komunikacja może odbywać się za pośrednictwem magistrali I2C lub SPI.

Opracowanie zawiera sposób podłączenia MFRC522 do portu SPI mikrokontrolera PIC18F4550 (zasilanego napięciem 3,3V). Kod programu (rozdziału 4) oraz biblioteki (rozdział 5) zostały przepisane z języka C dla Arduino na CCS dla mikrokontrolerów PIC firmy Microchip.

2. Wyprowadzenia

Rys.1. Wyprowadzenia uC.

 

tab.1. Wyprowadzenia modułu i uC oraz pełnione funkcje.

Moduł RC522 uC PIC18F4550 Opis
SDA (pin20) RD1 Set Slave – wybór układu (chipSelectPin)
SCK (pin34) SCK SCK/CLK (zegar)
MOSI (pin26) SDO SDO/MOSI (out)
MISO (pin33) SDI SDI/MISO (in)
RQ
GND (pin12) VSS Uziemienie
RST (pin19) RD0 Reset (NRSTPD)
3.3V (pin11) VDD Zasilanie 3.3V

 

3. Schemat połączeń

Rys.2. Schemat połączeń.

 

4. Kod programu

#include <18F4550.h> 
#fuses INTRC_IO,NOMCLR,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B4, rcv=PIN_B3, bits=9,parity=N, errors) 

#define  _NRSTPD PIN_D0//reset
#define  _chipSelectPin PIN_D1//SetSlave

//tryby spi
#define SPI_MODE_0  (SPI_L_TO_H | SPI_XMIT_L_TO_H) 
#define SPI_MODE_1  (SPI_L_TO_H) 
#define SPI_MODE_2  (SPI_H_TO_L) 
#define SPI_MODE_3  (SPI_H_TO_L | SPI_XMIT_L_TO_H) 
// 

#include "rf_ardu.c"

//////////////program glowny//////////////////////////
void main() {
    setup_spi(SPI_MASTER|SPI_MODE_3);
    
    init(); //inicjacja modulu rfid
    delay_ms(300);
    
    printf("uC dziala poprawnie!\n");
    
    while(true){
        printf("Czekam na karte... \n");
        delay_ms(100);
        if (isCard()) {
             printf("Karta wykryta\n");
            // jesli karta wykryta odczyt seriala
            if (readCardSerial()==1){
                printf("Serial: %d:%d:%d:%d:%d:%d \n",serNum[0],serNum[1],serNum[2],serNum[3],serNum[4],serNum[5]);
            }      
        }
        
    }
}

5. Odnośniki

Biblioteki:

  • rf_ardu.c – biblioteka obsługująca moduł MFRC522,
  • address.c – definicje adresów MFRC522 (odwołuje się do nich biblioteka rf_ardu).