Проект “PCM в каждый дом” – Часть 1. Реверс-инжиниринг Sony PCM-10

Рассказывает mihail2501,
порядок происходивших событий немного изменен для упрощения повествования

6-го декабря 2019 года на стриме Алексея VCD#9448 был распакован купленный в США интересный экземпляр РСМ процессора – Sony PCM-10. Его мы прозвали “микроволновкой”, так как корпус очень сильно ее напоминал. Внешне он сильно отличался от всех ранее виденных мною PCM процессоров своими габаритами. Как выяснилось дальше, такие габариты данный процессор имеет потому, что он полностью собран на микросхемах стандартной интегральной логики 74-ой серии. Тогда-то в моей голове и родилась безумная идея – “А почему бы не сделать реверс инженеринг данного процессора?”.

PCM процессор SONY PCM-10

План был довольно прост: перерисовать платы, перезавести их с заменой всех возможных компонентов на SMD, спроектировать уменьшенный корпус так, чтобы он внешне напоминал корпус РСМ-10 и… “И там видно будет”, решил я и поделился своими наполеоновскими планами с Лешей VCD. Он согласился помочь мне сделать фотографии и сканы плат.

Что представляют собой эти платы? Это 5 плат размером 30 на 30 см. Первая плата – полностью аналоговая, на которой разведены все входные и выходные аудио части, такие как фильтры pre-emphasis-а и de-emphasis-а, а также входная видео часть с системой компараторов. Внешне – ничего страшного. Вторая плата уже интереснее – плата ЦА и АЦ преобразования. Левую половину платы занимает схема, позволяющая 12-разрядному мультибитному АЦП формировать 14-битный сигнал, а правую – логическая схема, преобразующая сигналы от АЦП в последовательную шину, похожую на I2S, и обратно. 26 корпусов логики и это только начало. Третья плата – плата кодирования цифрового аудиосигнала в псевдо-видео сигнал, который и записывается видеомагнитофоном на кассету. На этой плате уже 94 корпуса! Четвертая и пятая платы – это платы декодирования входного видеосигнала и коррекции ошибок, тоже по ~100 корпусов каждая. Ну что же – глаза боятся, а Миша делает… Результатами работы я начал делиться в Discord сервере FagearTechCorner, обитателем которого я стал в начале осени 2019-го года.

Разводка платы платы REC R-01_1-602-201-12 из SONY PCM-10 в Sprint-Layout

Сразу стало ясно, что без демонтажа всех микросхем и прямого доступа к плате, перерисовать их будет очень трудоемко. VCD согласился на своем редком коллекционном экземпляре РСМ-10 отпаять все кроватки микросхем, отсканировать и обратно запаять (забегая вперед скажу, что микроволновка выжила!, “диды делали на совесть”). Перерисовка трассировки плат была сделана в Sprint-Layout и слегка модифицирована, дабы уместиться в максимально возможные габариты для заказа этих плат на JLCPCB без дополнительной комиссии (впоследствии оказалось, что этого можно было и не делать, но тогда я не представлял себе другого варианта как еще можно проверить правильность трассировки, кроме как заказать платы).

