صوت I2S على Jetson Nano: إعداد Raspiaudio Audio+

لإعداد Raspiaudio Audio+ على Jetson Nano، فعلوا أطراف I2S4 في jetson-io، واضبطوا هذه الأطراف على وضع الصوت عند كل إقلاع، ووجهوا I2S4 إلى برنامج تشغيل الصوت. صممت مجموعة تطوير Jetson Nano للذكاء الاصطناعي والروبوتات، لكنها لا تحتوي على مخرج صوت تناظري. لوحة Raspiaudio Audio+ بطاقة صوت مصممة لـRaspberry Pi، وتناسب أيضا موصل Nano ذي 40 طرفا.

يشرح هذا الدليل كل خطوة على Jetson Nano B02 (2019). في النهاية، ستسمعون الصوت من مقبس سماعات Audio+.

أجروا الماسترينغ لأغنيتكم خلال ثوان
حققوا -14 LUFS تلقائيا. حافظوا على طابع أغنيتكم. صوت جاهز للبث يحتفظ بما يميز موسيقاكم. من المتصفح مباشرة.

قبل البدء: طراز Jetson Nano وتوافق Audio+

أعدوا Jetson Nano أولا. إن لم تفعلوا ذلك، اتبعوا دليل NVIDIA لإعداد Jetson Nano. ينبغي أن تتمكنوا من إقلاع Nano إلى سطح المكتب باستخدام شاشة ولوحة مفاتيح.

ما تحتاجون إليه: Jetson Nano B02 ولوحة Raspiaudio Audio+. يناسب موصل Audio+ ذي 40 طرفا موصل Nano مباشرة. اضغطوا عليه بثبات لضمان تلامس كل الأطراف.

اختبر هذا الدليل على مجموعة تطوير Jetson Nano B02 (2019)، التي تسمى أيضا P3450 (وحدة P3448 على اللوحة الحاملة P3449). يمكن تمييز Jetson Nano بمشتته الحراري الذي يعمل دون مروحة؛ إذ تستخدم طرز Jetson الأحدث مراوح. يحتوي B02 أيضا على صف أطراف بارز يشكل منطقة صغيرة ناتئة، وهو غير موجود في طراز A01 الأقدم.

إذا كان لديكم طراز A01 الأقدم أو Jetson أحدث، استخدموا هذا الدليل مرجعا فقط، فالخطوات لا تنطبق مباشرة. يمكنكم مشاركة نصائحكم في مجتمع Raspiaudio.

لوحات I2S DAC الأخرى: لا تحتوي Audio+ ومحولات Raspberry Pi المشابهة على واجهة تحكم، بل على واجهة I2S فقط. يوضح نقاش منتدى NVIDIA عن بطاقات صوت Raspberry Pi بنظام I2S على Jetson Nano أن هذه اللوحات يفترض أن تعمل بعد ضبط الأطراف. لذا تعد الخطوات التالية نقطة بداية مناسبة لمحولات I2S DAC الأخرى من هذا النوع على Nano B02.

شكر خاص لـjas-mx على مشاركة منتدى NVIDIA عن تفعيل مخرج صوت I2S على موصل 40 طرفا، التي ألهمت هذا الدليل.

الخطوة 1: تفعيل أطراف صوت I2S4 باستخدام jetson-io

لا يستخدم Jetson Nano هذه الأطراف للصوت افتراضيا. شغلوا Nano مع شاشة ولوحة مفاتيح، وافتحوا طرفية، ونفذوا:

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

يفتح هذا أداة تعمل بالقوائم:

  1. استخدموا مفاتيح الأسهم (أعلى/أسفل) لتحديد "Configure Jetson 40pin Header" واضغطوا Enter
  2. اختاروا "Configure header pins manually" واضغطوا Enter
  3. في قائمة خانات الاختيار، ابحثوا عن "i2s4" (الأطراف 12، 35، 38، 40) و**"audio_mclk"** (الطرف 7). اضغطوا Space على كل منهما لتحديده بعلامة النجمة [*].
  4. اختاروا "Back"
  5. اختاروا "Save pin changes"
  6. اختاروا "Save and reboot to reconfigure pins"

يعاد تشغيل Jetson Nano. تكتب الأداة شجرة أجهزة مخصصة (DTB) تخصص هذه الأطراف للصوت، وتحفظها في /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

الخطوة 2: التحقق من أن الأطراف في وضع I2S

بعد إعادة التشغيل، افحصوا وضع الأطراف:

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

ينبغي أن يظهر: J: 2:1 00 00 00 00 00 00 000000
إذا ظهر "f0" في أي موضع (مثل "f0 00 00")، يلزم تطبيق الإصلاح التالي.
يعني "00" أن الأطراف في وضع الوظيفة الخاصة (SFIO) لصوت I2S. يعني "f0" أنها عالقة في وضع GPIO.

الخطوة 3: إصلاح وضع الأطراف بخدمة systemd عند الحاجة

في كثير من لوحات B02، لا تتحول الأطراف إلى وضع الصوت. يصلح هذا الأمر المشكلة:

sudo busybox devmem 0x6000d204 32 0

يفرض الأمر الوضع الصحيح على الأطراف، لكنها تعود إلى وضع GPIO عند إعادة التشغيل. لتطبيق الإصلاح عند كل إقلاع، أنشئوا خدمة 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

تكتب خدمة بدء التشغيل هذه في مسجل تهيئة GPIO ذي العنوان 0x6000d204، فتفرض على أطراف Port J وضع SFIO لـI2S4.

