Uso de NFC en Seeed Studio XIAO nRF52840 (Sense)
Ambas series Seeed Studio XIAO nRF52840 están equipadas con un módulo NFC (Near Field Communication) basado en el periférico NFCT (Near Field Communication Tag) integrado del nRF52840. Es compatible con la funcionalidad de etiqueta NFC Tipo 2. Al conectar una antena NFC externa, el XIAO nRF52840 puede actuar como una etiqueta NFC y ser leído por teléfonos inteligentes y otros lectores NFC.
Este wiki te guía a través de todo el flujo de trabajo de uso de NFC: desde la instalación de la biblioteca, la conexión de hardware y el ajuste de la antena, hasta la verificación de la configuración y la creación de tu propia etiqueta NFC.
Este tutorial se basa en la biblioteca XIAO_nRF52840_NFC. La versión 1.1.13 de Seeed nRF52 Boards ha sido probada y aprobada.
Trabajo preparatorio
Para la instalación de las bibliotecas de placas, consulta este tutorial para terminar de instalar las Seeed nRF52 Boards. Si ya las has instalado, podemos continuar.

Asegúrate de seleccionar la placa Seeed XIAO nRF52840 en el Boards Manager. La biblioteca antigua "Seeed nRF52 mbed-enabled Boards" ya no se mantiene y no debe utilizarse.
Hardware necesario
| Seeed Studio XIAO nRF52840 | Seeed Studio XIAO nRF52840 Plus |
|---|---|
![]() | ![]() |
| Seeed Studio XIAO nRF52840 Sense | Seeed Studio XIAO nRF52840 Sense Plus |
![]() | ![]() |
La funcionalidad NFC básica funciona solo con la antena soldada a NFC1/NFC2. Después de las pruebas de la comunidad (agradecimientos especiales a andriandreo del foro de Seeed), ambas antenas siguientes funcionaron inmediatamente después de soldarlas, sin necesidad de un ajuste adicional del circuito:
- MOLEX 1462360051
- TAOGLAS FXR.07.A.DG
Más tarde, añadimos dos condensadores de 43 pF de sintonía desde cada pad NFC (D14, D15) a GND para la TAOGLAS FXR.07.A.DG para mejorar aún más la distancia de interrogación. El valor del condensador de ~40 pF se calculó a partir del subapartado "6.14.10 NFCT antenna recommendations" en la hoja de datos de especificaciones del producto del MCU nRF52840.
Si experimentas un comportamiento inestable (ventanas emergentes incompletas, detección intermitente), añadir condensadores de adaptación mejorará significativamente la fiabilidad. Consulta Antenna Tuning para más detalles.
Para obtener más información de pruebas en el mundo real, consulta el debate original en el foro.
Software necesario
| Elemento | Versión / Notas |
|---|---|
| Arduino IDE | 1.8.x o posterior |
| Seeed nRF52 Boards | 1.1.13 (instalar mediante Arduino IDE Boards Manager) |
| XIAO_nRF52840_NFC Library | Descargar desde GitHub, instalar mediante Sketch > Include Library > Add .ZIP Library (ver abajo) |
| App NFC Tools | Android / Apple |
Instalación de la biblioteca XIAO_nRF52840_NFC
Esta biblioteca no está incluida en el Arduino Library Manager: debes instalarla manualmente desde GitHub.
- Paso 1. Ve al repositorio de GitHub XIAO_nRF52840_NFC, haz clic en el botón verde Code y selecciona Download ZIP.

- Paso 2. Abre Arduino IDE, ve a Sketch > Include Library > Add .ZIP Library....

-
Paso 3. Selecciona el archivo ZIP descargado (
XIAO_nRF52840_NFC-main.zip). Deberías ver "Library added to your libraries" en la barra de estado. -
Paso 4. Reinicia Arduino IDE. Después de reiniciar, deberías ver los ejemplos en File > Examples > XIAO_nRF52840_NFC.

Conexión de hardware
Los pines NFC del XIAO nRF52840 se encuentran en la parte posterior de la placa, etiquetados como P0.09 y P0.10:
D14 (P0.09) — NFC1 — Antenna end A
D15 (P0.10) — NFC2 — Antenna end B
Suelda la antena NFC a P0.09 y P0.10 como se muestra a continuación:
En este tutorial, utilizamos el Seeed Studio XIAO nRF52840 con una antena NFC recomendada por Nordic para la demostración.
Vista frontal:

