Наверх

Кратко о передискретизаторе CS8422

20 ноября 2022 г.

CS8422 – это 24-битный аудио-передискретизатор со встроенным приемником цифрового аудиосигнала стандартов EIAJ CP1201, IEC-60958, AES3 и S/PDIF от компании Cirrus Logic. Поддерживает частоты от 28 до 216 кГц. Имеет возможность как аппаратной, так и программной настройки.

Принцип его работы и внутреннюю коммутацию сигналов удобнее всего пояснить по структурной схеме, которая представлена ниже.

Непосредственно сам передискретизатор – Sample Rate Converter (SRC) – расположен по центру рисунка. На его вход подается сигнал с мультиплексора, который позволяет выбирать источник между двумя входами – I2S и S/PDIF. Вход I2S представлен сигналами SDIN, ISCLK, ILRCK, S/PDIF входов четыре (RX0..RX3), и также их попарно можно использовать для приема дифференциального сигнала. Выходы у микросхемы представлены двумя I2S-шинами.

Блок Receiver Clock & Data Recovery, как следует из названия, выполняет функцию приема и восстановления тактового сигнала и данных из S/PDIF-потока. Внутри себя он содержит PLL, тактируемый генератором на основе внешнего кварцевого резонатора, который подключается к выводам XTI, XTO. Дополнительно из S/PDIF-потока восстанавливается формат передаваемого сигнала и значения служебных битов.

В программном режиме управление микросхемой осуществляется по интерфейсам I2C или SPI.

Дополнительно имеются 4 настраиваемых выхода (GPO0..3), на которые можно вывести различные данные – биты цифрового потока, статусные биты передискретизатора, и даже входной S/PDIF сигнал с определенного входа, пропущенный сквозь CS8422 без изменений.

CS8422 имеет широкие возможности по коммутации тактовых сигналов между входами, передискретизатором и выходами. Это обеспечивается тремя мультиплексорами. Кроме того, имеется возможность пропустить входные сигналы в обход схемы SRC.

Все пути коммутации достаточно понятно прослеживаются на структурной схеме. На каждый I2S выход можно вывести сигнал с трех различных источников – с I2S входа, с передискретизатора и с S/PDIF входа. Сигнал на вход передискретизатора можно подать с I2S вход и с S/PDIF приемника. Все это определяется настройкой мультиплексоров в регистре 0x0A.

Отладочная плата

Для проверки всех необходимых режимов работы микросхемы и проведения экспериментов была спроектирована и заказана простая отладочная плата, а также написана небольшая библиотека под микроконтроллер ATmega328 для управления передискретизатором по SPI.


Схема содержит в себе микросхему CS8422 с необходимой обвязкой для ее работы с управлением по SPI. Управляющий интерфейс, вход и выходы I2S, а также выходы GPO выведены на штыревые разъемы, а входы S/PDIF реализованы четырьмя различными способами. Первый вход – коаксиальный, со схемой усилителя на основе двух инверторов. Второй вход оптический Toslink. На третьем входе реализована простая схема приема коаксиального S/PDIF без дополнительного усиления. Четвертый вход реализован для подачи цифрового сигнала.

На контакты 10 разъемов I2S OUT при необходимости можно подать сигналы GPO0 и GPO2, запаяв необходимые резисторы-перемычки. Через 2 контакт разъема I2S1 OUT можно завести в микросхему сигнал TDM IN, если необходимо использовать мультиплексирование с временным разделением.

Питание платы осуществляется от +5 В, которые понижаются линейным стабилизатором до необходимых +3,3 В. Дополнительно на плате установлен разъем для подачи в схему напряжения +3,3 В в обход стабилизатора.

Управляющая программа

Проект Atmel Studio с тестовой управляющей программой для CS8422 имеет библиотеку с картой регистров и функциями чтения и записи данных в регистры (по байтам или по блокам). В тестовой программе выполняется некоторая начальная конфигурация микросхемы и затем происходит бесконечный опрос всей карты регистров с заданным периодом с отправкой по UART. Часть вывода показана на рисунке ниже.

Пример начальной конфигурации показан ниже.

data = 0xA4; // RX single ended, select RX1, mode 2 CS8422_WriteBlock(&data, REG_03_RESEIVER_INPUT_CTRL, 1); data = 0x46; // OLRCK = MCLK/256, OMCLK = XTI-XTO, SRC_MCLK = XTI-XTO CS8422_WriteBlock(&data, REG_08_SRC_SAO_CLK_CTRL, 1); data = 0x48; // RMCK = 256Fs, Soft mute enabled CS8422_WriteBlock(&data, REG_09_RMCK_RATIO_CTRL_MISC, 1); data = 0x12; // OUT1 - SRC, OUT2 - SPDIF, SRC input - SPDIF CS8422_WriteBlock(&data, REG_0A_DATA_ROUTING_CTRL, 1); data = 0x84; // OUT1 - I2S 24 bit master CS8422_WriteBlock(&data, REG_0C_SAO_1_DATA_FMT, 1); data = 0x84; // OUT2 - I2S 24 bit master CS8422_WriteBlock(&data, REG_0D_SAO_2_DATA_FMT, 1); data = 0x00; // PDN OFF CS8422_WriteBlock(&data, REG_02_CLK_CTRL, 1);

Здесь сначала в регистре 0x03 выбирается вход RX1 в несимметричном режиме и в обход схемы входного компаратора, т.к. используется внешний приемник оптического сигнала.

Затем в регистре 0x08 настраивается делитель частоты LRCK выходного интерфейса, а также в качестве источника сигнала MCLK для I2S выхода и схемы передискретизатора выбирается кварцевый резонатор. Именно на этом шаге, по сути, и настраивается выходная частота дискретизации – ее будет определять частота кварцевого резонатора и выбранный коэффициент деления для сигнала LRCK.

Следующий шаг – в регистре 0x09 выбирается множитель частоты (от входной частоты дискретизации), выводимой на выход RMCK, и активируется использование программного MUTE при потере схемой SRC входной частоты.

Далее в регистре 0x0A настраивается коммутация сигналов – на вход передискретизатора и выход I2S2 подается сигнал с S/PDIF-приемника, на выход I2S1 выводится сигнал после передискретизации.

Следующие два регистра 0x0C и 0x0D настраивают форматы выходов – стандартный I2S, 24 бита, в режиме ведущего.

Последним шагом выполняется сброс бита PDN (power down) в регистре 0x02, что запускает работу микросхемы.

Узнать более подробно всю информацию о работе микросхемы можно в файле документации.

Скачать проект Altium Designer (ZIP) | Скачать Gerber-файлы (ZIP)
Скачать проект Atmel Studio (ZIP)