Jetson Nano I2S-audio: de Raspiaudio Audio+ instellen

Om de Raspiaudio Audio+ op een Jetson Nano in te stellen, activeer je de I2S4-pinnen in jetson-io, dwing je bij iedere start hun audiomodus af en verbind je I2S4 met de geluidsdriver. De Jetson Nano-ontwikkelkit is gebouwd voor AI en robotica, maar heeft geen analoge audio-uitgang. Het Raspiaudio Audio+-bord is een geluidskaart voor de Raspberry Pi die ook op de 40-pinsheader van de Nano past.

Deze gids behandelt elke stap op de Jetson Nano B02 (2019). Aan het einde hoor je audio uit de hoofdtelefoonaansluiting van de Audio+.

Master je track in enkele seconden
Bereik automatisch -14 LUFS. Behoud het karakter van je track. Audio die klaar is voor streaming en behoudt wat je muziek bijzonder maakt. Rechtstreeks vanuit je browser.

Voor je begint: Jetson Nano-model en Audio+-compatibiliteit

Stel je Jetson Nano eerst in. Heb je dat nog niet gedaan, volg dan de Jetson Nano-startgids van NVIDIA. Je moet de Nano met een monitor en toetsenbord naar het bureaublad kunnen opstarten.

Wat je nodig hebt: een Jetson Nano B02 en een Raspiaudio Audio+-bord. De 40-pinsconnector van de Audio+ past direct op de header van de Nano. Druk hem stevig aan zodat elke pin contact maakt.

Deze gids is getest op de Jetson Nano B02-ontwikkelkit (2019), ook bekend als P3450 (module P3448 op draagbord P3449). Je herkent de Jetson Nano aan zijn passieve koellichaam; recentere Jetson-modellen hebben ventilatoren. De B02 heeft ook een uitstekende rij pinnen die op een klein ‘vak’ lijkt en bij het oudere A01-model ontbreekt.

Heb je het oudere A01-model of een recentere Jetson, gebruik deze gids dan alleen als referentie: de stappen zijn niet rechtstreeks toepasbaar. Je kunt je tips delen in de Raspiaudio-community.

Andere I2S-DAC-borden: de Audio+ en vergelijkbare Raspberry Pi-DAC's hebben geen besturingsinterface, alleen een I2S-interface. Zoals uitgelegd in deze NVIDIA-forumdiscussie over Raspberry Pi I2S-geluidskaarten voor de Jetson Nano zouden zulke borden moeten werken zodra de pinnen zijn ingesteld. De stappen hieronder zijn dus ook een goed begin voor andere I2S-DAC's van dit type op de Nano B02.

Met speciale dank aan jas-mx voor het NVIDIA-forumbericht over I2S-audio-uitvoer op de 40-pinsconnector dat deze gids inspireerde.

Stap 1: activeer de I2S4-audiopinnen met jetson-io

Standaard gebruikt de Jetson Nano die headerpinnen niet voor audio. Start de Nano op met een monitor en toetsenbord, open een terminal en voer dit uit:

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

Dit opent een hulpmiddel met een menu:

  1. Gebruik de pijltoetsen omhoog en omlaag om "Configure Jetson 40pin Header" te selecteren en druk op Enter
  2. Selecteer "Configure header pins manually" en druk op Enter
  3. Zoek in de lijst met selectievakjes "i2s4" (pinnen 12, 35, 38, 40) en "audio_mclk" (pin 7). Druk bij elk op Space om het met een sterretje [*] te markeren.
  4. Selecteer "Back"
  5. Selecteer "Save pin changes"
  6. Selecteer "Save and reboot to reconfigure pins"

De Jetson Nano start opnieuw op. Het hulpmiddel schrijft een aangepaste apparaatboom (DTB) die de pinnen aan audio toewijst, opgeslagen in /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Stap 2: controleer of de pinnen in I2S-modus staan

Controleer na de herstart de pinmodus:

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

Je zou dit moeten zien: J: 2:1 00 00 00 00 00 00 000000
Zie je ergens "f0" (zoals "f0 00 00"), dan is de oplossing hieronder nodig.
"00" betekent dat de pinnen in de speciale functiemodus (SFIO) voor I2S-audio staan. "f0" betekent dat ze in GPIO-modus zijn blijven staan.

Stap 3: herstel de pinnen met een systemd-service als dat nodig is

Op veel B02-borden schakelen de pinnen niet naar audiomodus. Deze opdracht verhelpt dat:

sudo busybox devmem 0x6000d204 32 0

Hij dwingt de pinnen in de juiste modus, maar na een herstart keren ze terug naar GPIO. Maak een systemd-service om de oplossing bij iedere start toe te passen:

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

Deze opstartservice schrijft naar het GPIO-configuratieregister 0x6000d204 en dwingt de Port J-pinnen zo naar SFIO-modus voor I2S4.

