Saltar al contenido principal

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.

nota

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.

nota

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 nRF52840Seeed Studio XIAO nRF52840 Plus
Seeed Studio XIAO nRF52840 SenseSeeed Studio XIAO nRF52840 Sense Plus
tip

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

ElementoVersión / Notas
Arduino IDE1.8.x o posterior
Seeed nRF52 Boards1.1.13 (instalar mediante Arduino IDE Boards Manager)
XIAO_nRF52840_NFC LibraryDescargar desde GitHub, instalar mediante Sketch > Include Library > Add .ZIP Library (ver abajo)
App NFC ToolsAndroid / 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:

Antenna soldered to XIAO front view

Vista trasera:

Antenna soldered to XIAO back view

precaución
  • 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.

tip

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

ElementoValor fijoFuente
Frecuencia de funcionamiento f13.56 MHzEstándar NFC global, codificado por hardware en el nRF52840
Impedancia de carga100 Ω (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:

Impedance formula

Objetivo: 90–120 Ω, cuanto más cerca de 100 Ω, mejor.

ResultadoSignificadoSiguiente paso
< 60 ΩAntena demasiado pequeñaAñade espiras o agranda el área de la bobina
90 – 120 ΩAPTOVe al Paso 2
> 150 ΩAntena demasiado grandeQuita 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:

Capacitance formula

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ámetroValor
TipoBobina NFC de 13.56 MHz
Resistencia en CC~2.3 Ω
ConexiónSuelda directamente a NFC1 / NFC2
nota

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íaEjemplo de sketchPropósito
Verificaciónxiao-nrf52840-nfc-probeComprobar la configuración de pines UICR + verificar el enlace RF
xiao-nrf52840-nfc-restore-uicrRestaurar los pines NFC si se cambiaron a GPIO
Corrección Plusxiao-nrf52840-plus-bootloader-verifyVerificar el bootloader en variantes Plus antes de restaurar el UICR
Demostraciónxiao-nrf52840-nfc-tag-readonlyEtiqueta de solo lectura: el teléfono lee una URL fija
xiao-nrf52840-nfc-tag-writableEtiqueta grabable: el teléfono puede escribir datos en la etiqueta
xiao-nrf52840-nfc-tag-persistentEtiqueta 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 UICRSignificadoAcción
0xFFFFFFFFModo de antena NFC ✅Continúa con el Paso 2
0xFFFFFFFEModo 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
nota

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:

ContadorSignificadoCriterio de aprobación
FIELD_DETECTCampo RF de 13.56 MHz del teléfono detectado> 0
FIELD_LOSTCampo RF desaparecidoCercano a FIELD_DETECT
READER_FRAMESTramas de comandos NFC recibidas desde el teléfono> 0 (crítico)

READER_FRAMES > 0 significa 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 errorNombreSignificado
0x01FRAMEDELAYTIMEOUTTiempo de espera de trama agotado: la etiqueta no recibió el siguiente comando dentro del intervalo esperado
0x02NFCANTENNAERRORNFCT no puede excitar la antena: normalmente causado por desajuste de impedancia o ausencia de antena
0x80Error de recepción de trama RXTrama 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.

Antena soldada y ventana emergente NFC del teléfono

Indicadores clave:

ContadorSignificadoCriterio de aprobación
FIELD_DETECTCampo RF de 13.56 MHz del teléfono detectado> 0
SELECTEDEl teléfono completó el flujo de anticolisión + apretón de manos SELECT> 0 (indicador principal)
READEl teléfono leyó correctamente las páginas de datos NDEF> 0
FAST_READNúmero de solicitudes FAST_READ recibidas0 o pequeño (normal)
UNSUPPORTEDEl teléfono envió un comando no compatibleUnos pocos es normal

SELECTED > 0 es el umbral clave: el flujo de anticolisión se completó y el teléfono reconoció la etiqueta Tipo 2. READ > 0 significa 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.

nota

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:

ContadorSignificadoCriterio de aprobación
FIELD_DETECTCampo RF de 13.56 MHz del teléfono detectado> 0
SELECTEDEl teléfono completó el flujo de anticolisión + apretón de manos SELECT> 0 (indicador principal)
READEl teléfono leyó correctamente las páginas de datos NDEF> 0
WRITEEl teléfono escribió correctamente datos en la etiqueta> 0 (indicador principal)
FAST_READNúmero de solicitudes FAST_READ recibidas0 o pequeño (normal)
WRITE_REJECTEDIntentos de escritura rechazados (páginas protegidas)0 (nunca debería ocurrir con apps estándar)
UNSUPPORTEDEl teléfono envió un comando no compatibleUnos pocos es normal

WRITE > 0 es el umbral clave para la etiqueta grabable: el teléfono escribió correctamente datos en la etiqueta. WRITE_REJECTED siempre debería ser 0 — si aumenta, algo salió mal durante la sesión de escritura.

nota

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 flash en 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 flash confirma que cada escritura se guardó en la Flash.

nota

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).

nota
  • 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_TAG en 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.
tip

Resumen de las tres demos:

DemoAlmacenamiento de datosSobrevive al ciclo de alimentaciónEscribible por teléfono
Etiqueta de solo lecturaRAM
Etiqueta escribibleRAM
Etiqueta persistenteFlash

Recursos

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.

Loading Comments...