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+ 헤드폰 단자에서 오디오를 들을 수 있습니다.

몇 초 만에 트랙을 마스터링하세요
자동으로 -14 LUFS에 맞추고 트랙의 개성을 유지하세요. 음악만의 매력을 살린 스트리밍용 오디오를 만듭니다. 브라우저에서 바로 진행하세요.

시작하기 전에: Jetson Nano 모델과 Audio+ 호환성

먼저 Jetson Nano를 설정하세요. 아직 하지 않았다면 NVIDIA의 Jetson Nano 설정 가이드를 따르세요. 모니터와 키보드로 Nano를 데스크톱까지 부팅할 수 있어야 합니다.

준비물: Jetson Nano B02와 Raspiaudio Audio+ 보드입니다. Audio+의 40핀 커넥터는 Nano 헤더에 바로 맞습니다. 모든 핀이 접촉하도록 단단히 눌러 장착하세요.

이 가이드는 P3450이라고도 하는 Jetson Nano B02 개발 키트(2019)에서 테스트했습니다. P3449 캐리어 보드에 P3448 모듈이 장착된 구성입니다. Jetson Nano는 수동 방열판으로 구별할 수 있으며, 더 최근의 Jetson 모델은 팬을 사용합니다. B02에는 작은 ‘돌출 구역’처럼 튀어나온 핀 열도 있는데 이전 A01 모델에는 없습니다.

이전 A01 모델이나 더 최근의 Jetson이라면 단계가 그대로 적용되지 않으므로 이 가이드는 참고용으로만 사용하세요. Raspiaudio 커뮤니티에서 팁을 공유할 수 있습니다.

다른 I2S DAC 보드: Audio+와 비슷한 Raspberry Pi DAC에는 제어 인터페이스가 없고 I2S 인터페이스만 있습니다. Jetson Nano용 Raspberry Pi I2S 사운드 카드에 관한 NVIDIA 포럼 글에 따르면 핀을 설정하면 이런 보드도 작동할 것으로 예상됩니다. 따라서 아래 단계는 Nano B02에 이 유형의 다른 I2S DAC를 설정할 때도 좋은 출발점입니다.

이 가이드에 영감을 준 40핀 커넥터의 I2S 오디오 출력 활성화에 관한 NVIDIA 포럼 글을 작성한 jas-mx에게 감사드립니다.

1단계: jetson-io로 I2S4 오디오 핀 활성화하기

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"은 핀이 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+ 보드가 작동하는지 확인하기

음이 들렸다면 Jetson Nano B02에서 Raspiaudio Audio+가 작동하는 것입니다. 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/ 폴더로 다시 복사하세요.

중요: 어떤 Jetson Nano를 사용하나요?

이 DTB 파일은 생성 당시의 캐리어 보드 리비전에만 맞습니다. 리비전은 파일 이름 끝에 있으며, 여기서는 b00입니다. 다른 리비전의 DTB를 플래시하면 부팅 파티션이 손상될 수 있고, 호스트 컴퓨터에서 전체를 다시 플래시해야 할 수 있습니다.

Jetson Nano를 플래시하는 가장 쉬운 방법은 Linux 호스트 컴퓨터에서 NVIDIA SDK Manager 또는 NVIDIA Jetson Linux Driver Package(L4T)를 사용하는 것입니다. 더 많은 Linux 배포판에서 작동하므로 L4T를 권장합니다. 전체 절차는 L4T 수동 다운로드와 플래시에 관한 NVIDIA 포럼 글에 있습니다. 아래는 요약한 절차입니다.

NVIDIA Jetson Linux 아카이브에서 L4T를 다운로드하세요. Jetson Nano에는 최신 JetPack 브랜치가 아닌 Jetson Linux 32.7.x 계열을 사용하세요. 릴리스 페이지에서 **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를 플래시하는 명령 예제입니다. Nano의 사용자 지정 DTB 파일을 호스트에 복사한 뒤 호스트 컴퓨터에서 실행하세요. 경로를 자신의 경로로 바꾸세요.

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. micro USB가 아닌 5V 전원 공급 장치로 Jetson Nano에 전원을 공급하세요.
  2. 점퍼선, 클립, 작은 드라이버로 "FC RCV"(강제 복구) 핀을 "GND" 핀에 연결하세요.
  3. "SYS_RST"(시스템 리셋) 핀을 "GND" 핀에 연결해 Jetson Nano를 재부팅하세요.
  4. micro USB로 Nano를 호스트 컴퓨터에 연결하세요.

호스트 컴퓨터에서 다음으로 연결을 확인하세요.

lsusb | grep -i nvidia

플래시 후에도 부팅할 때마다 핀이 올바르게 설정되도록 3단계의 systemd 서비스를 추가해야 합니다.

관련 가이드

보드에서 소리가 나오면 소형 싱글 보드 컴퓨터용 신경 오디오 프로젝트를 다룬 다음 가이드를 참고하세요.

  • IRCAM의 RAVE 모델: 가벼운 "raspberry" 설정과 nn~ 외부 객체는 이동형 설치 작품을 위한 임베디드 보드를 대상으로 합니다.
  • 무료 신경망 기타 플러그인: ToobAmp와 Stompbox는 Raspberry Pi 페달 제작에 신경 앰프 모델을 사용합니다.
  • Google Magenta의 DDSP: Raspberry Pi 기반 신경 신시사이저인 Open NSynth Super를 포함합니다.
몇 초 만에 트랙을 마스터링하세요
자동으로 -14 LUFS에 맞추고 트랙의 개성을 유지하세요. 음악만의 매력을 살린 스트리밍용 오디오를 만듭니다. 브라우저에서 바로 진행하세요.