Доброго времени суток! Наверное будет интереснее, если вместо скучного размещения запроса на бинарник, расскажу вкратце предысторию и поделюсь своими наработками по теме внутреннего устройства карт MOTU.
Предисловие: Наверное многие технические специалисты и инженеры из мира аудиоиндустрии работали с карточками от MOTU. Коллеги, немного более отдалённые от профессионального AV, вероятно про них слышали. Очень большим плюсом этого оборудования всегда являлось достойное качество звука, прочный металлический корпус, а для "взрослых" моделей - полноценный встроенный DSP и возможность работать в режиме микшерного пульта с запоминанием настроек, что позволяло применять данные аудиоинтерфейсы даже для инсталляций. Известная история, что у всех MOTU случается проблема со вздутием конденсаторов через 3-4 года активной работы. Как правило, простейший "рекап" быстро возвращал карточки к жизни. Но не бывает всё гладко бесконечно.
Вероятно, не у всех есть время/желание на чтение длиннопостов, если кратко: На этот раз вздутие произошло в карточке модели MOTU 828x. Сделав пересадку конденсаторов, отвечавших за питание (2200uf/16v), я обнаружил, что карта по-прежнему не запускается - на дисплее нет вообще ничего, кроме питания. Далее было определено, что сгорел главный МК. Перенося подробности ниже. 1. Есть ли у кого-то дамп прошивки главного МК "AT91SAM7S256"? 2. Возможно ли технически через режим FFPI-интерфейса, в режиме программирования параллельной памяти (даташит МК AT91SAM7S прилагаю), достать незащищённую от чтения прошивку из памяти микроконтроллера, не запитывая кристалл?
Подробно: После пересадки конденсаторов - карта не запустилась. Классически в руки был взят мультиметр и проверено питание на всех шинах, идущих с блока питания - обнаружился очень странный перекос двуполярных напряжений . Не успев вникнуть в проблему я ощутил жар от микроконтроллера SAM7S256. Выключил карту - прозвонил выводы, земля и ноги питания оказались замкнуты накоротко. Аккуратно прогревая многослой - снял микроконтроллер - прозвонил повторно, аналогично - ноги питания V+ кристалла и ноги GND оказались замкнуты. Был сделан очевидный вывод, что МК ощутимо повреждена.
Пока новый МК ехал в Петербург, я занялся поиском прошивки и метода правильного её закачивания в микроконтроллер. Никогда до этого не разбирал готовые прошивки, но на сайте MOTU всегда были доступны все версии для всех выпущенных карт, к тому же .bin прошивки легко доставался из прошивальщика. Ещё, учитывая, что MOTU верхних моделей всё-таки профи-карты, у меня не было сомнений, что под них выложены полноценные образы.
Распаковав архивы для Mac и Win (v1.07) нашел в них одинаковый по размеру .bin, для Mac - "FullImage_828TBT", а вот в Win-версии он назывался -"828x". Намёк понятен, чтобы не трогали лишний раз, поскольку в Mac, надо еще нажать волшебную строчку в меню, чтобы посмотреть содержимое пакета. Единственное, что смутило - размер был великоват для 256кБ памяти микроконтроллера. Открыв binvis.io и загрузив несколько прошивок знакомых мне карт, начал искать нужный мне кусок кода в образе. Составив небольшую таблицу начинки карт и их прошивок (прилагаю), в чём, кстати мне очень помог блог инженера, который по-видимому ремонтирует серьёзные аудиокарточки - https://khronscave.blogspot.com/ , нашёл нужный кусок кода и "порубил" бинарник (при помощи того же binvis.io). По даташиту решил лить прошивку на дефолтный адрес памяти, 0x0010 0000. Припаяв новую МС, полностью аналогичный процессор SAM7S256, я залил получившийся образ по JTAG.
Собственно, немного отступив, поделюсь тем, что удалось понять по строению прошивки и её работы у карт MOTU (условно 3-го поколения, но информация может быть полезна и для других моделей этого вендора): ВАЖНО! Всё, что я пишу ниже - это только моё видение, оно, как и всякое, может быть ложным. 1. Преимущественно все карты MOTU 3-го поколения: Traveler mk3 / UltraLite mk3 / AudioExpress/ 828x / 828 mk3 / 896 mk3 , возможно и другие модели, построены на типовых компонентах: центральный микроконтроллер AT91SAM7S256 в паре с 2МБ энергонезависимой памятью AT45DB161, далее применяются различные модификации ПЛИС Xilinx серии Spartan и DSP-процессоры Texas Instruments TMS. Классически в качестве USB-контроллера применется Microchip USB3300, а для FireWire коммуникаций - Texas Instruments TSB41AB1. 2. Насколько я понял, карточки запускаются по следующему принципу: после того, как блок питания выдаёт стабильные номинальные напряжения, запускается код бутлоадера микроконтроллера SAM7S256, описывает какое перефирийное оборудование подключено к ногам МК, проверяет наличие зажатия кнопки режима обновления прошивки, и начинает исполнять код прошивки. По ходу исполнения кода прошивки микроконтроллер загружает сценарии работы в ПЛИС Spartan, а затем, уже через ПЛИС конфигурирует DSP Texas Instruments, заливая в процессор сохранённые настройки из памяти. Попутно заливаются настройки и в управляемые микрофонные предусилители Texas Instruments PGA2505. 3. В прошивке с сайта MOTU, в зависимости от функционала карты (есть DSP-микросхема и CueMix с обработкой / нет - CueMix только с роутингом), если разделить программу-прошивальщик и бинарник прошивки, то в структуре по порядку будут идти исполняемые коды для: МК SAM7S256 (без бутлоадера, который загружает саму МК), код для ПЛИС (FPGA) Spartan, код для DSP TMS. Небольшая иллюстрация визуализации прошивок - прилагается. 4. Что особо интересно по структуре прошивки - в паре с памятью 256КБ самого МК, устанавливается 2МБ внешней энергонезависимой памяти. В этой памяти хранится код для ПЛИС и код для DSP, настройки карточки, настройки DSP. Но кроме этого кода там довольно много места занимают какие-то данные, которые на сохраняемые настройки карточки и параметры DSP не сильно похожи, хотя бы по объёму. Через hex-редакторы чего-либо человекочитаемого там обнаружить не удалось. Серийный номер карточки тоже столько места занимать, по идее, не должен. Возможно это данные для контроллеров USB и Thunderbolt. Кто осведомлён, если такие есть - подскажите пожалуйста по назначению содержимого:) 5. В карточках MOTU распаян разъём JTAG в виде блока штырьков, полагаю, что распиновка его во всех моделях на SAM7S256 одинаковая, или, как минимум - похожая. У 828x и AudioExpress - абсолютно одинаковая. Элементарно звонится мультиметром по даташиту микроконтроллера. Прошивка читается и пишется. Также видел штырьки рядом с DSP и FPGA, вероятно, аналогично, интерфейсы для отладки. 6. Насчёт USB-порта, распаянного на некоторых платах (а на некоторых под него посадочные отверстия) - по всей схемотехнической видимости это порт для заливки прошивки в центральный МК SAM7S256 по USB через SAM-BA (встроенный бутлоадер от Atmel). Но есть нюанс - чтобы работать через USB нужен кварц 18.432 мГц, а на карточках, вроде как, везде установлен 12.000 мГц. Возможно, инженеры MOTU как-то меняют кварц при сервисных работах с картой, но, если JTAG работает идеально и под него распаяны готовые выводы - суть данного USB-порта очень интересна.
Возвращаясь к теме - карта не запустилась. После этого я стал копать уже саму прошивку и выяснять через IDA у прошивальщика, как правильно шить образ. Насколько я понял далее - у прошивальщика была в том числе полная прошивка для SAM7S256, НО без бутлоадера. Это косвенно подтвердило сравнение мной через binvis.io других готовых прошивок для этой микросхемы. Наконец, чтобы убедится окончательно, я снял прошивку с другой моей MOTU модели AudioExpress (добавил этот полный образ на форум, вдруг кому поможет), на том же процессоре SAM7S256, и очевидно увидел недостаток бутлоадера.
Поскольку я работаю инженером в сфере AV и у меня были прямые выходы на MOTU, им было написано целое послание с просьбой помочь с бутлоадером. Врут или нет, но коллеги-американцы сослались на то, что карта 2010-го года разработки, устаревшая, и у них нет на неё ресурсов и исходников. А из-за проблем с производством (кризис чипов) у них нет запасных главных плат, которые они редко, в виде исключений отправляют авторизованным сервисам "на местах".
Поискав подобные, несколько редкие карты среди знакомых и на Авито в разделе «на запчасти», понял, что нужно пробовать достать прошивку из имеющегося чипа. Меня обнадёжило то, что в схеме из даташита на МК, режим FFPI-интерфейса, предназначенный для потокового программирования на производствах, может работать с памятью напрямую, в обход кристалла (если я правильно понял схемы). Концептуально понятно, что нужно всё запитать и подключить линии ввода/вывода данных к программатору и считать блоки ячеек памяти. Только практическую реализацию FFPI и что такое “Standart parallel EEPROM” я не смог понять. Смотрел Atmel AT28C256, но там немного по другому устроен процесс. В интернете информации по этой теме нет, ничего конкретного, даже похожего найти не смог. Нашёл из полезного только книгу Редькина по этой серии микросхем, но там, как назло - тема с FFPI опущена без подробностей, просто перевод с даташита.
Может быть кто-то из форумчан сталкивался с Atmel и Fast Flash Programming Interface и основами параллельного программирования памяти или имеет под рукой 828x?