Jetson Nano I2S-Audio: Raspiaudio Audio+ einrichten

Um Raspiaudio Audio+ an einem Jetson Nano einzurichten, aktivieren Sie die I2S4-Pins in jetson-io, erzwingen bei jedem Start ihren Audiomodus und verbinden I2S4 mit dem Audiotreiber. Das Jetson Nano-Entwicklerkit ist für KI und Robotik ausgelegt, hat aber keinen analogen Audioausgang. Die Raspiaudio Audio+-Platine ist eine für den Raspberry Pi entworfene Soundkarte, die auch auf die 40-polige Stiftleiste des Nano passt.

Diese Anleitung behandelt jeden Schritt am Jetson Nano B02 (2019). Am Ende hören Sie Audio über die Kopfhörerbuchse von Audio+.

Mastern Sie Ihren Track in Sekunden
Erreichen Sie automatisch -14 LUFS. Bewahren Sie den Charakter Ihres Tracks. Streamingfertiges Audio, das erhält, was Ihre Musik besonders macht. Direkt im Browser.

Vor dem Start: Jetson-Nano-Modell und Audio+-Kompatibilität

Richten Sie zuerst Ihren Jetson Nano ein. Falls das noch nicht geschehen ist, folgen Sie NVIDIAs Einrichtungsanleitung für den Jetson Nano. Sie sollten den Nano mit Monitor und Tastatur bis zum Desktop starten können.

Sie benötigen: einen Jetson Nano B02 und eine Raspiaudio Audio+-Platine. Der 40-polige Audio+-Anschluss passt direkt auf die Stiftleiste des Nano. Drücken Sie ihn fest auf, damit jeder Pin Kontakt hat.

Diese Anleitung wurde am Jetson Nano B02-Entwicklerkit (2019) getestet, auch P3450 genannt (Modul P3448 auf Trägerplatine P3449). Sie erkennen den Jetson Nano an seinem passiven Kühlkörper; neuere Jetson-Modelle verwenden Lüfter. Der B02 hat außerdem eine Pinreihe, die wie ein kleiner Vorsprung herausragt und beim älteren A01-Modell fehlt.

Wenn Sie das ältere A01-Modell oder einen neueren Jetson haben, nutzen Sie diese Anleitung nur als Referenz, da die Schritte nicht direkt anwendbar sind. Ihre Tipps können Sie in der Raspiaudio-Community teilen.

Andere I2S-DAC-Platinen: Audio+ und ähnliche Raspberry-Pi-DACs besitzen keine Steuerschnittstelle, sondern nur eine I2S-Schnittstelle. Wie dieser NVIDIA-Forumsthread zu Raspberry-Pi-I2S-Soundkarten am Jetson Nano erläutert, sollten solche Platinen nach der Pin-Konfiguration funktionieren. Die folgenden Schritte sind daher ein guter Ausgangspunkt für andere I2S-DACs dieser Art am Nano B02.

Besonderer Dank an jas-mx für den NVIDIA-Forumsbeitrag zur Aktivierung der I2S-Audioausgabe am 40-poligen Anschluss, der diese Anleitung inspiriert hat.

Schritt 1: I2S4-Audiopins mit jetson-io aktivieren

Standardmäßig nutzt der Jetson Nano diese Pins der Stiftleiste nicht für Audio. Starten Sie den Nano mit Monitor und Tastatur, öffnen Sie ein Terminal und führen Sie Folgendes aus:

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

Dadurch öffnet sich ein menügesteuertes Werkzeug:

  1. Markieren Sie mit den Pfeiltasten nach oben und unten "Configure Jetson 40pin Header" und drücken Sie Enter
  2. Wählen Sie "Configure header pins manually" und drücken Sie Enter
  3. Suchen Sie in der Kontrollkästchenliste "i2s4" (Pins 12, 35, 38, 40) und "audio_mclk" (Pin 7). Drücken Sie bei jedem Eintrag Space, um ihn mit einem Sternchen [*] zu markieren.
  4. Wählen Sie "Back"
  5. Wählen Sie "Save pin changes"
  6. Wählen Sie "Save and reboot to reconfigure pins"

Der Jetson Nano startet neu. Das Werkzeug schreibt einen angepassten Gerätebaum (DTB), der diese Pins Audio zuweist, und speichert ihn unter /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Schritt 2: Prüfen, ob die Pins im I2S-Modus sind

Prüfen Sie nach dem Neustart den Pin-Modus:

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

Sie sollten Folgendes sehen: J: 2:1 00 00 00 00 00 00 000000
Wenn irgendwo "f0" erscheint, etwa "f0 00 00", ist die folgende Korrektur erforderlich.
"00" bedeutet, dass die Pins im Spezialfunktionsmodus (SFIO) für I2S-Audio sind. "f0" bedeutet, dass sie im GPIO-Modus festhängen.

Schritt 3: Die Pins bei Bedarf mit einem systemd-Dienst korrigieren

Auf vielen B02-Platinen wechseln die Pins nicht in den Audiomodus. Dieser Befehl korrigiert das:

sudo busybox devmem 0x6000d204 32 0

Er erzwingt den richtigen Pin-Modus, doch beim Neustart kehren sie in den GPIO-Modus zurück. Erstellen Sie einen systemd-Dienst, um die Korrektur bei jedem Start anzuwenden:

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

Dieser Startdienst schreibt in das GPIO-Konfigurationsregister 0x6000d204 und erzwingt damit für die Pins von Port J den SFIO-Modus für I2S4.

Aktivieren und starten Sie den Dienst:

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

Beide Befehle sollten ohne Fehler enden. Wenn "Failed to start fix-i2s4-pins.service: Unit not found," erscheint, wurde die Dienstdatei nicht korrekt erstellt. Prüfen Sie die Protokolle:

