Volver a las guías

Por qué una tarjeta DESFire no muestra registros NDEF en tu teléfono

Una tarjeta DESFire es una caja de herramientas, no una etiqueta NDEF lista para usar. Descubre qué estructura espera el teléfono y cómo arreglar una lectura vacía.

Publicado

Respuesta corta

Tu teléfono no muestra registros NDEF porque la tarjeta no tiene datos NDEF con la estructura que los teléfonos buscan. Una tarjeta MIFARE DESFire es una caja de herramientas con aplicaciones y archivos. Solo parece una etiqueta NDEF cuando alguien la prepara así. Esta guía es para tarjetas que son tuyas, como una DESFire en blanco que compraste para un proyecto.

Por qué el teléfono no ve nada

DESFire EV1 es compatible con el formato Type 4 del NFC Forum, pero solo aloja una aplicación NDEF una vez que se ha configurado. Las notas de WakDev sobre DESFire EV1 indican que, para leer y escribir NDEF en NFC Tools, la tarjeta debe estar formateada antes como Type 4.

Las tarjetas pensadas para otros usos, como control de acceso o transporte, llevan sus propias aplicaciones y ninguna de NDEF. El teléfono detecta la tarjeta y luego no encuentra nada que pueda interpretar como un mensaje. Para saber qué puede y qué no puede hacer cada plataforma con estas tarjetas, consulta qué pueden leer iPhone y Android de una tarjeta DESFire.

Cómo es una estructura que el teléfono puede leer

Un ejemplo de la comunidad, en un hilo del foro de Dangerous Things, muestra las piezas:

  • Una aplicación con AID 000001 y nombre DF D2760000850101, el nombre estándar de la aplicación NDEF.
  • El archivo 01 con ISO ID E103, de 15 bytes: el contenedor de capacidades (CC).
  • El archivo 02 con ISO ID E104, de 2000 bytes: el propio archivo NDEF.
  • Derechos de acceso libres, de modo que no hace falta ninguna clave para leer.

El teléfono selecciona la aplicación NDEF, lee el CC, averigua qué archivo contiene el mensaje y después lee ese archivo. Si falla cualquier paso, obtienes una lectura vacía.

Las causas más habituales

No hay contenedor de capacidades

El código de lectura de referencia de libfreefare analiza el CC para encontrar un NDEF File Control TLV (etiqueta 04) y así localizar el archivo NDEF y su tamaño máximo. En el hilo del foro mencionado, el archivo CC tuvo que escribirse antes de que un registro NDEF funcionara.

Una longitud incorrecta o cero

Los dos primeros bytes del archivo NDEF son la longitud del mensaje, conocida como NLEN. El lector de libfreefare lee primero esos dos bytes, se detiene si la longitud más dos supera el tamaño máximo y después lee esa cantidad de bytes. Una longitud cero significa un mensaje vacío, y una longitud errónea provoca una lectura fallida.

Un mensaje mal formado

En el mismo hilo, una carga de prueba corta se leyó sin problema en NFC Tools, mientras que una más larga no. Eso apunta a los bytes del mensaje y no a los ajustes de la tarjeta. Comprueba entre sí la cabecera del registro, la longitud de la carga y el valor de NLEN.

Identificadores distintos en tarjetas antiguas

Las etiquetas DESFire de versión 0 usan identificadores distintos a los de EV1 y posteriores. El lector de libfreefare usa el AID 0xEEEE10 y el archivo CC 0x03 para la versión 0, y el AID 0x000001 y el archivo CC 0x01 en el resto. Una herramienta escrita para una estructura puede pasar por alto la otra.

Particularidades de versión y del iPhone

En el iPhone, el Info.plist de una app puede incluir un identificador de aplicación para Core NFC. Un ingeniero de Apple explicó en una respuesta del foro de desarrolladores que incluir D2760000850101 hace que el sistema trate la etiqueta como ISO 7816. Si lo omites, obtienes un NFCMiFareTag, donde los comandos nativos se envían con sendMiFareCommand. ¿Estás creando una app? Elige el modo que corresponda a cómo hablas con la tarjeta. ¿Estás eligiendo generación de tarjeta? Cómo se diferencian DESFire EV2 y EV3 también merece una mirada.

Cómo arreglarlo

  1. Confirma qué hay en la tarjeta. Una app lectora que muestre los datos en bruto de la etiqueta, como NFCore, te dice si el teléfono ve algún NDEF.
  2. Formatea la tarjeta como Type 4 con una herramienta compatible con DESFire. Normalmente hacen falta las claves de la tarjeta. Una tarjeta en blanco de fábrica suele usar claves por defecto. Una tarjeta con claves de otro sistema no es tuya para reformatear.
  3. Escribe primero un mensaje de prueba corto, como unos pocos caracteres de texto. Si se lee, pasa a cargas más largas.
  4. Si un mensaje más largo falla, comprueba entre sí NLEN, la cabecera del registro y el CC.

Hazlo solo con tarjetas que sean tuyas. Reformatear una tarjeta de un sistema de transporte, de tu empleador o de un edificio no funcionará, y no es algo que se deba intentar.

Conclusión

Una lectura NDEF vacía en una tarjeta DESFire casi siempre significa que falta la estructura NDEF o que está incompleta, no que la tarjeta esté rota. Revisa por este orden la aplicación NDEF, el archivo CC, el archivo NDEF y una longitud correcta, y prueba con un mensaje corto.

Preguntas frecuentes

¿Está rota mi tarjeta DESFire si el teléfono no muestra registros NDEF?

Normalmente no. La mayoría de las tarjetas DESFire se entregan para control de acceso o transporte, con sus propias aplicaciones y sin aplicación NDEF. El teléfono no está fallando: simplemente no hay datos NDEF en la estructura que busca.

¿Puedo escribir una URL en una tarjeta DESFire como en una pegatina NTAG?

No directamente. Una NTAG tiene un mapa de memoria fijo, mientras que DESFire necesita que antes se creen una aplicación y archivos. Una herramienta que formatee la tarjeta como Type 4 se encarga de ese paso, siempre que tengas las claves de la tarjeta.

¿Por qué se lee un mensaje de prueba corto pero uno más largo no?

Eso apunta a los bytes del mensaje, no a los ajustes de la tarjeta. En un caso de la comunidad, una carga corta se leyó bien mientras que una más larga no, lo que encaja con una longitud incorrecta o un mensaje mal formado.