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.
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
000001y nombre DFD2760000850101, el nombre estándar de la aplicación NDEF. - El archivo
01con ISO IDE103, de 15 bytes: el contenedor de capacidades (CC). - El archivo
02con ISO IDE104, 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
- 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.
- 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.
- Escribe primero un mensaje de prueba corto, como unos pocos caracteres de texto. Si se lee, pasa a cargas más largas.
- 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.