엔지니어링 블로그

오디오·임베디드 엔지니어링 노트

Bestom 엔지니어링 팀이 Rockchip AIoT 오디오 및 SoC 양산 기술 아티클을 엄선하여 아카이빙합니다. 일부 콘텐츠는 커뮤니티 발행물에서 비롯되었으며, 모든 항목에는 출처 표기와 원문 링크가 포함되고 저작권은 원저자에게 있습니다.

오디오 Rockchip 드라이버 Linux / ALSA

하드웨어 DAC/증폭기는 구동 시점에 드라이버 없이도 소리를 출력합니다 — 그렇다면 실제로 오디오를 재생하기 위해 소프트웨어 측에서는 무엇이 필요할까요?

출처: Rockchip 罗总(Luo Zong) 저, 2026-08-25 위챗 공식 계정 「罗总开发笔记」 게재. 원문 URL: mp.weixin.qq.com/s/CqBo2NonYYGqC99ojL--4Q. 시리즈: 스스로 코덱 드라이버 만들기, 제2부(DAC 재생). 저작권은 원저자에게 있으며 허가를 받아 재게시합니다.

정본 주석 버전 → 기술 노트 · 제2부: DAC 재생 (전체 번역 + Bestom 엔지니어링 주석).

많은 DAC 칩(예: TI PCM5102A)은 제어 인터페이스가 전혀 필요 없습니다. I2S 데이터 라인을 연결하고 전원을 인가하면 소리를 출력하며, 내부 PLL을 갖추고 있어 MCLK조차 필요 없습니다. 본문은 Rockchip Linux에서 dummy-codec을 사용해 이러한 "제어 없음" DAC를 구동하는 전체 재생 체인을 구성하는 방법을 보여줍니다:

  • 방향: 재생 DAI 스트림(.playback)을 선언하면 사운드 카드는 /dev/snd/pcmC0D0p를 생성합니다. 이는 앞선 PDM 캡처 글(캡처 / pcmC0D0c)과 반대입니다.
  • 드라이버: dummy-codec의 .playback 기능 선언은 단지 자리 표시자일 뿐이며 드라이버 코드는 0줄입니다. 실제 칩 드라이버(예: pcm5102a.c)는 데이터시트에 따라 기능을 엄격히 선언해야 합니다.
  • DTS 3부세트: Codec DAI(dummy-codec 자리 표시자) → CPU DAI(&i2s0 활성화 + pinmux) → Machine(multicodecs-card가 사운드 카드를 조립). PDM을 I2S로, 캡처를 재생으로 바꿔도 동일하게 동작합니다.
  • 검증: cat /proc/asound/cardsls /dev/snd/aplay -D hw:0,0 ...; 데이터 경로는 wav → 링 버퍼 → DMA → I2S → DAC → 스피커입니다.
/* dummy-codec playback capability declaration (kernel-6.1) */
struct snd_soc_dai_driver dummy_dai = {
  .name = "dummy_codec",
  .playback = {
    .stream_name = "Dummy Playback",
    .channels_min = 1, .channels_max = 384,
    .rates = SNDRV_PCM_RATE_CONTINUOUS,
    .formats = SNDRV_PCM_FMTBIT_S16_LE | ... ,
  },
};

Bestom 관련성 · 당사 오디오 플랫폼도 동일한 프레임워크 기반

이 노트의 dummy-codec + I2S 3부세트 DTS는 Bestom의 RK2108D (M08D Module), RK2118 (플래그십 차량용 오디오, 40 GOPS Audio-NPU 탑재), RK962 (무선 오디오) 양산 오디오 솔루션의 기반 프레임워크와 정확히 일치합니다. 그 위에 마이크 어레이 빔포밍, 저전력 음성 웨이크(RT-Thread), HiFi DSP 프론트엔드 처리, 그리고 보이스 레코더·스마트 스피커·차량용 오디오를 위한 보드 전체 납품을 추가합니다.

전체 기술 노트 버전 보기 → 원문(罗总 · 위챗, zh) 저작권 © 罗总(Luo Zong), Rockchip. 허가를 받아 재게시.

시리즈 예고(동일 저자)

제3부: MCLK / RESET / 보드 레벨 GPIO 협업 · 제4부: ES7202 레지스터 브루트포스 이식 · 제5부(최종): DAPM & Mixer 아키텍처. Rockchip BSP kernel-6.1(v6.1.162) 기반.