Vista trasera:

- La antena NFC es una señal diferencial y no tiene polaridad: cualquiera de los extremos puede ir a D14 o D15.
- Los dos pines se envían de fábrica en modo de antena NFC (UICR =
0xFFFFFFFF) en XIAO nRF52840 y XIAO nRF52840 Sense. En XIAO nRF52840 Plus y XIAO nRF52840 Sense Plus, pueden estar configurados como GPIO por defecto: comprueba primero el UICR (consulta el Paso 1). - Se recomienda medir la resistencia en CC a través de los terminales de la antena con un multímetro antes de soldar (normalmente 1–3 Ω) para confirmar la continuidad y descartar cortocircuitos.
Sintonización de antena
NFC se basa en un circuito resonante de tanque LC. La bobina de la antena proporciona la inductancia (L) y los condensadores de adaptación proporcionan la capacitancia (C). Juntos forman un circuito resonante a la frecuencia objetivo:
f = 1 / (2π√(LC))
El objetivo es 13.56 MHz. Sin condensadores externos, solo participa la capacitancia parasitaria interna de ~4 pF del nRF52840: el punto de resonancia queda muy lejos de 13.56 MHz. La función NFC seguirá funcionando, pero la comunicación puede ser inestable: en el teléfono pueden aparecer ventanas emergentes con el mensaje "NFC tag detected" sin mostrar todo el contenido, y pueden aparecer códigos de error en la salida serie. Al añadir condensadores de adaptación, el circuito tanque LC entra en resonancia y la fiabilidad mejora drásticamente.
Todas las operaciones siguientes se basan en el documento Nordic Official NFC Antenna Design. El chip entrega toda la potencia solo cuando ve una carga diferencial de 100 Ω en resonancia.
Parámetros fijos
| Elemento | Valor fijo | Fuente |
|---|---|---|
| Frecuencia de funcionamiento f | 13.56 MHz | Estándar NFC global, codificado por hardware en el nRF52840 |
| Impedancia de carga | 100 Ω (diferencial) | White paper de Nordic nWP_026 |
Medidas necesarias
- Inductancia de la bobina L: mídela con un multímetro, medidor LCR o VNA a 100 kHz, valor en µH.
- Resistencia de pérdidas de la bobina R: lee la resistencia serie en la misma pantalla, en Ω.
Paso 1: Comprobación previa de impedancia
Usando la fórmula de transformación de impedancia:

Objetivo: 90–120 Ω, cuanto más cerca de 100 Ω, mejor.
| Resultado | Significado | Siguiente paso |
|---|---|---|
| < 60 Ω | Antena demasiado pequeña | Añade espiras o agranda el área de la bobina |
| 90 – 120 Ω | APTO | Ve al Paso 2 |
| > 150 Ω | Antena demasiado grande | Quita espiras o reduce el área de la bobina |
Solo después de pasar esta puerta se calculan los condensadores; de lo contrario, cualquier valor de condensador es inútil.
Paso 2: Calcular la capacitancia de resonancia
Fórmula con 13.56 MHz fijo:

