Skip to content

PCM5122 DAC

drew.po28@gmail.com edited this page Jun 20, 2026 · 2 revisions

Аудио-ЦАП PCM5122

Путь в меню: Audio → Audio Driver → PCM5122 · Платы: ZERO2 (RP2350B) · Требуется: плата I2S-ЦАП на PCM5122 (например, Waveshare PCM5122 Audio Board) · Включается на этапе сборки (см. примечание)

⚠️ В стандартных сборках не включено. Код PCM5122 присутствует в прошивке, но назначения пинов для ZERO2 закомментированы в CMakeLists.txt, поэтому штатная сборка ZERO2 ЦАП не использует. Включение — это кастомная сборка (раскомментировать определения PCM5122_I2S_* / PCM5122_I2C_* для цели ZERO2); фича живёт в отдельной ветке, не в main. Дальше описано, как это работает после включения в сборку.

Обзор

PCM5122 — это качественный внешний I2S-стереоЦАП (TI BurrBrown, 24-бит, со встроенным усилителем для наушников/линейного выхода). На плате ZERO2 (RP2350B) его можно подключить и направить смешанный звук эмулятора на него вместо встроенных драйверов вывода.

Зачем он нужен вместо других драйверов Audio:

  • PWM превращает звук в 1-битный импульсный поток на GPIO — дёшево, но шумно и с ограниченной полосой.
  • HDMI audio встраивает звук в data-острова HDMI — работает только при выводе через HDMI и вовсе не работает, когда плата выдаёт VGA.
  • PCM5122 — настоящий аудио-ЦАП, на который звук подаётся по I2S: чистый линейный выход / выход на наушники без PWM-шипения и независимо от видеовыхода.

Драйвер общается с микросхемой по двум шинам: I2C — для управления/настройки (сброс, ФАПЧ, громкость, снятие mute) и I2S — для отсчётов звука. Микросхема работает как I2S-ведомый (slave) в трёхпроводном режиме (BCK служит тактовым источником, отдельный SCK не используется), 16-битные отсчёты, частота дискретизации эмулятора 31,25 кГц.

Только для конкретной платы. Драйвер PCM5122 и его пункт меню собираются только в сборке ZERO2 (#ifdef ZERO2). На остальных платах в меню Audio Driver есть лишь Auto / PWM / i2s / AY-3-8910 / HDMI.

Распиновка (ZERO2)

RP2350B соединяется с платой PCM5122 двумя шинами:

Сигнал GPIO Шина Назначение
PCM5122_I2C_SDA GPIO 2 I2C данные управления
PCM5122_I2C_SCL GPIO 3 I2C тактирование управления
PCM5122_I2S_BCK GPIO 18 I2S битовый клок (он же мастер-клок ЦАП)
PCM5122_I2S_LCK GPIO 19 I2S LR / word-select клок
PCM5122_I2S_DATA GPIO 21 I2S последовательные данные звука (DIN)

Плюс питание и земля (плата ЦАП питается от 3,3 В / 5 В согласно её документации) и аналоговый линейный выход / выход на наушники со стороны ЦАП.

Экземпляр I2C-контроллера выбирается автоматически по пину SDA (чётная пара GPIO → i2c0, нечётная → i2c1); шина I2C работает на 100 кГц с включёнными внутренними подтяжками. Микросхема отвечает по I2C-адресу 0x4C.

Полная карта GPIO для всех плат: Платы и распиновка.

Конфликт пинов — клавиатура переезжает. На ZERO2 пины управления I2C GPIO 2 / 3 — это те же пины, что обычно используются для PS/2-клавиатуры (KBD_CLOCK / KBD_DATA). В сборке с PCM5122 клавиатура переносится на GPIO 14 / 15, чтобы оба устройства сосуществовали. Это выбор распиновки на этапе компиляции в CMakeLists.txt, а не переключатель во время работы.

Как включить

Audio → Audio Driver предлагает (на ZERO2): Auto / PWM / i2s / AY-3-8910 / HDMI / PCM5122.

  • PCM5122 — принудительно выбрать драйвер PCM5122. При загрузке прошивка инициализирует микросхему по I2C и передаёт звук по I2S.
  • Auto — перед переходом к стандартному выводу прошивка опрашивает шину I2C на наличие PCM5122 (чтение по адресу 0x4C). Если микросхема отвечает — PCM5122 используется автоматически; если нет — пины освобождаются и работа продолжается со стандартным определением PWM/I2S.

Выбор другого Audio Driver применяется при следующей загрузке: появляется запрос перезагрузки (Apply & reboot), а выбор сохраняется в NVS (как audio_driver = pcm5122).

Что делает последовательность инициализации I2C (регистры страницы 0): программный сброс → задание источника ФАПЧ на BCK (трёхпроводной режим, без SCK) → игнорирование детекции ошибок клока SCK → выход из standby → снятие mute → установка цифровой громкости левого/правого канала в 0 дБ.

Особенности

  • Только ZERO2. Драйвер, определения пинов и пункт меню входят только в сборку ZERO2.
  • Переключение через перезагрузку. Смена Audio Driver всегда требует перезагрузки — выбор хранится в NVS и применяется при старте.
  • Клавиатура на GPIO 14 / 15. Поскольку пины I2C повторно используют пины PS/2-клавиатуры по умолчанию (GPIO 2 / 3), в сборке с PCM5122 клавиатура переносится на GPIO 14 / 15 (см. выше).
  • У ZiFi приоритет на пине данных I2S. Если UART ZiFi из меню Network настроен на пин данных I2S (GPIO 21), драйвер PCM5122 уступает этот пин и прошивка откатывается на стандартный звук — ZiFi выигрывает общий пин.
  • Трёхпроводной I2S, режим slave. Микросхема тактируется от BCK (отдельный системный клок не подключён), на фиксированной частоте дискретизации эмулятора 31,25 кГц, 16-бит стерео.

Ссылки

Clone this wiki locally