فعلوا الخدمة وشغلوها:

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

ينبغي أن ينفذ الأمران دون أخطاء. إذا ظهر "Failed to start fix-i2s4-pins.service: Unit not found"، فلم ينشأ ملف الخدمة بصورة صحيحة. افحصوا السجلات:

sudo journalctl -u fix-i2s4-pins

الخطوة 4: توجيه I2S4 إلى برنامج تشغيل الصوت

اربطوا واجهة I2S4 بنظام الصوت:

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

ينبغي أن ينتهي الإخراج بـvalues=1. إذا ظهر خطأ "Invalid card"، فإن برنامج تشغيل الصوت لم يحمل بعد. أعيدوا التشغيل وحاولوا مجددا.

يوجه هذا واجهة ADMAIF1 (التي يرسل عبرها برنامج التشغيل الصوت) إلى I2S4، ويربط برنامج التشغيل بأطراف العتاد.

الخطوة 5: تشغيل نغمة اختبار

يرسل هذا الأمر موجة جيبية ستيريو بمعدل 48 kHz وعمق 16 بت عبر واجهة I2S4:

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

ينبغي أن تسمعوا نغمة متصلة من السماعات أو مكبرات الصوت. اضغطوا Ctrl+C لإيقافها.

كيفية التأكد من عمل لوحة Audio+

إذا سمعتم النغمة، فإن Raspiaudio Audio+ تعمل على Jetson Nano B02. يستمر إصلاح الأطراف بعد إعادة التشغيل بفضل خدمة الخطوة 3.

إضافي: تفليش Jetson Nano باستخدام DTB المخصص

تعمل الطريقة السابقة لجهاز واحد. إذا احتجتم إلى تفليش عدة لوحات Jetson Nano للإنتاج، يصبح المرور بقوائم jetson-io على كل لوحة مرهقا. بدلا من ذلك، فلشوا كل لوحة بملف DTB (ملف شجرة الأجهزة الثنائي، Device Tree Blob) الذي أنشئ في الخطوة 1، لتكون تهيئة الأطراف جاهزة:

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

انسخوا هذا الملف إلى حاسوبكم. عند إعادة التفليش، أعيدوا نسخه إلى مجلد /boot/ قبل الإقلاع الأول.

مهم: أي طراز Jetson Nano لديكم؟

يطابق ملف DTB هذا إصدار اللوحة الحاملة التي أنشئ عليها فقط. يظهر الإصدار في نهاية اسم الملف (هنا b00). قد يؤدي تفليش DTB من إصدار آخر إلى تعطيل قسم الإقلاع، وقد تحتاجون حينها إلى إعادة تفليش كل شيء من حاسوب مضيف.

أسهل طريقة لتفليش Jetson Nano هي استخدام حاسوب Linux مضيف مع NVIDIA SDK Manager أو NVIDIA Jetson Linux Driver Package (L4T). أوصي بـL4T لأنه يعمل على توزيعات Linux أكثر. توجد الخطوات الكاملة في نقاش منتدى NVIDIA عن تنزيل L4T وتفليشه يدويا. فيما يلي النسخة المختصرة.

نزلوا L4T من أرشيف NVIDIA Jetson Linux. استخدموا سلسلة Jetson Linux 32.7.x لـJetson Nano، ولا تستخدموا فرع JetPack أحدث. في صفحة الإصدار، نزلوا Driver Package (BSP) وSample Root Filesystem. فكوا ضغط حزمة برنامج التشغيل دون sudo، ثم فكوا نظام الملفات الجذري النموذجي باستخدام sudo داخل Linux_for_Tegra/rootfs/.

بعد ذلك، طبقوا ملفات NVIDIA الثنائية من مجلد Linux_for_Tegra:

sudo ./apply_binaries.sh

اربطوا Jetson Nano بحاسوبكم المضيف عبر micro USB. يجب تشغيل Nano بمصدر طاقة منفصل بجهد 5V.

يوضح الأمر التالي مثالا لتفليش Jetson Nano بملف DTB المخصص. نفذوه على الحاسوب المضيف بعد نسخ DTB المخصص من Nano إلى المضيف. استبدلوا المسار بمسار ملفكم.

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

قد تحتاجون إلى وضع Jetson Nano في وضع الاسترداد للتفليش:

  1. شغلوا Jetson Nano بمصدر طاقة 5V (وليس عبر micro USB).
  2. اربطوا طرف "FC RCV" (فرض الاسترداد) بطرف "GND" باستخدام سلك توصيل أو مشبك ورق أو مفك صغير.
  3. اربطوا طرف "SYS_RST" (إعادة ضبط النظام) بطرف "GND" لإعادة تشغيل Jetson Nano.
  4. اربطوا Nano بحاسوبكم المضيف عبر micro USB.

افحصوا الاتصال على الحاسوب المضيف باستخدام:

lsusb | grep -i nvidia

بعد التفليش، ما زلتم تحتاجون إلى إضافة خدمة systemd من الخطوة 3 لضبط الأطراف بصورة صحيحة عند كل إقلاع.

أدلة ذات صلة

بعد تشغيل الصوت عبر اللوحة، تغطي الأدلة التالية مشاريع صوت عصبية لحواسيب صغيرة ذات لوحة واحدة:

أجروا الماسترينغ لأغنيتكم خلال ثوان
حققوا -14 LUFS تلقائيا. حافظوا على طابع أغنيتكم. صوت جاهز للبث يحتفظ بما يميز موسيقاكم. من المتصفح مباشرة.