Esto da la capacitancia total necesaria. Para una red en π, divídela en partes iguales:
C1 = C2 = C / 2
Elige el valor E12 más cercano (por ejemplo, 39 pF, 47 pF, 56 pF, 68 pF …).
Antena recomendada
Si no tienes un medidor LCR y prefieres un punto de partida conocido, una antena de bobina NFC estándar de 13.56 MHz funciona bien con la XIAO nRF52840. A continuación se muestra la antena que usamos durante las pruebas:
| Parámetro | Valor |
|---|---|
| Tipo | Bobina NFC de 13.56 MHz |
| Resistencia en CC | ~2.3 Ω |
| Conexión | Suelda directamente a NFC1 / NFC2 |
La antena mostrada arriba no es un producto de Seeed Studio. Puedes usar cualquier antena de bobina NFC de 13.56 MHz con especificaciones similares. Lo clave es medir la inductancia y calcular el valor del condensador de adaptación usando las fórmulas anteriores.
Configuración NFC y ejemplos
El siguiente flujo de trabajo primero verifica la configuración de hardware NFC y luego te guía para crear tu propia etiqueta NFC. Usamos la biblioteca XIAO_nRF52840_NFC, que envuelve el periférico NFCT del nRF52840 en una API de Arduino limpia.
La biblioteca incluye seis ejemplos de sketches:
| Categoría | Ejemplo de sketch | Propósito |
|---|---|---|
| Verificación | xiao-nrf52840-nfc-probe | Comprobar la configuración de pines UICR + verificar el enlace RF |
xiao-nrf52840-nfc-restore-uicr | Restaurar los pines NFC si se cambiaron a GPIO | |
| Corrección Plus | xiao-nrf52840-plus-bootloader-verify | Verificar el bootloader en variantes Plus antes de restaurar el UICR |
| Demostración | xiao-nrf52840-nfc-tag-readonly | Etiqueta de solo lectura: el teléfono lee una URL fija |
xiao-nrf52840-nfc-tag-writable | Etiqueta grabable: el teléfono puede escribir datos en la etiqueta | |
xiao-nrf52840-nfc-tag-persistent | Etiqueta persistente: los datos sobreviven a los ciclos de alimentación (almacenados en Flash) |
Paso 1: Comprobar la configuración de pines UICR
Propósito: Confirmar que P0.09/P0.10 están configurados como pines de antena NFC.
Abre File > Examples > XIAO_nRF52840_NFC > xiao-nrf52840-nfc-probe y súbelo a tu placa. (Los pasos 1 y 2 comparten el mismo sketch: una sola carga hace ambos.)
Abre el Monitor Serie a 115200 baudios. Las primeras líneas muestran el estado actual del UICR:

Cómo interpretar la salida:
| Valor UICR | Significado | Acción |
|---|---|---|
0xFFFFFFFF | Modo de antena NFC ✅ | Continúa con el Paso 2 |
0xFFFFFFFE | Modo GPIO ❌ | Primero sube xiao-nrf52840-plus-bootloader-verify (variantes Plus), luego sube xiao-nrf52840-nfc-restore-uicr, envía RESTORE_NFC en el Monitor Serie, confirma Verify result: PASS y después apaga y vuelve a encender la placa |
XIAO nRF52840 y XIAO nRF52840 Sense salen de fábrica con UICR = 0xFFFFFFFF (modo NFC). En la mayoría de los casos, este paso se supera y no se necesita ninguna acción. XIAO nRF52840 Plus y XIAO nRF52840 Sense Plus pueden salir en modo GPIO; si la salida muestra 0xFFFFFFFE, sigue la acción de restauración que se indica a continuación.
Paso 2: Sonda — Verificar el enlace RF
Propósito: Confirmar que las tramas de comandos NFC del teléfono pueden llegar a la placa.
Después de la comprobación del UICR, el mismo sketch entra automáticamente en modo Probe. En este modo, la etiqueta no responde a ninguna trama: solo escucha. Esto aísla la dirección de recepción y facilita confirmar si el enlace RF está activo.
Coloca la zona NFC de tu teléfono cerca de la antena durante unos segundos y luego comprueba la salida del Monitor Serie:

Indicadores clave:
| Contador | Significado | Criterio de aprobación |
|---|---|---|
FIELD_DETECT | Campo RF de 13.56 MHz del teléfono detectado | > 0 |
FIELD_LOST | Campo RF desaparecido | Cercano a FIELD_DETECT |
READER_FRAMES | Tramas de comandos NFC recibidas desde el teléfono | > 0 (crítico) |
READER_FRAMES > 0significa que las tramas de comandos del teléfono llegaron correctamente a la placa y que el enlace RF bidireccional está establecido. El teléfono no debería mostrar una ventana emergente en esta etapa (el modo Probe no responde).
Códigos de error comunes:
| Código de error | Nombre | Significado |
|---|---|---|
0x01 | FRAMEDELAYTIMEOUT | Tiempo de espera de trama agotado: la etiqueta no recibió el siguiente comando dentro del intervalo esperado |
0x02 | NFCANTENNAERROR | NFCT no puede excitar la antena: normalmente causado por desajuste de impedancia o ausencia de antena |
0x80 | Error de recepción de trama RX | Trama recibida pero la comprobación CRC/paridad falló (puede aparecer en la etapa Readonly) |
Demostración 1: Etiqueta de solo lectura
Propósito: Una etiqueta NFC sencilla que emite una URL fija. El teléfono la lee y muestra una ventana emergente: el caso de uso NFC más común.
Abre File > Examples > XIAO_nRF52840_NFC > xiao-nrf52840-nfc-tag-readonly y súbelo. Coloca tu teléfono sobre la antena durante 2–3 segundos.

