Jetson Nano I2S Ses: Raspiaudio Audio+ Nasıl Kurulur?
Raspiaudio Audio+ kartını Jetson Nano’ya kurmak için jetson-io ile I2S4 pinlerini etkinleştirmeniz, her açılışta bu pinleri ses moduna zorlamanız ve I2S4’ü ses sürücüsüne yönlendirmeniz gerekir. Jetson Nano geliştirici kiti yapay zekâ ve robotik için tasarlanmıştır, ancak analog ses çıkışı yoktur. Raspiaudio Audio+ kartı, Raspberry Pi için tasarlanmış ve Nano’nun 40 pinli bağlantı sırasına da uyan bir ses kartıdır.
Bu rehber, Jetson Nano B02 (2019) için tüm adımları kapsar. İşlemleri tamamladığınızda Audio+ kulaklık çıkışından ses duyacaksınız.
Başlamadan Önce: Jetson Nano Modeli ve Audio+ Uyumluluğu
Önce Jetson Nano’nuzu kurun. Henüz kurmadıysanız NVIDIA’nın Jetson Nano kurulum rehberini izleyin. Nano’yu bir monitör ve klavyeyle açıp masaüstüne ulaşabiliyor olmalısınız.
Gerekenler: bir Jetson Nano B02 ve bir Raspiaudio Audio+ kartı. Audio+ kartının 40 pinli konnektörü Nano’nun bağlantı sırasına doğrudan oturur. Her pinin temas etmesi için kartı sıkıca bastırın.
Bu rehber, P3450 olarak da bilinen Jetson Nano B02 geliştirici kitinde (2019) test edildi (P3449 taşıyıcı kartı üzerindeki P3448 modülü). Jetson Nano’yu pasif soğutucusundan tanıyabilirsiniz; daha yeni Jetson modelleri fan kullanır. B02’de ayrıca küçük bir çıkıntıyı andıran bir pin sırası vardır; eski A01 modelinde bu bulunmaz.
Eski A01 modeliniz veya daha yeni bir Jetson’unuz varsa bu rehberi yalnızca referans olarak kullanın, çünkü adımlar doğrudan uygulanamaz. İpuçlarınızı Raspiaudio topluluğunda paylaşabilirsiniz.
Diğer I2S DAC kartları: Audio+ ve benzer Raspberry Pi DAC’larında kontrol arayüzü yoktur, yalnızca I2S arayüzü vardır. Jetson Nano için Raspberry Pi I2S ses kartlarını ele alan bu NVIDIA forum başlığında açıklandığı gibi, pinler yapılandırıldıktan sonra bu kartların çalışması beklenir. Dolayısıyla aşağıdaki adımlar Nano B02 üzerinde bu tür diğer I2S DAC’lar için de iyi bir başlangıç noktasıdır.
Bu rehbere ilham veren 40 pinli konnektörde I2S ses çıkışını etkinleştirmeye ilişkin NVIDIA forum paylaşımı için jas-mx’e özel teşekkürler.
Adım 1: jetson-io ile I2S4 Ses Pinlerini Etkinleştirin
Jetson Nano varsayılan olarak bağlantı sırasındaki bu pinleri ses için kullanmaz. Nano’yu bir monitör ve klavyeyle açın, bir terminal açın ve şu komutu çalıştırın:
sudo /opt/nvidia/jetson-io/jetson-io.py
Bu komut menü üzerinden kullanılan bir araç açar:
- Yukarı/aşağı ok tuşlarıyla "Configure Jetson 40pin Header" seçeneğini vurgulayın ve Enter tuşuna basın
- "Configure header pins manually" seçeneğini seçin ve Enter tuşuna basın
- Onay kutuları listesinde "i2s4" (12, 35, 38, 40 numaralı pinler) ve "audio_mclk" (7 numaralı pin) seçeneklerini bulun. Her birinin üzerinde Space tuşuna basarak yıldızla [*] işaretleyin.
- "Back" seçeneğini seçin
- "Save pin changes" seçeneğini seçin
- "Save and reboot to reconfigure pins" seçeneğini seçin
Jetson Nano yeniden başlar. Araç, bu pinleri ses işlevine atayan özel bir aygıt ağacı (DTB) oluşturur ve /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb yoluna kaydeder.
Adım 2: Pinlerin I2S Modunda Olduğunu Kontrol Edin
Yeniden başlatmanın ardından pin modunu kontrol edin:
sudo cat /sys/kernel/debug/tegra_gpio | grep "J:"
Şunu görmelisiniz: J: 2:1 00 00 00 00 00 00 000000
Herhangi bir yerde "f0" görürseniz (örneğin "f0 00 00"), aşağıdaki düzeltme gereklidir.
"00", pinlerin I2S ses için özel işlev (SFIO) modunda olduğunu gösterir. "f0", pinlerin GPIO modunda kaldığını gösterir.
Adım 3: Gerekirse Pinleri Bir systemd Hizmetiyle Düzeltin
Birçok B02 kartında pinler ses moduna geçmez. Şu komut sorunu düzeltir:
sudo busybox devmem 0x6000d204 32 0
Bu komut pinleri doğru moda zorlar, ancak yeniden başlattığınızda pinler GPIO moduna geri döner. Düzeltmeyi her açılışta uygulamak için bir systemd hizmeti oluşturun:
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
Bu başlangıç hizmeti GPIO yapılandırma yazmacı 0x6000d204’e yazarak Port J pinlerini I2S4 için SFIO moduna zorlar.
Hizmeti etkinleştirin ve başlatın:
sudo systemctl enable fix-i2s4-pins
sudo systemctl start fix-i2s4-pins
Her iki komut da hatasız tamamlanmalıdır. "Failed to start fix-i2s4-pins.service: Unit not found" mesajını görürseniz hizmet dosyası doğru oluşturulmamıştır. Günlükleri kontrol edin:
sudo journalctl -u fix-i2s4-pins
Adım 4: I2S4’ü Ses Sürücüsüne Yönlendirin
I2S4 arayüzünü ses sistemine bağlayın:
amixer -c tegrasndt210ref cset name='I2S4 Mux' ADMAIF1
Çıktı values=1 ile bitmelidir. "Invalid card" hatası alırsanız ses sürücüsü henüz yüklenmemiştir. Yeniden başlatıp tekrar deneyin.
Bu işlem, ADMAIF1 arayüzünü (ses sürücüsünün sesi gönderdiği arayüz) I2S4’e yönlendirerek sürücüyü donanım pinlerine bağlar.
Adım 5: Bir Test Tonu Çalın
Bu komut, I2S4 arayüzü üzerinden 48 kHz örnekleme hızında, 16 bitlik stereo sinüs dalgası gönderir:
speaker-test -D hw:tegrasndt210ref,0 -r 48000 -c 2 -F S16_LE -t sine
Kulaklığınızdan veya hoparlörlerinizden kesintisiz bir ton duymalısınız. Durdurmak için Ctrl+C tuşlarına basın.
Audio+ Kartının Çalıştığını Nasıl Doğrularsınız?
Tonu duyduysanız Raspiaudio Audio+ kartı Jetson Nano B02’nizde çalışıyor demektir. Adım 3’teki hizmet sayesinde pin düzeltmesi yeniden başlatmalardan sonra da geçerli kalır.
Ek: Jetson Nano’ya Özel DTB Nasıl Yazılır?
Yukarıdaki yöntem tek bir cihaz için uygundur. Üretim için birden fazla Jetson Nano kartına yazılım yüklemeniz gerekiyorsa her birinde jetson-io menülerini kullanmak zahmetli hâle gelir. Bunun yerine Adım 1’de oluşturulan DTB (Device Tree Blob, aygıt ağacının ikili dosyası) dosyasını her karta yazın; böylece pin yapılandırması hazır olur:
/boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
Bu dosyayı bilgisayarınıza kopyalayın. Sistemi yeniden yazarken dosyayı ilk açılıştan önce /boot/ klasörüne geri kopyalayın.
Bu DTB dosyası yalnızca oluşturulduğu taşıyıcı kart revizyonuyla eşleşir. Revizyon dosya adının sonundadır (burada b00). Farklı bir revizyonun DTB dosyasını yazmak önyükleme bölümünü bozabilir; bu durumda her şeyi bir ana bilgisayardan yeniden yazmanız gerekebilir.
Jetson Nano’ya sistemi yazmanın en kolay yolu, bir Linux ana bilgisayarda NVIDIA SDK Manager veya NVIDIA Jetson Linux Driver Package (L4T) kullanmaktır. Daha fazla Linux dağıtımında çalıştığı için L4T’yi öneriyorum. Tüm işlem L4T’yi elle indirme ve yazmaya ilişkin bu NVIDIA forum başlığında açıklanıyor. Kısa sürümü aşağıda bulabilirsiniz.
NVIDIA Jetson Linux arşivinden L4T’yi indirin. Jetson Nano için daha yeni bir JetPack sürüm dalı yerine Jetson Linux 32.7.x serisini kullanın. Sürüm sayfasında Driver Package (BSP) ve Sample Root Filesystem dosyalarını indirin. Sürücü paketini sudo kullanmadan arşivden çıkarın, ardından örnek kök dosya sistemini sudo kullanarak Linux_for_Tegra/rootfs/ içine çıkarın.
Ardından Linux_for_Tegra klasöründe NVIDIA’nın ikili dosyalarını uygulayın:
sudo ./apply_binaries.sh
Sonra Jetson Nano’yu micro USB üzerinden ana bilgisayarınıza bağlayın. Nano’ya ayrı bir 5 V güç kaynağından güç verilmelidir.
Aşağıdaki örnek komut Jetson Nano’ya özel DTB dosyanızı yazar. Özel DTB dosyasını Nano’dan ana bilgisayara kopyaladıktan sonra komutu ana bilgisayarda çalıştırın. Dosya yolunu kendi yolunuzla değiştirin.
sudo ./flash.sh -k DTB
-d /path/to/your/file/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
jetson-nano-devkit mmcblk1p1
Yazma işlemi için Jetson Nano’yu kurtarma moduna almanız gerekebilir:
- Jetson Nano’ya 5 V güç kaynağından güç verin (micro USB üzerinden değil).
- "FC RCV" (kurtarmayı zorla) pinini bir bağlantı kablosu, ataş veya küçük tornavida ile bir "GND" pinine bağlayın.
- Jetson Nano’yu yeniden başlatmak için "SYS_RST" (sistem sıfırlama) pinini bir "GND" pinine bağlayın.
- Nano’yu micro USB üzerinden ana bilgisayarınıza bağlayın.
Ana bilgisayarınızda bağlantıyı şu komutla kontrol edin:
lsusb | grep -i nvidia
Yazma işleminden sonra da pinlerin her açılışta doğru ayarlanması için Adım 3’teki systemd hizmetini eklemeniz gerekir.
İlgili Rehberler
Kart ses çalmaya başladığında aşağıdaki rehberler küçük tek kartlı bilgisayarlar için sinir ağı tabanlı ses projelerini tanıtır:
- IRCAM’ın RAVE modeli: hafif "raspberry" yapılandırması ve nn~ harici modülü, taşınabilir kurulumlar için gömülü kartları hedefler.
- Ücretsiz sinir ağı tabanlı gitar eklentileri: ToobAmp ve Stompbox, Raspberry Pi ile yapılan pedallarda sinir ağı tabanlı amfi modellerini çalıştırır.
- Google Magenta’nın DDSP modeli: Raspberry Pi üzerine kurulmuş sinir ağı tabanlı bir sentezleyici olan Open NSynth Super’i içerir.