Audio I2S na Jetson Nano: jak skonfigurować Raspiaudio Audio+

Aby skonfigurować Raspiaudio Audio+ na Jetson Nano, włącz piny I2S4 w jetson-io, wymuś ich tryb audio przy każdym rozruchu i skieruj I2S4 do sterownika dźwięku. Zestaw deweloperski Jetson Nano jest przeznaczony do AI i robotyki, ale nie ma analogowego wyjścia audio. Płytka Raspiaudio Audio+ to karta dźwiękowa zaprojektowana dla Raspberry Pi, która pasuje również do 40-pinowego złącza Nano.

Poradnik obejmuje każdy krok na Jetson Nano B02 (2019). Na końcu usłyszysz dźwięk z gniazda słuchawkowego Audio+.

Zmasteruj swój utwór w kilka sekund
Automatycznie osiągnij -14 LUFS. Zachowaj charakter utworu. Audio gotowe do streamingu, które zachowuje to, co wyróżnia Twoją muzykę. Prosto z przeglądarki.

Zanim zaczniesz: model Jetson Nano i zgodność Audio+

Najpierw skonfiguruj Jetson Nano. Jeśli jeszcze tego nie zrobiłeś, postępuj zgodnie z poradnikiem konfiguracji Jetson Nano firmy NVIDIA. Nano powinien uruchamiać pulpit z podłączonym monitorem i klawiaturą.

Potrzebne elementy: Jetson Nano B02 i płytka Raspiaudio Audio+. 40-pinowe złącze Audio+ pasuje bezpośrednio do złącza Nano. Mocno dociśnij płytkę, aby każdy pin miał kontakt.

Poradnik przetestowano na zestawie deweloperskim Jetson Nano B02 (2019), zwanym także P3450 (moduł P3448 na płycie nośnej P3449). Jetson Nano rozpoznasz po pasywnym radiatorze; nowsze modele Jetson używają wentylatorów. B02 ma też wystający rząd pinów przypominający małą „zatoczkę”, którego nie ma starszy model A01.

Jeśli masz starszy model A01 albo nowszy Jetson, traktuj poradnik tylko jako materiał referencyjny, ponieważ kroki nie będą pasować bezpośrednio. Swoimi wskazówkami możesz podzielić się ze społecznością Raspiaudio.

Inne płytki DAC I2S: Audio+ i podobne przetworniki DAC dla Raspberry Pi nie mają interfejsu sterowania, tylko interfejs I2S. Jak wyjaśnia wątek na forum NVIDIA o kartach dźwiękowych I2S Raspberry Pi dla Jetson Nano, takie płytki powinny działać po skonfigurowaniu pinów. Poniższe kroki są więc dobrym punktem wyjścia dla innych przetworników DAC I2S tego typu na Nano B02.

Szczególne podziękowania dla jas-mx za wpis na forum NVIDIA o włączaniu wyjścia audio I2S na 40-pinowym złączu, który zainspirował ten poradnik.

Krok 1: włącz piny audio I2S4 za pomocą jetson-io

Domyślnie Jetson Nano nie używa tych pinów złącza do audio. Uruchom Nano z monitorem i klawiaturą, otwórz terminal i wykonaj:

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

Otworzy się narzędzie z menu:

  1. Strzałkami w górę i w dół zaznacz "Configure Jetson 40pin Header" i naciśnij Enter
  2. Wybierz "Configure header pins manually" i naciśnij Enter
  3. Na liście pól wyboru znajdź "i2s4" (piny 12, 35, 38, 40) i "audio_mclk" (pin 7). Naciśnij Space na każdym, aby zaznaczyć go gwiazdką [*].
  4. Wybierz "Back"
  5. Wybierz "Save pin changes"
  6. Wybierz "Save and reboot to reconfigure pins"

Jetson Nano uruchomi się ponownie. Narzędzie zapisuje własne drzewo urządzeń (DTB), które przypisuje te piny do audio, w /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Krok 2: sprawdź, czy piny są w trybie I2S

Po restarcie sprawdź tryb pinów:

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

Powinien pojawić się wynik: J: 2:1 00 00 00 00 00 00 000000
Jeśli gdziekolwiek widzisz "f0" (na przykład "f0 00 00"), potrzebna jest poniższa poprawka.
"00" oznacza, że piny są w trybie funkcji specjalnej (SFIO) dla audio I2S. "f0" oznacza, że pozostały w trybie GPIO.

Krok 3: popraw piny za pomocą usługi systemd, jeśli trzeba

Na wielu płytach B02 piny nie przechodzą do trybu audio. Ta komenda to naprawia:

sudo busybox devmem 0x6000d204 32 0

Wymusza właściwy tryb pinów, ale po restarcie wracają one do GPIO. Aby stosować poprawkę przy każdym rozruchu, utwórz usługę 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

Ta usługa startowa zapisuje wartość do rejestru konfiguracji GPIO 0x6000d204, co wymusza tryb SFIO dla I2S4 na pinach Port J.

Włącz i uruchom usługę:

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

Obie komendy powinny zakończyć się bez błędów. Jeśli widzisz "Failed to start fix-i2s4-pins.service: Unit not found", plik usługi nie został utworzony poprawnie. Sprawdź logi:

