Jetson Nano I2S 音频:如何配置 Raspiaudio Audio+
在 Jetson Nano 上配置 Raspiaudio Audio+,需要在 jetson-io 中启用 I2S4 引脚,每次启动时强制将引脚设为音频模式,并将 I2S4 连接到声音驱动。Jetson Nano 开发套件面向 AI 与机器人,但没有模拟音频输出。Raspiaudio Audio+ 板卡是为 Raspberry Pi 设计的声卡,也能安装在 Nano 的 40 针排针上。
本指南介绍 Jetson Nano B02(2019)的全部配置步骤。完成后,您将能从 Audio+ 耳机插孔听到声音。
开始前: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 DAC 没有控制接口,只有 I2S 接口。如这篇 NVIDIA 论坛讨论:Jetson Nano 使用 Raspberry Pi I2S 声卡所述,配置好引脚后,这类板卡应能工作。因此,下面步骤也适合作为在 Nano B02 上配置同类 I2S DAC 的起点。
特别感谢 jas-mx 的 NVIDIA 论坛帖子:启用 40 针连接器的 I2S 音频输出,它启发了本指南。
步骤 1:用 jetson-io 启用 I2S4 音频引脚
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”表示引脚处于 I2S 音频所需的特殊功能(SFIO)模式。“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 引脚强制设为 I2S4 所需的 SFIO 模式。
启用并启动服务:
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:播放测试音
此命令通过 I2S4 接口发送 48 kHz、16 位立体声正弦波:
speaker-test -D hw:tegrasndt210ref,0 -r 48000 -c 2 -F S16_LE -t sine
您应从耳机或扬声器听到持续音。按 Ctrl+C 停止。
如何确认 Audio+ 板卡已工作
如果听到了测试音,Raspiaudio Audio+ 就已在 Jetson Nano B02 上工作。步骤 3 的服务会让引脚修复在重启后仍生效。
补充:如何用自定义 DTB 为 Jetson Nano 刷机
以上方法适用于单台设备。若需为生产环境中的多块 Jetson Nano 刷机,逐台操作 jetson-io 菜单会很繁琐。可改用步骤 1 创建的 DTB(设备树二进制文件,Device Tree Blob)文件为每块板卡刷机,预先完成引脚配置:
/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。下面是简要步骤。
从 NVIDIA Jetson Linux 归档下载 L4T。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
接下来用 micro USB 将 Jetson Nano 连接到主机。Nano 必须由独立 5V 电源供电。
下面的示例命令用自定义 DTB 文件为 Jetson Nano 刷机。先将自定义 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 进入恢复模式:
- 用 5V 电源为 Jetson Nano 供电,而不是通过 micro USB。
- 用跳线、回形针或小螺丝刀,将“FC RCV”(强制恢复)引脚连接到“GND”引脚。
- 将“SYS_RST”(系统复位)引脚连接到“GND”引脚,重启 Jetson Nano。
- 用 micro USB 将 Nano 连接到主机。
在主机用以下命令检查连接:
lsusb | grep -i nvidia
刷机后,仍需加入步骤 3 的 systemd 服务,让每次启动都正确设置引脚。
相关指南
板卡能播放声音后,以下指南介绍了面向小型单板电脑的神经音频项目:
- IRCAM 的 RAVE 模型:其轻量“raspberry”配置与 nn~ 扩展面向嵌入式板卡,适合便携装置。
- 免费神经网络吉他插件:ToobAmp 与 Stompbox 在 Raspberry Pi 效果器踏板装置上运行神经放大器模型。
- Google Magenta 的 DDSP:包含 Open NSynth Super,这是一款基于 Raspberry Pi 的神经合成器。