Предыстория
Наверняка все, заставшие эпоху DOS, встречали в играх варианты выбора музыкального сопровождения - General MIDI, Roland Sound Canvas, Yamaha XG. Не буду рассказывать про то, какие это замечательные устройства, и как качественно они проигрывали MIDI. Вплоть до конца 90х, все эти домашние десктопные ромплеры, как и большинство других профессиональных аппаратов, имели только аналоговые выходы, впрочем - вполне приемлимые по качеству. В начале 2010 я из ностальгии приобрел на eBay несколько аппаратов той эпохи - это Roland Sound Canvas 88 Pro, Roland MT-32, Yamaha MU128 и Yamaha AN200. Первые три должны быть знакомы геймерам начала 90х, модуль же AN200 - это синтезатор аналогового моделирования на основе плагин-карты Yamaha PLG150-AN. На площадке продавались также и более поздние тон-генераторы Yamaha MU1000/2000 - их отличие от MU128 состояло в несколько расширенной версии банка семплов, а также в наличии оптического TOSLINK выхода.
Собственно, наличие оптики в MU2000 сподвигло меня заняться сравнением схем на предмет того, можно ли доработать схему MU128 и получить цифровой выход самостоятельно. В сервис-мануале MU2000 схема оптического выхода основана на фирменном чипе Yamaha YM3437C, который весьма сложно достать обычному радиолюбителю. Надо искать более ходовой DIT. Поиск в гугле на эту тему навел меня на мод для Yamaha MU10. Автор мода опирался на японскую доработку Roland SC-88VL. В основе мода лежит чип TC9231N от Toshiba, который реализует цифровой аудиоинтерфейс по стандарту SPDIF/TOSLINK. Чип можно заказать на eBay, стоит он в среднем 2.5$ за штуку (прим.: это было в 2010м году, сейчас чип практически невозможно найти); остальные детали продаются в любом радиомагазине. Я собрал на макетке японский вариант, и он оказался рабочим - с небольшой оговоркой. DAC у Roland SC88 18-битный, а TC9231N - 16 битный. Японский автор сделал для этого обвязку, позволяющую или обрезать в потоке 2 верхних бита - что могло привезти к клиппингу, или сдвигать поток на 2 бита ниже (обрезая 2 нижних бита), что приводило к уменьшению громкости. В любом случае, 2 бита информации терялись - и меня это не устраивало.
18-bit DIT
Я занялся поиском трансивера, работающего с 18-битным потоком в "железном" режиме, т.е. не требующем установки режима работы с помощью дополнительного микроконтроллера. После долгих экспериментов с DIT 4096, 4192, TC9271N и другими, я наконец нашел трансивер, "железно" работающий с 18-битным потоком - AKM AK4103AVF. Благодаря внутренним pull-up и pull-down резисторам, можно обойтись минимумом деталей.
Сначала набросаем схему. Учитывая, что плата должна быть максимально универсальной, все конфигурабельные пины должны быть вынесены на джамперы. Выход обвязан по даташиту как бытовой (consumer) SPDIF. Если нужен XLR AES3 (AES/EBU), смотрите даташит AK4103, а также там нужна другая конфигурация на FS0-FS3 пинах.
Вход мы подразумеваем I2S, для этого на источниках нам понадобятся линии data, lrck, bck и sclk. В разных даташитах эти линии могут называться по-разному, но суть их всегда одна и та же - DATA=SI=MDAC=SDTI, LRCK=LRCX=MWCLK, CLK=MQCLK и т.д. Все эти линии должны легко находиться в схемах входящими в DAC, за исключением sysclk, которую придется искать осциллографом в разных точках схемы. Обычно, в I2S sysclk (или mclk) для передачи не нужен, но в AK4103AVF линия используется для корректной синхронизации.
Было замечено, что если схема включается одновременно с модулем, AK4103 не подхватывает частоту и цифровой выход молчит. Опытным путем выявлено, что частота ловится после инициализации модуля, нужна задержка питания. В 2016 году я, недолго думая, просто вывел на корпус кнопку "spdif reset" (на схеме показана). В начале июня 2022 со мной связался nikitalita и подсказал линию BRESET в разъеме расширения PLG. Проверка на осциллографе выявила, что BRESET около 70ms остается в low, этого оказалось достаточно, чтобы DIT подхватил частоту.
Найдем линии на всех трех аппаратах:
I2S линия | Roland SC-88 Pro | Yamaha MU128 | Yamaha AN200 |
---|---|---|---|
syslck | CN105 pin 5 | IC39 pin 16 | IC17 pin 160 |
data | CN105 pin 3 | IC36 pin 15 | IC16 pin 15 |
qclk | IC35 pin 9 | IC36 pin 16 | IC16 pin 16 |
wclk | CN105 pin 6 | IC36 pin 13 | IC16 pin 13 |
reset | IC35 pin 9 | IC34 pin 19 | CN5 pin 4 |
Roland SC-88 Pro
Yamaha MU128
Yamaha AN200
В SC88 стоит 18-битный PCM69AU, в MU128 и AN200 - 18-битный NEC D63200. В Roland MT-32 стоит 16-битный DAC с параллельной шиной, и вывод цифрового звука это отдельная задача, которой мы касаться не будем. Согласно спецификации, SC-88 имеет частоту дискретизации семплов 32кГц, MU128 и AN200 - 44кГц. По даташиту нам нужно установить следующие режимы: audio routing mode - normal, synchronous mode, 18bit right justified. Меряем частоты:
wlck | sysclk | qclk | dif0 | trans | fs0 | fs1 | |
---|---|---|---|---|---|---|---|
default | - | - | - | 0 | float | 0 | 0 |
SC88 | 32000Hz | 8.192MHz | 8.192MHz | 1 | 0 | 1 | 1 |
MU128 | 44100Hz | 11.2896 MHz | 2.82242 MHz | 0 | 0 | 0 | 0 |
AN200 | 44100Hz | 16.9344 MHz | 2.82244 MHz | 0 | 0 | 0 | 0 |
Для выставления нужного режима, в таблице указаны только те пины, которые отличаются от своего состояния по умолчанию - fs0, fs1, dif0.
К слову, в 2010 году сервис-мануал к MU128 можно было найти только на том же eBay за денежку. Я купил его, получил PDF и тут же расшарил на своем сайте бесплатно для всех ищущих. Через несколько недель данный сервис-мануал прекратили продавать :)
Данная схема была собрана на макетке и успешно работала в MU128 и AN200 в 2016 году.
В 2021 году я внезапно решил перевыпустить разработку в приличном виде.
Гербер-файлы платы: dit_0.2_gerber.zip
Партлист
Reference | Value | Package |
---|---|---|
U1 | AK4103AVF | TSSOP-24 |
T1 | PE-65612NL, TC-612 | |
C1, C2, C3 | 100nF | 0603 |
R1 | 330R | 0402 |
R2 | 100R | 0402 |
Замечания по Roland
В самом начале я упомянул также Roland MT-32. На самом деле, с MT-32 дела обстоят гораздо сложнее, т.к. там используется DAC с параллельной шиной. Оставим это устройство в покое на некоторое время :)
Nikitalita также поделился со мной ссылкой на еще один недавний японский мод, основанный на AK4103. Автор определил, что актуальный поток в SC88 - 20битный, так что DIT может быть сконфигурирован как 20bit right justified. Однако, вы получите всего лишь существенное снижение громкости. На скриншоте ниже одна и та же мелодия, записанная сначала в 20bit, а затем в 18bit режиме:
Совместимость
Данная схема была проверена на работоспособность со следующими устройствами:
Yamaha AN200, MU128
Roland SC 88 Pro
nikitalita проверил схему с Yamaha MU90, MU90R, MU100, MU100R
Полагаю, данный DIT способен работать с любыми цифровыми синтезаторами, реализующими поток в DAC от 16 до 24 бит, если технический дизайн предполагает одну I2S линию DATA со стереопотоком. Есть также синтезаторы, у которых левый и правый каналы кодируются отдельными линиями I2S - с ними схема работать не будет.
Ссылки
MU100-DIT, параллельный проект от nikitalita с вариантом оптического выхода
Японская доработка, также на основе AK4103