Частично проверить трассировку можно проверив логику соединения входов и выходов логических элементов схемы, но возникла проблема с (автоматизация процесса) тем, чтобы на основе имеющейся трассировки создать схемы и не наделать новых ошибок. Помощь предложил Алексей (Kavka_TSR#2758) с идеей написать парсер гербер-файлов, но пропал на довольно длительное время.

Где-то на этом этапе данным проектом заинтересовался еще один Миша (Михаил Царёв#3432), и предложил помощь в создании схемы. Проекты плат было решено перенести из Sprint-Layout в Altium Designer. Начали с 3-й платы. Вручную была создана библиотека схемных символов со всеми микросхемами, использованными на этой плате, и перенесены все связи. После чего была сделана простая, но довольно эффективная проверка связей встроенным инструментом ERC.

Далее я попробовал переразвести эту плату с использованием SMD-компонентов, где это было возможно. Плата уменьшилась в размере до 15х17 см, но все равно – даже изготовление такой платы и закупка необходимых деталей была довольно дорогой, а шанс, что она не заработает с первого раза довольно велик.

Схема и разводка платы платы REC R-01_1-602-201-12 из SONY PCM-10 в Altium Designer (SMD вариант)

Михаил Царёв предложил уменьшить количество деталей на плате путем переноса всех простых микросхем в ПЛИС. Ведь если будут найдены ошибки в самой схеме, то их можно будет исправить и просто перепрошить ПЛИС, а не резать дорожки или перезаказывать новые платы. Были выбраны ПЛИС (CPLD) Altera серии МАХ II. Выбор был сделан в пользу Intel/Altera, т.к. Михаил Царёв имел опыт работы с ними. Также подкупало то, что в Quartus II (среда разработки для ПЛИС Altera) можно было тупо рисовать схему, глубоко не вникая в устройство ПЛИС, языки проектирования и прочие нюансы. Однако в стандартной библиотеке Quartus всех представленных на плате микросхем найти не удалось, и к тому же имелись 2 микросхемы PROM-памяти, прошивку которых еще предстояло считать. Также внешней должна была быть асинхронная оперативная память и еще некоторое количество компонентов – 9401, MSM4040RS, MC4044P, 74LS123N и т.д. Вообщем получилась вот такая плата (разводка не завершена).

Схема и разводка платы платы REC R-01_1-602-201-12 из SONY PCM-10 в Altium Designer (CPLD вариант)

Теперь габариты платы были 100 на 100 мм, что еще более удешевляло ее производство и уменьшало цену ошибки. В этот момент проекту решил помочь walhi#3055 (aka Сергей Карпеш). Он предложил сдампить PROM-ки при помощи программатора MiniPro TL866. Хоть этот программатор “из коробки” не умеет работать с данным типом микросхем, Walhi предложил сделать переходник и сдампить все микросхемы под видом 27C16Q. А для проверки по очереди вместо каждой микросхемы PROM подкидывать “микроволновке” на шлейфе аналог, воссозданный в ПЛИС CPLD EPM7128STC100-15N, порты которой могут работать с 5-вольтовой логикой. VCD, видимо понимая, что после всей проделанной работы мы просто так не отступим, согласился на эти эксперименты. Микросхемы PROM были не только на 3-й плате, но также и на 4-ой и 5-ой. Решили сдампить все, однако, одна из микросхем отличалась и ее было решено попробовать сдампить с помощью Arduino. Walhi выслал VCD все необходимое для эксперимента, а мы с Мишей занялись созданием прошивок каждой из PROM. Кроме того Михаил Царёв решил попробовать перенести в логику ПЛИС еще некоторые элементы, дабы их тоже поместить внутрь ПЛИС – двенадцатиразрядный двоичный счетчик 4040 и CRC-генератор 9401.

VCD дампит PROM

Результат оказался успешным. Все прошивки всех элементов успешно работали с РСМ-10, кроме 74LS189 (оперативная память на 64 бита) и “загадочной” PROM AM27S13, которую не удалось считать ни с помощью программатора в виду ее сверхпрожорливости, ни с помощью ардуино, ибо Walhi “нишмог в ардуино”. На помощь пришел еще один человек с сервера, тоже Миша (-MiS-#2362), у которого (чисто случайно) нашелся “дидовий” программатор KONTRON EPP-80, который должен суметь вычитать эту память, а так же прошить отечественные аналоги 74S287 PROM, ибо одна микросхема не выдержала издевательств и умерла, испустив волшебный дым… Уставший в тот вечер Леша недоглядел и вставил ее не по ключу, после чего прошивка в PROM работать перестала. “Микроволновку” починили и на 5-й плате среди старых микросхем из 70-х трудится новодельная PROM от Интеграла КР556РТ4А.

KONTRON EPP-80

Прошивку последней PROM проверили, после чего стало ясно, что практически вся схема может работать внутри ПЛИС и большого смысла ее переразводить и заказывать плату нет. Проще и дешевле взять отладочную плату с любой ПЛИС, загнать туда прошивку с нашей схемой и “приколхозить” необходимые элементы на внешней плате. Однако схема все еще представляла собой кучу логических элементов и искать какие-то ошибки в ней было не просто сложно, а скорее невозможно. Попытки “причесать” схему в Quartus-е ни к чему хорошему не привели из-за крайне неудобного редактора – он часто делал “замыкания” проводников при их переносе в процессе “рисования” схемы. Несмотря на эти сложности, удалось полностью разобрать плату ЦА и АЦ преобразования.

Плата C-01_1-602-004-12 из SONY PCM-10 в Quartus

Внезапно в проект вернулся Алексей Kavka с тестовым вариантом парсера гербер-файлов в список связей. Для упрощения результат сохранялся в файл KiCad, т.к. его формат открытый и схема представляет собой текстовый (читаемый) файл, что удобно для ее автоматической генерации.

Отладка работы парсера гербер файлов

Также в KiCad еще раз были проверены связи на логическую корректность, и мною предпринята попытка в нем же нарисовать уже читаемую схему. И это сработало!

Схема платы REC R-01_1-602-201-12 из SONY PCM-10

Пусть не с первого раза, но мне удалось нарисовать более-менее читаемую схему. Посидев с Михаилом Царёвым несколько вечеров за мозговым штурмом этой схемы, нам в первом приближении стало ясно как она работает и какие части схемы можно на данном этапе отбросить для упрощения. После этого уже стало понятно, что из внешних элементов для ПЛИС нужны только тактирующий кварц на хитрую частоту и асинхронная оперативная память. Тут стоит отметить, что почти все это время прямого доступа к аппарату, который реверсился, не было. Все мелкие проверки, уточнения и т. п. делал VCD. И вот после проделанной работы я напросился к Лёше в гости, дабы уже лично плотно поработать с “микроволновкой”. Перед поездкой была приобретена старая отладочная плата с Cyclone I. Платы с нужной CPLD MAX II на 1270 ячеек на б/у рынке на тот момент не было, а заказывать у китайцев не было времени. Так как Cyclone не толерантен к 5 вольтам, еще было приобретено несколько конвертеров логических уровней YF08E.

Процесс отладки платы на основе Cyclone I

Первый план был такой – из 3-й платы извлечь все те микросхемы, логика которых будет реализована в ПЛИС, и подключить отладочную плату на шлейфе, который будет подпаян непосредственно к 3-й плате. Но эта идея оказалась очень сложно реализуема. А когда Макс Крюков aka Fagear#0994 (создатель сервера) подогнал для проекта кварцевые генераторы на нужную частоту, мы решили допаять недостающие части, такие как видео ЦАП и модуль оперативной памяти, и запустить схему кодера отдельно от “микроволновки”.

Я перерисовал в Quartus схему 3-й платы с нуля.

Схема платы REC R-01_1-602-201-12 из SONY PCM-10 в Quartus

Она заработала не сразу – кроме нескольких, возникших при парсинге, ошибок в схеме, Михаил Царёв обнаружил некорректно работающие библиотечные JK-триггеры в Quartus.

Первые результаты

В процессе отладки ушла в мир иной еще одна микросхема. На этот раз это была 74LS74AN на 2-ой плате с ЦАП-АЦП. Вместо него был поставлен советский аналог КМ555ТМ2. Выглядит может и странно, но работает исправно. “Микроволновку” починили во второй раз.

Далее с полученной схемой начал работать Михаил Царёв на своей китайской отладочной плате на основе Cyclone IV EP4CE6E22C8N. Он написал на Verilog модуль для подачи в схему микроволновки сигнала I2S, взяв его с USB-to-I2S преобразователя на основе PCM2707. Также мы расшифровали данные одной из PROM и адаптировали схему для управления битами заголовка PCM-кадра, где указываются параметры коррекции и флаги пре-эмфазиса и защиты от копирования.

под ред. Михаила Царёва

Часть 2. Разработка PCM-кодера