Cartões RFID e o Módulo MFRC522 | Modulo Eletrônica

Cartões RFID e o Módulo MFRC522

Publicado: 15/08/2019

O foco desse texto é o controle de acesso através do módulo MFRC522 que utiliza etiquetas – mais conhecidas como tags – presentes em cartões e chaveiros do tipo RFID (Radio-Frequency Identificaton ou identificação por radio frequência) do tipo MIFARE.

MIFARE é uma marca de propriedade da empresa NXP Semiconductors. Para mais informações acesse > https://www.nxp.com/ .

Atualmente, com os cartões RFID são feitos os famosos crachás de acesso, largamente utilizados em empresas de todos os segmentos e tamanhos.

Esse é o primeiro de três artigos que explicam com detalhes como o RFID funciona, o uso do módulo MFRC522, o protocolo de comunicação adotado e a biblioteca <MFRC522.h>. 

RFID (Radio-Frequency Identification)

É comum encontrar cartões e chaveiros RFID que possuem etiquetas (”tags”) especiais internas. Cada etiqueta ou tag RFID é composta por um chip RFID e uma antena. O chip RFID contém a interface de RF (radio frequência) e vários blocos funcionais, com destaque para a EEPROM, uma memória interna na qual os dados são lidos e gravados.

Figura 1: Tags RFID Mifare

Os sistemas MIFARE – muito usados com o Arduino – operam na frequência de 13,56 MHz e funcionam para distâncias de até 10 cm. As capacidades de memória EEPROM mais comuns dos sistemas MIFARE são de 1K bytes, 2 K bytes e 4 K bytes e tem uma organização própria, como mostrado na tabela 1 abaixo.



Tabela 1: Organização da EEPROM de chips MIFARE

As memórias EEPROM de 1KB contêm 16 setores, sendo 4 blocos por setor. Os chips MIFARE de 2KB são compostos por 32 setores, onde cada setor é composto por 4 blocos. Por sua vez, as memórias de 4KB são divididas em 40 setores, alguns com 4 blocos e outros com 16 blocos.

Nos cartões MIFARE Classic a estrutura de memória é dividida da seguinte forma: “Manufacturer Block” (bloco do fabricante), “Data Blocks” (blocos de dados) e “Sector Trailer”.

O “Manufacturer Block” é o primeiro bloco do primeiro setor, reservado para armazenar informações do fabricante. Cada cartão ou chaveiro RFID MIFARE tem a sua identificação única (UID – Unique Identifier) que é gravada durante a fabricação do mesmo, podendo ser de 4 ou 7 bytes, e não pode ser modificada.

Os três primeiros blocos de cada setor (0, 1 e 2) são para armazenamento de dados (exceto o bloco 0 do setor 0), podendo ser configurados como “read/write blocks” ou “value blocks”. Os “read/write blocks” são blocos para leitura e escrita de dados. Já os “value blocks” foram destinados ao uso em sistemas que envolvem contagem de crédito, pois também oferecem as funções de incremento e decremento de valores, além de restauração e transferência.

O último bloco de cada setor é chamado de “Sector Trailer” e armazena as chaves de acesso (Key A e Key B) aos demais blocos daquele setor, além das condições de acesso de cada bloco daquele setor. Em outras palavras, para acesso aos blocos dos setores será necessário fazer a autenticação usando as chaves de acesso mencionadas.

Módulo MFRC522

O módulo MFRC522 contem em sua placa o CI de mesmo nome, produzido pela empresa NXP Semiconductors, para estabelecer comunicação com uma frequência de 13,56 MHz, permitindo a leitura e escrita sem contato (“contactless”) em cartões que seguem o padrão MIFARE.


Figura 2: Módulo MFRC522 para Arduino


Em nosso projeto vamos ligar o módulo MFRC522 ao Arduino e para isso será utilizada a biblioteca <MFRC522.h>. O módulo MFRC522 é alimentado com 3,3 Volts da placa do controlador Arduino. A comunicação entre o Arduino e o MFRC522 é feita através do protocolo SPI (Serial Peripheral Interface).