sudo journalctl -u fix-i2s4-pins

Krok 4: skieruj I2S4 do sterownika dźwięku

Połącz interfejs I2S4 z systemem audio:

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

Wynik powinien kończyć się na values=1. Jeśli pojawia się błąd "Invalid card", sterownik audio jeszcze się nie załadował. Uruchom urządzenie ponownie i spróbuj jeszcze raz.

To kieruje interfejs ADMAIF1, do którego sterownik wysyła audio, do I2S4, łącząc sterownik z fizycznymi pinami.

Krok 5: odtwórz ton testowy

Ta komenda wysyła przez interfejs I2S4 sinusoidę stereo o próbkowaniu 48 kHz i rozdzielczości 16 bitów:

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

W słuchawkach lub głośnikach powinien być słyszalny ciągły ton. Naciśnij Ctrl+C, aby go zatrzymać.

Jak potwierdzić działanie płytki Audio+

Jeśli ton był słyszalny, Raspiaudio Audio+ działa na twoim Jetson Nano B02. Poprawka pinów przetrwa restart dzięki usłudze z kroku 3.

Dodatkowo: jak wgrać własny DTB do Jetson Nano

Powyższa metoda działa dla jednego urządzenia. Jeśli potrzebujesz wgrać obraz na kilka płyt Jetson Nano do produkcji, przechodzenie menu jetson-io na każdej jest uciążliwe. Zamiast tego wgraj na każdą płytę plik DTB (Device Tree Blob) utworzony w kroku 1, aby konfiguracja pinów była już gotowa:

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

Skopiuj ten plik na komputer. Podczas ponownego wgrywania skopiuj go z powrotem do folderu /boot/ przed pierwszym rozruchem.

Ważne: jaki model Jetson Nano posiadasz?

Ten plik DTB pasuje tylko do rewizji płyty nośnej, na której został utworzony. Rewizja znajduje się na końcu nazwy pliku: tutaj b00. Wgranie DTB z innej rewizji może uszkodzić partycję rozruchową; wtedy konieczne może być ponowne wgranie całości z komputera hosta.

Najłatwiej wgrać obraz na Jetson Nano z komputera hosta z Linux, używając NVIDIA SDK Manager albo NVIDIA Jetson Linux Driver Package (L4T). Polecam L4T, ponieważ działa na większej liczbie dystrybucji Linux. Pełna procedura jest w wątku forum NVIDIA o ręcznym pobieraniu i wgrywaniu L4T. Oto skrócona wersja.

Pobierz L4T z archiwum NVIDIA Jetson Linux. Dla Jetson Nano użyj serii Jetson Linux 32.7.x, a nie nowszej gałęzi JetPack. Na stronie wydania pobierz Driver Package (BSP) i Sample Root Filesystem. Rozpakuj pakiet sterowników bez sudo, a potem przykładowy główny system plików z sudo do Linux_for_Tegra/rootfs/.

Następnie z folderu Linux_for_Tegra zastosuj pliki binarne NVIDIA:

sudo ./apply_binaries.sh

Potem połącz Jetson Nano z komputerem hosta przez micro USB. Nano musi być zasilany osobnym zasilaczem 5 V.

Oto przykład komendy wgrywającej twój własny plik DTB na Jetson Nano. Uruchom ją na komputerze hosta po skopiowaniu na niego własnego DTB z Nano. Zastąp ścieżkę swoją.

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

Aby wgrać obraz, może być konieczne przełączenie Jetson Nano w tryb odzyskiwania:

  1. Zasil Jetson Nano z zasilacza 5 V, nie przez micro USB.
  2. Połącz pin "FC RCV" (wymuszenie odzyskiwania) z pinem "GND" przewodem, spinaczem lub małym śrubokrętem.
  3. Połącz pin "SYS_RST" (reset systemu) z pinem "GND", aby ponownie uruchomić Jetson Nano.
  4. Połącz Nano z komputerem hosta przez micro USB.

Sprawdź połączenie na komputerze hosta:

lsusb | grep -i nvidia

Po wgraniu nadal trzeba dodać usługę systemd z kroku 3, aby piny były poprawnie ustawiane przy każdym rozruchu.

Powiązane poradniki

Gdy płytka odtwarza dźwięk, te poradniki opisują projekty audio z sieciami neuronowymi na małych komputerach jednopłytkowych:

  • Model RAVE od IRCAM: lekka konfiguracja "raspberry" i zewnętrzny moduł nn~ są przeznaczone dla płyt wbudowanych w przenośnych instalacjach.
  • Darmowe neuronowe wtyczki gitarowe: ToobAmp i Stompbox uruchamiają neuronowe modele wzmacniaczy w efektach gitarowych na Raspberry Pi.
  • DDSP od Google Magenta: obejmuje Open NSynth Super, neuronowy syntezator zbudowany na Raspberry Pi.
Zmasteruj swój utwór w kilka sekund
Automatycznie osiągnij -14 LUFS. Zachowaj charakter utworu. Audio gotowe do streamingu, które zachowuje to, co wyróżnia Twoją muzykę. Prosto z przeglądarki.