El teléfono debería mostrar una ventana emergente que contenga el enlace https://seeedstudio.com.

Indicadores clave:
| Contador | Significado | Criterio de aprobación |
|---|---|---|
FIELD_DETECT | Campo RF de 13.56 MHz del teléfono detectado | > 0 |
SELECTED | El teléfono completó el flujo de anticolisión + apretón de manos SELECT | > 0 (indicador principal) |
READ | El teléfono leyó correctamente las páginas de datos NDEF | > 0 |
FAST_READ | Número de solicitudes FAST_READ recibidas | 0 o pequeño (normal) |
UNSUPPORTED | El teléfono envió un comando no compatible | Unos pocos es normal |
SELECTED > 0es el umbral clave: el flujo de anticolisión se completó y el teléfono reconoció la etiqueta Tipo 2.READ > 0significa que las páginas NDEF se leyeron realmente. La verificación final es que el teléfono muestre la ventana emergente con la URL completa.
La URL está codificada de forma fija en el sketch. Para cambiarla, abre el sketch y modifica el mensaje NDEF, luego vuelve a subirlo. Los datos de la etiqueta se almacenan en la RAM y se perderán después de un ciclo de alimentación.
Demo 2: Etiqueta grabable
Propósito: Una etiqueta NFC que el teléfono puede tanto leer como escribir. La etiqueta comienza con un URI predeterminado (https://seeedstudio.com), y el teléfono puede sobrescribirlo con nuevo contenido NDEF usando la app NFC Tools.
Abre File > Examples > XIAO_nRF52840_NFC > xiao-nrf52840-nfc-tag-writable y súbelo.
Pasos de prueba:
- Paso 1. Abre el Monitor Serie a 115200 baudios. El registro de arranque muestra la identidad de la etiqueta (NFCID1), el volcado de memoria inicial y el URI predeterminado (
https://seeedstudio.com).

El registro de arranque también imprime el URI predeterminado que la etiqueta emitirá:

-
Paso 2. Lee primero la etiqueta con tu teléfono. El teléfono debería detectar
https://seeedstudio.com. -
Paso 3. Abre NFC Tools (o cualquier app de escritura NFC) y escribe en la etiqueta el contenido que quieras. En este ejemplo, escribimos un texto sencillo:
hello!. Después de introducir tu contenido, haz clic en "Write / XX Bytes" — el número de bytes depende de la longitud de tu contenido.

- Paso 4. Vuelve a leer la etiqueta. El teléfono ahora debería mostrar el contenido recién escrito (
hello!).

Después de que el teléfono salga del campo NFC, el Monitor Serie muestra los indicadores clave actualizados que reflejan la sesión completa de lectura después de escritura:

Indicadores clave:
| Contador | Significado | Criterio de aprobación |
|---|---|---|
FIELD_DETECT | Campo RF de 13.56 MHz del teléfono detectado | > 0 |
SELECTED | El teléfono completó el flujo de anticolisión + apretón de manos SELECT | > 0 (indicador principal) |
READ | El teléfono leyó correctamente las páginas de datos NDEF | > 0 |
WRITE | El teléfono escribió correctamente datos en la etiqueta | > 0 (indicador principal) |
FAST_READ | Número de solicitudes FAST_READ recibidas | 0 o pequeño (normal) |
WRITE_REJECTED | Intentos de escritura rechazados (páginas protegidas) | 0 (nunca debería ocurrir con apps estándar) |
UNSUPPORTED | El teléfono envió un comando no compatible | Unos pocos es normal |
WRITE > 0es el umbral clave para la etiqueta grabable: el teléfono escribió correctamente datos en la etiqueta.WRITE_REJECTEDsiempre debería ser0— si aumenta, algo salió mal durante la sesión de escritura.
Los datos escritos se almacenan solo en RAM y se perderán después de un ciclo de alimentación, restaurando el URI predeterminado — lo que facilita realizar pruebas de escritura repetidas. Para datos que necesiten sobrevivir a ciclos de alimentación, usa la demo de Etiqueta persistente de abajo.
Demo 3: Etiqueta persistente
Propósito: Una etiqueta NFC cuyos datos sobreviven a los ciclos de alimentación. El contenido NDEF se almacena en la memoria Flash interna del nRF52840 (LittleFS), por lo que persiste incluso después de apagar y encender de nuevo la placa — ideal para despliegues a largo plazo.
Abre File > Examples > XIAO_nRF52840_NFC > xiao-nrf52840-nfc-tag-persistent y súbelo.
Pasos de prueba:
- Paso 1. En el primer arranque, abre el Monitor Serie a 115200 baudios. El registro de arranque muestra el URI predeterminado y
Storage state: no stored content, using default URI.

-
Paso 2. Lee la etiqueta con tu teléfono. En el primer arranque, el teléfono detecta
https://seeedstudio.com. -
Paso 3. Abre NFC Tools (o cualquier app de escritura NFC) y escribe en la etiqueta un nuevo registro de texto o URL. En este ejemplo, escribimos un texto sencillo:
hi!. Después de introducir tu contenido, haz clic en "Write / XX Bytes" — el número de bytes depende de la longitud de tu contenido.

- Paso 4. Después de que el teléfono salga del campo NFC, el Monitor Serie imprime
Storage: tag content saved to flash, confirmando que el contenido se ha escrito en la Flash interna.

-
Paso 5. Cicla la alimentación de la placa — desconecta el cable USB y vuelve a conectarlo.
-
Paso 6. Después del reinicio, el Monitor Serie imprime
Storage state: previous content restored from flash, confirmando que el contenido escrito ha sobrevivido al ciclo de alimentación.

- Paso 7. Vuelve a leer la etiqueta con tu teléfono. El teléfono debería mostrar el contenido escrito en el Paso 3 — incluso después del ciclo de alimentación.


Indicadores clave:
Los indicadores clave son los mismos que para la etiqueta grabable — consulta la tabla de la etiqueta grabable para ver la lista completa.
Storage state: previous content restored from flashen el registro de arranque es la confirmación principal para la etiqueta persistente: los datos sobrevivieron al ciclo de alimentación.Storage: tag content saved to flashconfirma que cada escritura se guardó en la Flash.
En el Paso 7, el teléfono solo lee el contenido restaurado — no escribe nada. Por lo tanto, WRITE seguirá siendo 0 en los contadores, lo cual es esperado. Solo verás WRITE > 0 durante la sesión de escritura anterior (Pasos 3–4).
- El contenido almacenado reside en el sistema de archivos de la Flash interna (
/nfc-tag-data.bin), separado del área del sketch — sobrevive a nuevas subidas del sketch. - Para restaurar el URI predeterminado en cualquier momento, envía
RESET_TAGen el Monitor Serie. - El guardado en Flash ocurre una vez por sesión de escritura después de que el teléfono sale del campo. Si retiras el teléfono demasiado pronto, el contenido puede quedar incompleto — simplemente vuelve a escribir para corregirlo.
Resumen de las tres demos:
| Demo | Almacenamiento de datos | Sobrevive al ciclo de alimentación | Escribible por teléfono |
|---|---|---|---|
| Etiqueta de solo lectura | RAM | ❌ | ❌ |
| Etiqueta escribible | RAM | ❌ | ✅ |
| Etiqueta persistente | Flash | ✅ | ✅ |
Recursos
- [GitHub] XIAO_nRF52840_NFC Library — La biblioteca NFC de código abierto utilizada en este tutorial
Agradecimientos especiales
Agradecimientos especiales a andriandreo por las exhaustivas pruebas en el mundo real de antenas NFC (MOLEX 1462360051 y TAOGLAS FXR.07.A.DG) en la XIAO nRF52840, y a PJ_Glasso por la guía en el cálculo de condensadores y la resolución de problemas de compatibilidad con iPhone.
Si encuentras problemas con NFC que no se tratan aquí, puedes encontrar consejos útiles en el hilo original del foro:
Soporte técnico y debate sobre productos
Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.



