Audio I2S en Jetson Nano: cómo configurar Raspiaudio Audio+

Para configurar Raspiaudio Audio+ en un Jetson Nano, activa los pines I2S4 en jetson-io, fuerza su modo de audio en cada arranque y conecta I2S4 con el controlador de sonido. El kit de desarrollo Jetson Nano está diseñado para IA y robótica, pero no tiene salida de audio analógica. La placa Raspiaudio Audio+ es una tarjeta de sonido diseñada para Raspberry Pi que también encaja en el conector de 40 pines del Nano.

Esta guía explica todos los pasos en el Jetson Nano B02 (2019). Al terminar, oirás audio desde la salida de auriculares de Audio+.

Masteriza tu tema en segundos
Alcanza -14 LUFS automáticamente. Conserva el carácter de tu tema. Audio listo para streaming que mantiene lo que hace especial a tu música. Directamente desde tu navegador.

Antes de empezar: modelo de Jetson Nano y compatibilidad con Audio+

Configura primero tu Jetson Nano. Si aún no lo has hecho, sigue la guía de configuración de Jetson Nano de NVIDIA. Debes poder arrancar el Nano hasta el escritorio con un monitor y un teclado.

Qué necesitas: un Jetson Nano B02 y una placa Raspiaudio Audio+. El conector de 40 pines de Audio+ encaja directamente sobre el del Nano. Presiónalo con firmeza para que todos los pines hagan contacto.

Esta guía se probó con el kit de desarrollo Jetson Nano B02 (2019), también llamado P3450 (módulo P3448 sobre placa portadora P3449). Puedes reconocer el Jetson Nano por su disipador pasivo (los modelos Jetson más recientes usan ventiladores). El B02 también tiene una fila de pines que sobresale como una pequeña prolongación, que no está en el antiguo modelo A01.

Si tienes el antiguo modelo A01 o un Jetson más reciente, usa esta guía solo como referencia, porque los pasos no se aplican directamente. Puedes compartir tus consejos en la comunidad Raspiaudio.

Otras placas DAC I2S: Audio+ y los DAC similares para Raspberry Pi no tienen interfaz de control, solo una interfaz I2S. Como explica este hilo del foro NVIDIA sobre tarjetas de sonido I2S de Raspberry Pi para Jetson Nano, estas placas deberían funcionar una vez configurados los pines. Por tanto, los pasos siguientes son un buen punto de partida para otros DAC I2S de este tipo en el Nano B02.

Gracias especialmente a jas-mx por la publicación en el foro NVIDIA sobre cómo activar la salida de audio I2S del conector de 40 pines que inspiró esta guía.

Paso 1: activa los pines de audio I2S4 con jetson-io

De forma predeterminada, el Jetson Nano no usa esos pines del conector para audio. Arranca el Nano con un monitor y un teclado, abre un terminal y ejecuta:

sudo /opt/nvidia/jetson-io/jetson-io.py

Se abre una herramienta con menús:

  1. Usa las flechas arriba y abajo para resaltar "Configure Jetson 40pin Header" y pulsa Enter
  2. Selecciona "Configure header pins manually" y pulsa Enter
  3. En la lista de casillas, busca "i2s4" (pines 12, 35, 38, 40) y "audio_mclk" (pin 7). Pulsa Space en cada una para marcarla con un asterisco [*].
  4. Selecciona "Back"
  5. Selecciona "Save pin changes"
  6. Selecciona "Save and reboot to reconfigure pins"

El Jetson Nano se reinicia. La herramienta escribe un árbol de dispositivos personalizado (DTB) que asigna esos pines al audio y lo guarda en /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Paso 2: comprueba que los pines estén en modo I2S

Después del reinicio, comprueba el modo de los pines:

sudo cat /sys/kernel/debug/tegra_gpio | grep "J:"

Deberías ver: J: 2:1 00 00 00 00 00 00 000000
Si ves "f0" en cualquier lugar (como "f0 00 00"), necesitas la corrección que sigue.
"00" significa que los pines están en modo de función especial (SFIO) para audio I2S. "f0" significa que siguen bloqueados en modo GPIO.

Paso 3: corrige los pines con un servicio systemd si es necesario

En muchas placas B02, los pines no cambian al modo de audio. Este comando lo corrige:

sudo busybox devmem 0x6000d204 32 0

Fuerza el modo correcto de los pines, pero vuelven al modo GPIO al reiniciar. Para aplicar la corrección en cada arranque, crea un servicio systemd:

sudo tee /etc/systemd/system/fix-i2s4-pins.service <<EOF
[Unit]
Description=Fix I2S4 Pinmux for Jetson Nano
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/busybox devmem 0x6000d204 32 0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Este servicio de arranque escribe en el registro de configuración GPIO 0x6000d204, lo que fuerza los pines del puerto J al modo SFIO para I2S4.

Activa e inicia el servicio:

sudo systemctl enable fix-i2s4-pins
sudo systemctl start fix-i2s4-pins

Ambos comandos deberían terminar sin errores. Si ves "Failed to start fix-i2s4-pins.service: Unit not found," el archivo del servicio no se creó correctamente. Consulta los registros:

sudo journalctl -u fix-i2s4-pins

Paso 4: conecta I2S4 con el controlador de sonido

Conecta la interfaz I2S4 al sistema de audio:

amixer -c tegrasndt210ref cset name='I2S4 Mux' ADMAIF1

La salida debe terminar con values=1. Si aparece el error "Invalid card", el controlador de audio aún no está cargado. Reinicia e inténtalo de nuevo.

Esto conecta la interfaz ADMAIF1 (a la que el controlador envía audio) con I2S4 y une así el controlador con los pines físicos.

Paso 5: reproduce un tono de prueba

Este comando envía una onda sinusoidal estéreo de 48 kHz y 16 bits por la interfaz I2S4:

speaker-test -D hw:tegrasndt210ref,0 -r 48000 -c 2 -F S16_LE -t sine

Deberías oír un tono continuo en los auriculares o altavoces. Pulsa Ctrl+C para detenerlo.

Cómo confirmar que la placa Audio+ funciona

Si has oído el tono, Raspiaudio Audio+ funciona en tu Jetson Nano B02. La corrección de los pines se mantiene después de reiniciar gracias al servicio del paso 3.

Extra: cómo flashear tu Jetson Nano con el DTB personalizado

El método anterior funciona para un dispositivo. Si necesitas flashear varias placas Jetson Nano para producción, recorrer los menús de jetson-io en cada una resulta tedioso. En su lugar, flashea cada placa con el archivo DTB (Device Tree Blob) creado en el paso 1 para que los pines ya estén configurados:

/boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb

Copia este archivo a tu ordenador. Cuando vuelvas a flashear, cópialo de nuevo a la carpeta /boot/ antes del primer arranque.

Importante: ¿qué Jetson Nano tienes?

Este archivo DTB solo corresponde a la revisión de la placa portadora en la que se creó. La revisión aparece al final del nombre del archivo (aquí, b00). Flashear un DTB de otra revisión puede dañar la partición de arranque, y quizá necesites volver a flashearlo todo desde un ordenador anfitrión.

La forma más sencilla de flashear un Jetson Nano es desde un ordenador anfitrión Linux con NVIDIA SDK Manager o el NVIDIA Jetson Linux Driver Package (L4T). Recomiendo L4T porque funciona en más distribuciones Linux. El procedimiento completo está en este hilo del foro NVIDIA sobre cómo descargar y flashear L4T manualmente. Esta es la versión breve.

Descarga L4T desde el archivo de NVIDIA Jetson Linux. Para Jetson Nano, usa la serie Jetson Linux 32.7.x, no una rama JetPack más reciente. En la página de la versión, descarga el Driver Package (BSP) y el Sample Root Filesystem. Extrae el paquete de controladores sin sudo y después el sistema de archivos raíz de ejemplo con sudo dentro de Linux_for_Tegra/rootfs/.

Después, desde la carpeta Linux_for_Tegra, aplica los binarios NVIDIA:

sudo ./apply_binaries.sh

A continuación, conecta el Jetson Nano con el ordenador anfitrión mediante micro USB. El Nano debe recibir alimentación de una fuente de 5 V independiente.

Este es un ejemplo de comando que flashea el Jetson Nano con tu archivo DTB personalizado. Ejecútalo en el ordenador anfitrión después de copiar allí el DTB personalizado del Nano. Sustituye la ruta por la tuya.

sudo ./flash.sh -k DTB
-d /path/to/your/file/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
jetson-nano-devkit mmcblk1p1

Para flashear, puede que debas poner el Jetson Nano en modo de recuperación:

  1. Alimenta el Jetson Nano con una fuente de 5 V (no mediante micro USB).
  2. Conecta el pin "FC RCV" (recuperación forzada) con un pin "GND" usando un cable puente, un clip o un destornillador pequeño.
  3. Conecta el pin "SYS_RST" (reinicio del sistema) con un pin "GND" para reiniciar el Jetson Nano.
  4. Conecta el Nano con el ordenador anfitrión mediante micro USB.

Comprueba la conexión en el ordenador anfitrión con:

lsusb | grep -i nvidia

Después de flashear, aún necesitas añadir el servicio systemd del paso 3 para que los pines se configuren correctamente en cada arranque.

Guías relacionadas

Una vez que la placa reproduce sonido, estas guías explican proyectos de audio neuronal para pequeños ordenadores de placa única:

Masteriza tu tema en segundos
Alcanza -14 LUFS automáticamente. Conserva el carácter de tu tema. Audio listo para streaming que mantiene lo que hace especial a tu música. Directamente desde tu navegador.