Аудио I2S на Jetson Nano: как настроить Raspiaudio Audio+
Чтобы настроить Raspiaudio Audio+ на Jetson Nano, включите контакты I2S4 в jetson-io, переводите их в аудиорежим при каждой загрузке и направьте I2S4 к звуковому драйверу. Набор разработчика Jetson Nano предназначен для ИИ и робототехники, но не имеет аналогового аудиовыхода. Плата Raspiaudio Audio+ — звуковая карта для Raspberry Pi, которая подходит и к 40-контактному разъёму Nano.
Руководство описывает все шаги для Jetson Nano B02 (2019). В конце вы услышите звук из разъёма наушников Audio+.
Перед началом: модель Jetson Nano и совместимость Audio+
Сначала настройте Jetson Nano. Если ещё не сделали этого, следуйте руководству NVIDIA по настройке Jetson Nano. Nano должен загружаться до рабочего стола с подключёнными монитором и клавиатурой.
Что понадобится: Jetson Nano B02 и плата Raspiaudio Audio+. 40-контактный разъём Audio+ устанавливается прямо на разъём Nano. Плотно прижмите плату, чтобы каждый контакт был подключён.
Руководство проверено на наборе разработчика Jetson Nano B02 (2019), также известном как P3450 (модуль P3448 на несущей плате P3449). Jetson Nano можно узнать по пассивному радиатору: более новые модели Jetson используют вентиляторы. У B02 также есть выступающий ряд контактов, похожий на небольшой «отсек», которого нет у старой модели A01.
Если у вас более старая A01 или более новый Jetson, используйте руководство только как справочный материал: шаги не подходят напрямую. Своими советами можно поделиться в сообществе Raspiaudio.
Другие платы ЦАП I2S: Audio+ и похожие ЦАП для Raspberry Pi не имеют интерфейса управления, только интерфейс I2S. Как объясняется в обсуждении NVIDIA звуковых карт I2S Raspberry Pi для Jetson Nano, такие платы должны работать после настройки контактов. Поэтому приведённые ниже шаги подходят как отправная точка и для других ЦАП I2S такого типа на Nano B02.
Особая благодарность jas-mx за сообщение на форуме NVIDIA о включении аудиовыхода I2S на 40-контактном разъёме, которое вдохновило на написание этого руководства.
Шаг 1: включите аудиоконтакты I2S4 через jetson-io
По умолчанию Jetson Nano не использует эти контакты разъёма для аудио. Загрузите Nano с монитором и клавиатурой, откройте терминал и выполните:
sudo /opt/nvidia/jetson-io/jetson-io.py
Откроется инструмент с меню:
- Стрелками вверх и вниз выделите "Configure Jetson 40pin Header" и нажмите Enter
- Выберите "Configure header pins manually" и нажмите Enter
- В списке флажков найдите "i2s4" (контакты 12, 35, 38, 40) и "audio_mclk" (контакт 7). Нажмите Space на каждом, чтобы отметить звёздочкой [*].
- Выберите "Back"
- Выберите "Save pin changes"
- Выберите "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/ до первой загрузки.
Этот DTB подходит только к той ревизии несущей платы, на которой был создан. Ревизия находится в конце имени файла: здесь b00. Прошивка DTB от другой ревизии может повредить загрузочный раздел, после чего может понадобиться полностью прошить устройство заново с компьютера-хоста.
Проще всего прошить Jetson Nano с Linux-компьютера-хоста через NVIDIA SDK Manager или NVIDIA Jetson Linux Driver Package (L4T). Я рекомендую L4T, поскольку он работает на большем числе дистрибутивов Linux. Полная процедура описана в обсуждении NVIDIA о ручном скачивании и прошивке L4T. Ниже краткая версия.
Скачайте L4T из архива NVIDIA Jetson Linux. Для Jetson Nano используйте серию Jetson Linux 32.7.x, а не более новую ветку JetPack. На странице релиза скачайте Driver Package (BSP) и Sample Root Filesystem. Распакуйте пакет драйверов без sudo, затем распакуйте образ корневой файловой системы с sudo в Linux_for_Tegra/rootfs/.
Затем из папки Linux_for_Tegra примените бинарные файлы NVIDIA:
sudo ./apply_binaries.sh
Теперь подключите Jetson Nano к компьютеру-хосту через micro USB. Nano должен получать питание от отдельного источника 5 V.
Вот пример команды для прошивки 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 в режим восстановления:
- Запитайте Jetson Nano от источника 5 V, а не через micro USB.
- Соедините контакт "FC RCV" (принудительное восстановление) с контактом "GND" перемычкой, скрепкой или небольшой отвёрткой.
- Соедините контакт "SYS_RST" (системный сброс) с контактом "GND", чтобы перезапустить Jetson Nano.
- Подключите Nano к компьютеру-хосту через micro USB.
Проверьте подключение на компьютере-хосте:
lsusb | grep -i nvidia
После прошивки всё равно нужно добавить службу systemd из шага 3, чтобы контакты правильно настраивались при каждой загрузке.
Связанные руководства
Когда плата воспроизводит звук, эти руководства помогут с нейросетевыми аудиопроектами для небольших одноплатных компьютеров:
- Модель RAVE от IRCAM: облегчённая конфигурация "raspberry" и внешний модуль nn~ предназначены для встраиваемых плат в переносных установках.
- Бесплатные нейросетевые гитарные плагины: ToobAmp и Stompbox запускают нейросетевые модели усилителей в педалях на Raspberry Pi.
- DDSP от Google Magenta: включает Open NSynth Super, нейросетевой синтезатор на Raspberry Pi.