Audio I2S su Jetson Nano: come configurare Raspiaudio Audio+

Per configurare Raspiaudio Audio+ su un Jetson Nano, attiva i pin I2S4 in jetson-io, forza quei pin in modalità audio a ogni avvio e collega I2S4 al driver audio. Il kit di sviluppo Jetson Nano è pensato per IA e robotica, ma non ha un'uscita audio analogica. La scheda Raspiaudio Audio+ è una scheda audio progettata per Raspberry Pi che si adatta anche al connettore a 40 pin del Nano.

Questa guida descrive ogni passaggio sul Jetson Nano B02 (2019). Alla fine sentirai l'audio dall'uscita cuffie di Audio+.

Masterizza il tuo brano in pochi secondi
Raggiungi automaticamente -14 LUFS. Conserva il carattere del tuo brano. Audio pronto per lo streaming che mantiene ciò che rende speciale la tua musica. Direttamente dal browser.

Prima di iniziare: modello di Jetson Nano e compatibilità Audio+

Configura prima il tuo Jetson Nano. Se non l'hai ancora fatto, segui la guida NVIDIA alla configurazione di Jetson Nano. Devi poter avviare il Nano fino al desktop con un monitor e una tastiera.

Cosa serve: un Jetson Nano B02 e una scheda Raspiaudio Audio+. Il connettore a 40 pin di Audio+ si inserisce direttamente su quello del Nano. Premi con decisione affinché ogni pin faccia contatto.

Questa guida è stata provata sul kit di sviluppo Jetson Nano B02 (2019), chiamato anche P3450 (modulo P3448 su scheda portante P3449). Puoi riconoscere Jetson Nano dal dissipatore passivo (i modelli Jetson più recenti usano ventole). Il B02 ha anche una fila di pin che sporge come una piccola estensione, assente nel vecchio modello A01.

Se hai il vecchio modello A01 o un Jetson più recente, usa questa guida solo come riferimento, perché i passaggi non si applicano direttamente. Puoi condividere i tuoi consigli nella community Raspiaudio.

Altre schede DAC I2S: Audio+ e i DAC simili per Raspberry Pi non hanno un'interfaccia di controllo, ma solo un'interfaccia I2S. Come spiega questa discussione del forum NVIDIA sulle schede audio I2S Raspberry Pi per Jetson Nano, queste schede dovrebbero funzionare una volta configurati i pin. I passaggi seguenti sono quindi un buon punto di partenza per altri DAC I2S di questo tipo sul Nano B02.

Un ringraziamento speciale a jas-mx per il post del forum NVIDIA sull'attivazione dell'uscita audio I2S sul connettore a 40 pin che ha ispirato questa guida.

Passaggio 1: attiva i pin audio I2S4 con jetson-io

Per impostazione predefinita, Jetson Nano non usa quei pin del connettore per l'audio. Avvia il Nano con monitor e tastiera, apri un terminale ed esegui:

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

Si apre uno strumento a menu:

  1. Usa le frecce su e giù per evidenziare "Configure Jetson 40pin Header" e premi Enter
  2. Seleziona "Configure header pins manually" e premi Enter
  3. Nella lista delle caselle, trova "i2s4" (pin 12, 35, 38, 40) e "audio_mclk" (pin 7). Premi Space su ciascuna per contrassegnarla con un asterisco [*].
  4. Seleziona "Back"
  5. Seleziona "Save pin changes"
  6. Seleziona "Save and reboot to reconfigure pins"

Jetson Nano si riavvia. Lo strumento scrive un albero dei dispositivi personalizzato (DTB) che assegna quei pin all'audio, salvato in /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Passaggio 2: verifica che i pin siano in modalità I2S

Dopo il riavvio, controlla la modalità dei pin:

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

Dovresti vedere: J: 2:1 00 00 00 00 00 00 000000
Se vedi "f0" da qualche parte (come "f0 00 00"), serve la correzione seguente.
"00" significa che i pin sono in modalità funzione speciale (SFIO) per l'audio I2S. "f0" significa che sono bloccati in modalità GPIO.

Passaggio 3: correggi i pin con un servizio systemd, se necessario

Su molte schede B02, i pin non passano in modalità audio. Questo comando risolve il problema:

sudo busybox devmem 0x6000d204 32 0

Forza i pin nella modalità corretta, ma al riavvio tornano in modalità GPIO. Per applicare la correzione a ogni avvio, crea un servizio 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

Questo servizio di avvio scrive nel registro di configurazione GPIO 0x6000d204, forzando i pin della porta J in modalità SFIO per I2S4.