Schakel de service in en start hem:

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

Beide opdrachten moeten zonder fouten eindigen. Zie je "Failed to start fix-i2s4-pins.service: Unit not found", dan is het servicebestand niet goed aangemaakt. Controleer de logboeken:

sudo journalctl -u fix-i2s4-pins

Stap 4: verbind I2S4 met de geluidsdriver

Verbind de I2S4-interface met het audiosysteem:

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

De uitvoer moet eindigen op values=1. Krijg je de fout "Invalid card", dan is de audiodriver nog niet geladen. Start opnieuw op en probeer het nogmaals.

Dit leidt de ADMAIF1-interface, waar de geluidsdriver audio naartoe stuurt, naar I2S4 en verbindt zo de driver met de fysieke pinnen.

Stap 5: speel een testtoon af

Deze opdracht stuurt een 16-bits stereosinus met een samplefrequentie van 48 kHz door de I2S4-interface:

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

Je moet een aanhoudende toon via je hoofdtelefoon of luidsprekers horen. Druk op Ctrl+C om hem te stoppen.

Controleren of het Audio+-bord werkt

Hoor je de toon, dan werkt de Raspiaudio Audio+ op je Jetson Nano B02. De pinoplossing blijft na herstarts werken dankzij de service uit stap 3.

Extra: je Jetson Nano flashen met de aangepaste DTB

De methode hierboven werkt voor één apparaat. Moet je meerdere Jetson Nano-borden voor productie flashen, dan wordt het doorlopen van de jetson-io-menu's op elk bord vervelend. Flash elk bord in plaats daarvan met het DTB-bestand (Device Tree Blob) uit stap 1, zodat de pinconfiguratie al klaarstaat:

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

Kopieer dit bestand naar je computer. Kopieer het bij opnieuw flashen terug naar de map /boot/ vóór de eerste start.

Belangrijk: welke Jetson Nano heb je?

Dit DTB-bestand past alleen bij de draagbordrevisie waarop het is gemaakt. De revisie staat aan het einde van de bestandsnaam, hier b00. Een DTB van een andere revisie flashen kan de opstartpartitie beschadigen, waarna je mogelijk alles opnieuw vanaf een hostcomputer moet flashen.

Een Jetson Nano flash je het eenvoudigst vanaf een Linux-hostcomputer met NVIDIA SDK Manager of het NVIDIA Jetson Linux Driver Package (L4T). Ik raad L4T aan omdat het op meer Linux-distributies werkt. De volledige procedure staat in deze NVIDIA-forumdiscussie over L4T handmatig downloaden en flashen. Hier volgt de korte versie.

Download L4T uit het NVIDIA Jetson Linux-archief. Gebruik voor de Jetson Nano de Jetson Linux 32.7.x-serie, geen nieuwere JetPack-branch. Download op de releasepagina het Driver Package (BSP) en het Sample Root Filesystem. Pak het driverpakket uit zonder sudo en pak daarna het voorbeeld van het rootbestandssysteem met sudo uit in Linux_for_Tegra/rootfs/.

Pas daarna vanuit de map Linux_for_Tegra de binaire bestanden van NVIDIA toe:

sudo ./apply_binaries.sh

Verbind vervolgens de Jetson Nano via micro USB met je hostcomputer. De Nano moet voeding krijgen van een aparte 5 V-voeding.

Hier is een voorbeeldopdracht die de Jetson Nano met je aangepaste DTB-bestand flasht. Voer hem uit op de hostcomputer nadat je het DTB-bestand van de Nano naar de host hebt gekopieerd. Vervang het pad door je eigen pad.

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

Om te flashen moet je de Jetson Nano mogelijk in herstelmodus zetten:

  1. Voed de Jetson Nano met een 5 V-voeding, niet via micro USB.
  2. Verbind de pin "FC RCV" (geforceerd herstel) met een "GND"-pin met een jumperdraad, paperclip of kleine schroevendraaier.
  3. Verbind de pin "SYS_RST" (systeemreset) met een "GND"-pin om de Jetson Nano opnieuw op te starten.
  4. Verbind de Nano via micro USB met je hostcomputer.

Controleer de verbinding op je hostcomputer met:

lsusb | grep -i nvidia

Na het flashen moet je nog steeds de systemd-service uit stap 3 toevoegen, zodat de pinnen bij iedere start goed worden ingesteld.

Gerelateerde gidsen

Zodra het bord geluid afspeelt, behandelen deze gidsen neurale audioprojecten voor kleine singleboardcomputers:

Master je track in enkele seconden
Bereik automatisch -14 LUFS. Behoud het karakter van je track. Audio die klaar is voor streaming en behoudt wat je muziek bijzonder maakt. Rechtstreeks vanuit je browser.