Как известно, для работы AK4490 требуется мастерклок, который из Raspberry Pi не выводится. Поэтому нельзя просто подключить AK4490 к Raspberry Pi. Для решения проблемы есть два пути: 1) восстановление мастерклока из битклока с помощью PLL или 2) использование отдельного генератора и работа Raspberry Pi в ведомом режиме.
Восстановленный мастерклок уступает по качеству нормальному генератору, плюс к тому же битклок у Raspberry Pi для частот кратных 44,1 кГц тоже не очень хороший. Правильно будет использовать отдельный генератор и Raspberry Pi в ведомом режиме.
Здесь возникает следующая проблема: AK4490, в отличие от ES9018 и других, не умеет быть мастером I2S шины. Поэтому необходимо применение дополнительных микросхем, которые были бы мастером I2S, вроде WM8804, PCM5122 или ПЛИС.
И тут один японский радиолюбитель предложил интересный способ: Часть 1, Часть 2.
Суть такова:
- Подаем мастерклок (MCLK) 22,5792/24,576 МГц на вход битклока (BCLK). Получается, MCLK = BCLK.
- Генерируем вордклок (LRCLK) на основе битклока (BCLK) в Raspberry Pi. Для чего переводим интерфейс I2S в режим SND_SOC_DAIFMT_CBM_CFS (codec clk master & frame slave).
- Устанавливаем размер фрейма (BCLK ratio) в зависимости от текущей частоты дискретизации потока, например для 44,1 кГц это будет 512,
для 88,2 кГц будет 256, для 176,4 кГц будет 128, и для 352,8 кГц будет, как и должно быть, 64.
Соответственно, частота вордклока (LRCLK) станет равной частоте дискретизации.
Получается, что для 44,1 кГц ЦАП работает в таком режиме:
MCLK = BCLK = 22,5792 Мгц, LRCLK = 44,1 кГц, SDATA передает 512 бит данных.
Казалось бы, что это неправильно и возникнут проблемы с работой цифрового фильтра, но, как пишет японец, все работает корректно. По всей видимости это связано с тем, что битклок используется только для загрузки входных регистров и дальше в работе не участвует.
Также, при внимательном прочтении на это нашлось указание в даташите: для режима 7 "32-bit I2S compatible" вход BCLK больше или равен 64fs.
В общем, решил сделать для своего Raspberry Pi 4 ЦАП по этому принципу.
ЦАП предназначен в основном для работы на наушники и делается под такой корпус:
Для того, чтобы несколько уменьшить помехи, решил уменьшить частоту данных в длинных линиях BCLK, SDATA. Для чего поделил мастерклок на 2.
Схема электрическая принципиальная:
Печатная плата прорабатывается. Пока не удается уложиться в обычный размер 65x56 мм с SMD размера 0805.
Увеличивать плату очень не хочется, так как в увеличенном размере (85x56 мм) плату придется приподнять над разъемами Ethernet/USB, после чего нужно будет ставить разъемы RCA/наушники необычным образом, чтобы они попали в отверстия корпуса.
Проект открытый, все чертежи и исходный код драйверов выложу, когда все заработает.
Конструктивная критика приветствуется, особенно в аналоговой части.
Социальные закладки