Abilita e avvia il servizio:

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

Entrambi i comandi dovrebbero terminare senza errori. Se vedi "Failed to start fix-i2s4-pins.service: Unit not found," il file del servizio non è stato creato correttamente. Controlla i log:

sudo journalctl -u fix-i2s4-pins

Passaggio 4: collega I2S4 al driver audio

Collega l'interfaccia I2S4 al sistema audio:

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

L'uscita dovrebbe terminare con values=1. Se ricevi l'errore "Invalid card", il driver audio non è ancora caricato. Riavvia e riprova.

Questo instrada l'interfaccia ADMAIF1 (a cui il driver invia l'audio) verso I2S4, collegando il driver ai pin fisici.

Passaggio 5: riproduci un tono di prova

Questo comando invia un'onda sinusoidale stereo a 48 kHz e 16 bit attraverso l'interfaccia I2S4:

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

Dovresti sentire un tono continuo dalle cuffie o dagli altoparlanti. Premi Ctrl+C per interromperlo.

Come confermare che la scheda Audio+ funziona

Se hai sentito il tono, Raspiaudio Audio+ funziona sul tuo Jetson Nano B02. La correzione dei pin rimane attiva dopo i riavvii grazie al servizio del passaggio 3.

Extra: come flashare il DTB personalizzato sul tuo Jetson Nano

Il metodo precedente funziona per un dispositivo. Se devi flashare più schede Jetson Nano per la produzione, percorrere i menu di jetson-io su ciascuna diventa noioso. Flasha invece ogni scheda con il file DTB (Device Tree Blob) creato nel passaggio 1, così la configurazione dei pin è già presente:

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

Copia questo file sul computer. Quando esegui nuovamente il flash della scheda, copialo di nuovo nella cartella /boot/ prima del primo avvio.

Importante: quale Jetson Nano hai?

Questo file DTB corrisponde solo alla revisione della scheda portante sulla quale è stato creato. La revisione è alla fine del nome del file (qui, b00). Flashare un DTB di una revisione diversa può danneggiare la partizione di avvio, e potresti dover riflashare tutto da un computer host.

Il modo più semplice per flashare un Jetson Nano è da un computer host Linux con NVIDIA SDK Manager o il NVIDIA Jetson Linux Driver Package (L4T). Consiglio L4T perché funziona su più distribuzioni Linux. La procedura completa è in questa discussione del forum NVIDIA su come scaricare e flashare L4T manualmente. Ecco la versione breve.

Scarica L4T dall'archivio NVIDIA Jetson Linux. Per Jetson Nano usa la serie Jetson Linux 32.7.x, non un ramo JetPack più recente. Nella pagina della versione, scarica il Driver Package (BSP) e il Sample Root Filesystem. Estrai il pacchetto driver senza sudo, poi estrai il filesystem radice di esempio con sudo in Linux_for_Tegra/rootfs/.

Poi, dalla cartella Linux_for_Tegra, applica i binari NVIDIA:

sudo ./apply_binaries.sh

Quindi collega Jetson Nano al computer host tramite micro USB. Il Nano deve essere alimentato da un alimentatore separato a 5 V.

Ecco un esempio di comando che flasha il Jetson Nano con il tuo file DTB personalizzato. Eseguilo sul computer host dopo avervi copiato il DTB personalizzato dal Nano. Sostituisci il percorso con il tuo.

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

Per il flash potresti dover mettere Jetson Nano in modalità di ripristino:

  1. Alimenta Jetson Nano con un alimentatore a 5 V (non tramite micro USB).
  2. Collega il pin "FC RCV" (ripristino forzato) a un pin "GND" con un cavetto jumper, una graffetta o un piccolo cacciavite.
  3. Collega il pin "SYS_RST" (reset del sistema) a un pin "GND" per riavviare Jetson Nano.
  4. Collega il Nano al computer host tramite micro USB.

Verifica il collegamento sul computer host con:

lsusb | grep -i nvidia

Dopo il flash devi ancora aggiungere il servizio systemd del passaggio 3 per impostare correttamente i pin a ogni avvio.

Guide correlate

Quando la scheda riproduce il suono, queste guide trattano progetti di audio neurale per piccoli computer a scheda singola:

Masterizza il tuo brano in pochi secondi
Raggiungi automaticamente -14 LUFS. Conserva il carattere del tuo brano. Audio pronto per lo streaming che mantiene ciò che rende speciale la tua musica. Direttamente dal browser.