-
Notifications
You must be signed in to change notification settings - Fork 3
PCM5122 DAC
Путь в меню: 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.
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-бит стерео.
- Audio — все источники звука и выбор драйвера вывода
- Платы и распиновка — полная карта GPIO для ZERO2 и остальных плат
- Страница TI PCM5122: https://www.ti.com/product/PCM5122
- Waveshare PCM5122 Audio Board: https://www.waveshare.com/wiki/PCM5122-Audio-Board-A
Меню (RU)
Сквозные темы
Для разработчиков