sudo journalctl -u fix-i2s4-pins

Schritt 4: I2S4 mit dem Audiotreiber verbinden

Verbinden Sie die I2S4-Schnittstelle mit dem Audiosystem:

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

Die Ausgabe sollte mit values=1 enden. Beim Fehler "Invalid card" ist der Audiotreiber noch nicht geladen. Starten Sie neu und versuchen Sie es erneut.

Das leitet die ADMAIF1-Schnittstelle, an die der Audiotreiber Audio sendet, zu I2S4 und verbindet damit den Treiber mit den Hardwarepins.

Schritt 5: Einen Testton abspielen

Dieser Befehl sendet eine Stereo-Sinuswelle mit 48 kHz und 16 Bit über die I2S4-Schnittstelle:

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

Sie sollten einen durchgehenden Ton über Kopfhörer oder Lautsprecher hören. Drücken Sie Ctrl+C, um ihn zu beenden.

Prüfen, ob die Audio+-Platine funktioniert

Wenn Sie den Ton gehört haben, funktioniert Raspiaudio Audio+ an Ihrem Jetson Nano B02. Die Pin-Korrektur bleibt dank des Dienstes aus Schritt 3 nach Neustarts wirksam.

Ergänzung: Den Jetson Nano mit dem angepassten DTB flashen

Die obige Methode funktioniert für ein Gerät. Müssen Sie mehrere Jetson-Nano-Platinen für die Produktion flashen, wird das Durchgehen der jetson-io-Menüs auf jeder einzelnen mühsam. Flashen Sie stattdessen jede Platine mit der in Schritt 1 erstellten DTB-Datei (Device Tree Blob), sodass die Pin-Konfiguration bereits vorhanden ist:

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

Kopieren Sie diese Datei auf Ihren Computer. Kopieren Sie sie beim erneuten Flashen vor dem ersten Start wieder in den Ordner /boot/.

Wichtig: Welchen Jetson Nano haben Sie?

Diese DTB-Datei passt nur zur Revision der Trägerplatine, auf der sie erstellt wurde. Die Revision steht am Ende des Dateinamens, hier b00. Einen DTB einer anderen Revision zu flashen kann die Bootpartition beschädigen. Anschließend müssen Sie möglicherweise alles von einem Host-Computer aus neu flashen.

Am einfachsten flashen Sie einen Jetson Nano von einem Linux-Host-Computer aus mit NVIDIA SDK Manager oder dem NVIDIA Jetson Linux Driver Package (L4T). Ich empfehle L4T, weil es auf mehr Linux-Distributionen funktioniert. Die vollständige Anleitung steht in diesem NVIDIA-Forumsthread zum manuellen Herunterladen und Flashen von L4T. Hier ist die Kurzfassung.

Laden Sie L4T aus dem NVIDIA-Jetson-Linux-Archiv herunter. Verwenden Sie für den Jetson Nano die Jetson-Linux-Reihe 32.7.x und keinen neueren JetPack-Branch. Laden Sie auf der Versionsseite das Driver Package (BSP) und das Sample Root Filesystem herunter. Entpacken Sie das Treiberpaket ohne sudo und danach das Beispiel-Root-Dateisystem mit sudo nach Linux_for_Tegra/rootfs/.

Wenden Sie anschließend im Ordner Linux_for_Tegra die NVIDIA-Binärdateien an:

sudo ./apply_binaries.sh

Verbinden Sie den Jetson Nano danach per Micro-USB mit dem Host-Computer. Der Nano muss über ein separates 5-V-Netzteil versorgt werden.

Hier ist ein Beispielbefehl, der den Jetson Nano mit Ihrer angepassten DTB-Datei flasht. Führen Sie ihn auf dem Host-Computer aus, nachdem Sie die angepasste DTB-Datei vom Nano dorthin kopiert haben. Ersetzen Sie den Pfad durch Ihren eigenen.

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

Zum Flashen müssen Sie den Jetson Nano möglicherweise in den Wiederherstellungsmodus versetzen:

  1. Versorgen Sie den Jetson Nano mit einem 5-V-Netzteil, nicht per Micro-USB.
  2. Verbinden Sie den Pin "FC RCV" (erzwungene Wiederherstellung) mit einem "GND"-Pin, etwa mit einem Jumperkabel, einer Büroklammer oder einem kleinen Schraubendreher.
  3. Verbinden Sie den Pin "SYS_RST" (Systemreset) mit einem "GND"-Pin, um den Jetson Nano neu zu starten.
  4. Verbinden Sie den Nano per Micro-USB mit dem Host-Computer.

Prüfen Sie die Verbindung auf dem Host-Computer mit:

lsusb | grep -i nvidia

Nach dem Flashen müssen Sie weiterhin den systemd-Dienst aus Schritt 3 hinzufügen, damit die Pins bei jedem Start korrekt eingestellt werden.

Weitere Anleitungen

Sobald die Platine Audio abspielt, behandeln diese Anleitungen neuronale Audioprojekte für kleine Einplatinencomputer:

  • RAVE-Modell von IRCAM: Seine schlanke "raspberry"-Konfiguration und das nn~-External richten sich an eingebettete Platinen für portable Installationen.
  • Kostenlose neuronale Gitarrenplugins: ToobAmp und Stompbox führen neuronale Verstärkermodelle auf mit Raspberry Pi gebauten Pedalen aus.
  • DDSP von Google Magenta: Enthält Open NSynth Super, einen neuronalen Synthesizer auf Basis eines Raspberry Pi.
Mastern Sie Ihren Track in Sekunden
Erreichen Sie automatisch -14 LUFS. Bewahren Sie den Charakter Ihres Tracks. Streamingfertiges Audio, das erhält, was Ihre Musik besonders macht. Direkt im Browser.