Как сделать самый "интересный" узел 1х DAC

Часть III-я. Еще более интересная, чем II-ая.

 

Относительно недавно увидел, что одна известная фирма :), не скажу какая в довершение ко всему стала выпускать помимо внешних ЦАП без передискретизации и цифрового фильтра еще и проигрыватели компакт-дисков также без вышеозначенных штуковин. Стоимость как всегда немаленькая (по нашим российским меркам).

На самом деле многие "обычные" проигрыватели и CD-ROM приводы легко превратить в устройства, аналогичные "фирменным". Пусть и нельзя будет достичь "Высокого конца", зато радость творчества и результат могут быть полезны и интересны для творящего.

Способ третий. Эта "ужасная" I2S.

Перво-наперво хочется внести некоторую ясность в описываемый предмет - есть шина I2S, а есть формат передачи данных по этой шине. Не стоит смешивать эти понятия.

Итак шина I2S, как помнится состоит из трех сигналов:

На рисунке приведен формат передачи данных I2S по шине I2S ;)

Что видно из этой диаграммы:

Данные отсчетов каналов смещены на один "клок" сигнала SCK (BCK, CLK) относительно перепадов сигнала FSYNC (LRCLK, FSYNC...).

Чаще всего в одном полупериоде сигнала LRCK укладывается 32 "клока" сигнала BCK. Собственно вся проблема состоит только в том, чтобы превратить исходный формат в формат Right-Justified посредством... правильно, сдвигового регистра (мне кажется это проще, хотя можно использовать и другие способы - с подсчетом "клоков", например, но выигрыша в количестве логики мы вряд ли получим).

Считаем: 32 "клока" в периоде, смещение на один клок есть, пусть наши ЦАПы 16 битные и мы предполагаем, что поток данных также 16-битный (чаще всего так и есть, но не всегда). Стало-быть "придержав" поток данных на 32-16-1= 15 "клоков" мы превратим формат I2S в формат Right-Justified, причем если далее у нас используется 32-х разрядный сдвиговый регистр, то можно просто "придержать" всю последовательность данных одним единственным сдвиговым регистром, включенным до 32-х разрядного. А используя получившийся 48 (32+16) разрядный сдвиговый регистр как регистр с переменной длинной можно стыковать цапы с большей разрядностью и шину с меньшей (но не наоборот!).

Cхема универсального сдвигового регистра для практически всех случаев в жизни ;) - вот! (~200kB).

Сигналы обозначены так, как они обычно обозначаются на готовых схемах цап с циф. фильтрами. Вот собственно и все.  Конечная конфигурация определяется перемычками. Перемычки у буферов сигналов DATA и LRCK требуются для инвертирования этих сигналов, что иногда бывает необходимо.

Картинки готового устройства:


Сдвиговый регистр


Плата под PCM56P