SPI (Serial Peripheral Interface)

De uma forma geral, os dispositivos eletrônicos se comunicam enviando bits de dados através de fios fisicamente conectados entre esses dispositivos. Os bits são transferidos de um dispositivo para outro através de mudanças rápidas (ou pulsos) na voltagem. No Arduino, que opera com +5 Volts, um bit 0 é comunicado com um pulso curto de 0 Volt e um bit 1 é comunicado por um pulso curto de +5 Volts.



Figura 3: Exemplo de comunicação serial síncrona com transmissão do binário 0100 0011.


Na comunicação serial síncrona – que é o caso do protocolo SPI – os bits são enviados através de um único fio também chamado de linha de dados e se utiliza um sinal de Clock. A comunicação SPI considera uma relação mestre/escravo (master/slave). O master é o dispositivo controlador (Arduino), enquanto que o slave, geralmente um sensor, display ou memória, recebe instruções do controlador. A velocidade máxima de transmissão é de 10 Mbps (Megabits por segundo).

Figura 4: Comunicação SPI

Os sinais presentes na comunicação SPI são os seguintes:

MOSI (Master Output/Slave Input): Linha para o master enviar dados para o dispositivo slave.

MISO (Master Input/Slave Output): Linha para o dispositivo escravo enviar dados para o master.

SCK (Serial Clock): Linha de sinal de Clock.

SS ou CS (Slave Select ou Chip Select): Linha para o master selecionar o dispositivo slave.

No módulo MFRC522 operando como slave, o pino de Slave Select (SS) será o SDA. Em linhas gerais, os passos da comunicação SPI são os seguintes:

O Master (Arduino) envia o sinal de Clock;

O Master (Arduino) coloca a linha SS (SDA no MFRC522) em 0 Volt para ativar a seleção do slave (MFRC522);

O Master (Arduino) envia dados (sequência de bits) através da linha MOSI e o slave (MFRC522) lê/recebe os bits transmitidos;

Se uma resposta é necessária, o slave (MFRC522) retorna dados (sequência de bits) para o Master (Arduino) através da linha MISO e o Master (Arduino) lê/recebe os bits transmitidos.

Nosso próximo passo será entender como podemos ler o conteúdo de um cartão ou chaveiro RFID. Faremos isso usando o programa pronto chamado DumpInfo que pode ser encontrado na lista de exemplos do IDE.

Figura 5: Acessando o programa DumpInfo no IDE


Basta abrir a pasta Examples > MFRC522 > DumpInfo e carregar o programa no Arduino. Com esse sketch será possível ler o conteúdo de cartões e chaveiros RFID e assim obter a UID de cada um.

Figura 6: Leitura de um cartão RFID usando o DumpInfo.


Evidentemente, o módulo MFRC522 deve estar conectado ao Arduino, exatamente como no esquema da figura 2 e ilustrado na figura 7.

Figura 7: Modulo MFRC522 conectado ao Arduino


Foram utilizados 2 cartões e 2 chaveiros em nosso experimento. Rodando o sketch DumpInfo e aproximando os cartões e chaveiros do leitor (módulo MFRC522) foi possível identificar o UID dessas quatro “tags”, como apresentado na tabela 2.

Tabela 2: UID de cartões e chaveiros RFID

Bem, agora que sabemos ler a UID de uma “tag” será possível usar essa informação em sketches para controlar o acesso através da leitura dos cartões e chaveiros RFID. Mas isso será tema de nossos próximos artigos.

Quando você fizer a sua montagem deverá encontrar valores diferentes que serão específicos aos cartões e chaveiros RFID que estiver usando. Lembre que as “tags” RFID devem ser do padrão MIFARE.

Não deixe de enviar suas perguntas em caso de dúvidas. Bem, é isso aí, até a próxima!



Voltar