Leer, grabar, o emular tags NFC con Arduino y PN532 Deja un comentario

El PN532 es un chip NFC que podemos conectar a un procesador como Arduino para leer y escribir tarjetas NFC, comunicarse con móviles, o incluso actuar como tag NFC. Es un integrado ampliamente utilizado en todo tipo de dispositivos comerciales que implementan NDC.

Recordar que el NFC, es un superset del RFID, que es un sistema de comunicación inalámbrica. El NFC añade funciones de seguridad, especialmente la limitación del rango de lectura de escritura al rango de 50-100mm.

El NFC se ha popularizado como sistema de comunicación debido a su mayor seguridad y a la posibilidad de actuar como Peer-to-Peer, es decir, que un dispositivo NFC puede actuar tanto como receptor. Esto ha propiciado que dispositivos como los smartphone incorporen un chip NFC, tanto para leer tarjetas, como para actuar como tag en servicios, por ejemplo, de autentificación o pago.

La comunicación es muy sencilla, ya que podemos comunicarnos a través de SPI, I2C o HSU (High Speed UART). El PN532 opera 3.3V, pero dispone de conversión de nivel por lo que es posible conectarlo con un procesador de 5V.

PUBLICIDAD: Encarga tus propias PCBs a media en PCBWAY

El PN532 es un poco más caro que el MIFARE RC522, pero también es un dispositivo muy superior a este. Aun así, es un dispositivo asequible. Podemos encontrarlo por unos 3.5€ en vendedores internacionales de AliExpress o Ebay.

El PN532 incluye un procesador 80C51 con 40 KB ROM y 1 KB RAM, junto con los elementos necesarios para hacer funcionar correctamente la comunicación NFC. Los módulos Maker disponibles incluyen una antena en la propia PCB.

Soporta 6 modos de operación:

  • ISO/IEC 14443A/MIFARE Lector/Grabador.
  • ISO/IEC 14443A/MIFARE Card MIFARE Classic 1K y MIFARE Classic 4K Card.
  • ISO/IEC 14443B Lector/Grabador.
  • FeliCa Lector/Grabador.
  • FeliCa Card emulación.
  • ISO/IEC 18092, ECMA 340 Peer-to-Peer

Las distancias típicas de actuación son de 50mm para lectura y escritura, y 100mm para emulación. La velocidad de lectura es de hasta 212 kbits/s y la de escritura de hasta 424kbts/s. Estos valores dependen, entre otros, de la antena integrada en el módulo. En los módulos Maker el alcance típico es 30mm a 50mm.

El PN532 opera a 3.3V pero admite tensiones de alimentación de 2.7V a 5.4V. Las líneas de comunicación I2C/UART funcionan a 3.3V a 24V TTL. Sin embargo, el interface SPI funciona a 3.3, pero incorpora resistencias de 100 Ohm en serie de forma que también puede ser conectado a 5V.

El consumo es de 100mA en modo Stand-By y 120mA durante la lectura y escritura. Adicionalmente dispone de dos modos de baja energía, uno modo Soft-Power-Down con un consumo de 22uA, y un modo Hard-Power-Down con un consumo de 1uA.

El PN532 también puede ser usado con ordenadores y micro ordenadores como Rasperry Pi con la librería libnfc.

Formato NDEF (NFC Data Exchange Format)

El NFC Data Echange Format (NDEF) es una forma estandarizada de intercambiar información entre dispositivos NFC compatibles. El formato NDEF es usado para almacenar información de intercambio, como por ejemplo URIs, texto plano, etc.

Un mensaje NDEF está formado por dos componentes, messages y records. Un mensaje está formado por uno o varios records. Cada uno de los records consta de un tipo de records, un ID y los propios datos en si (payload), junto con los campos de longitud de cada uno de los anteriores.

Las tags NFC como las tarjetas Mifare Classic pueden ser configuradas como tags NDEF. Los mensajes NDEF también pueden ser usados para intercambiar datos entre dos dispositivos NFC activos (modo Peer-to-Peer)

El estándar es mantenido por el NFC Forum, y está disponible para su consulta de forma gratuita, previa aceptación de las condiciones de licencia.

EL PN532 puede conectarse tanto por I2C, por SPI o UART. El interface de comunicación se elige mediante unos Jumper ubicados en la placa.

Conexión por I2C

La conexión por I2C sería la siguiente

Que vista desde Arduino quedaría así.

Conexión por SPI

Por su parte, la conexión mediante SPI es la siguiente

Que vista desde Arduino queda así,

Conexión por SPI

Finalmente, la conexión mediante HSU (High Speed UART) es la siguiente

Que vista desde Arduino quedaría así,

 

Los pines I2C y SPI indicados son válidos para los modelos de Arduino Uno, Nano y Mini Pro. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.

Para programar el PN532 usaremos la librería desarrollada por Adafruit disponible en este enlace. Esta librería únicamente permite trabajar con comunicación I2C y SPI, pero no UART.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. Los siguientes ejemplos son modificaciones a partir de los disponibles en la librería.

Mostrar datos y UID

En este ejemplo mostramos los datos del lector PN532, y de los tag que acerquemos.

Grabar datos

En este ejemplo vemos cómo grabar datos en la memoria de un tag.

Leer datos

En este ejemplo vemos cómo leer datos previamente grabados en la memoria de un tag.

Comprobar UID

En este ejemplo validamos si una tarjeta es válida comprobando su UID.

Comprobar datos

En este ejemplo validamos si una tarjeta es válida comprobando datos que hemos grabado previamente.

Emular un tag

Para emular un tag (NFC Type 4) podemos usar la librería de Seed-Studio disponible en este enlace. La librería dispone de un ejemplo que muestra la emulación de un tag. No obstante, la funcionalidad real es limitada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?