Контроллер Promise SATA150 TX4: Serial ATA для любителя и профессионала
Контроллеры для интерфейса Serial ATA от компании Promise Technology, Inc.
Контроллер Promise SATA150 TX4 показан на фото выше и выгодно отличается от плат на чипе SiI3112A (и некоторых менее известных) тем, что имеет целых четыре (а не два, как у большинства конкурентов) порта Serial ATA. Плата Promise SATA150 TX4 выполнена в низкопрофильном формате, однако использовать ее в низкопрофильном корпусе (как низкопрофильный контроллер Adaptec Serial ATA 1210SA и некоторые другие) все же вряд ли получится, поскольку разъемы Serial ATA «смотрят вверх», то есть с подключенными кабелями плата превысит габариты «низкопрофильности». Видимо поэтому в коробочном комплекте контроллера отсутствует низкопрофильный сменный «брэкет» (планка на заднюю панель корпуса ПК). Заодно отмечу, что в коробке есть все 4 сигнальных кабеля Serial ATA (а также мануал и диск с драйверами), однако переходники питания на Serial ATA отсутствуют, хотя винчестеры от Seagate и Samsung без таких переходников не подключить (с дисками они не поставляются, приобрести их в розничной продаже до сих пор не так просто).
Стандартный кабель-переходник питания на Serial ATA.
К счастью, для дисков Maxtor и WD Raptor таких переходников не нужно, поскольку они имеют и обычный разъем питания.
На главный чип контроллера Promise SATA150 TX4 намертво приклеен радиатор (в работе он действительно нагревается прилично), а с обратной стороны платы микроконтроллер надежно обвязан большим количеством блокировочных конденсаторов (это лишь подтверждает то, что чип потребляет достаточно большой импульсный ток).
Основной чип (PDC20318) контроллера Promise SATA 150 TX4.
Основной чип (PDC20319) контроллера Promise FastTrak S150 TX4.
Основной чип (PDC20619) контроллера Promise FastTrak TX4000.
Экран начальной загрузки контроллера Promise SATA 150 TX4. Задействованы все 4 канала. Диски располагаются в порядке номеров каналов, обозначенных на самой печатной плате.
Процедуру начальной загрузки (POST) контроллер Promise проходит достаточно быстро. Под DOS он работает через свой BIOS, а под Windows XP/2000/NT4/Me/98 имеются драйвера. К сожалению, программа Hitachi Feature Tool не может определить диски и работать с ними, если они подключены к контроллерам Promise SATA150, хотя, например, с контроллерами от Silicon Image таких проблем нет. После установки драйверов контроллер Promise SATA150 TX4 и подключенные к нему диски возникают в Device Manager Windows XP, как показано на скриншоте ниже.
Еще одну важную и даже «знаковую» отличительную особенность контроллеров Promise SATA150 следует отметить особо. При помощи специальной утилиты CacheConfig под Windows можно управлять режимом кэширования при работе с дисками (чаще возможности таких настроек «спрятаны» в BIOS Setup контроллеров, как, например, у контроллера Adaptec Serial ATA 1210SA). Так, утилита CacheConfig позволяет включить/отключить кэширование у самого контроллера:
Утилита для включения кэширования данных для контроллеров Serial ATA от Promise.
Управление режимом кэширования дисков, подключенных к контроллерам Serial ATA от Promise.
В принципе, в этом нет ничего плохого, если эти драйверы реально помогают ускорить работы с дисками во многих приложениях (а не «заточены» сугубо под «рекламные» результаты на тесте WinBench 99, как было, например, у HighPoint). В этом нам, в частности, и предстоит убедиться на практике для контроллера Promise SATA150 TX4 (версии BIOS и драйверов, использованных нами для тестов см. на скриншотах выше).
Среднее время доступа к дискам на разных контроллерах в программах HD Tach 2.61, WinBench 99 и AIDA32 v3.61.
Скорость работы интерфейсов ATA для дисков и контроллеров в программах HD Tach 2.61 и AIDA32 v3.61.
Для наглядности работы в режимах Write Back и Write Through можно взглянуть на скриншоты теста HD Tach 2.61: если график скорости чтения почти не меняется, то график скорости записи меняется существенно. Сейчас уже нет особого смысла вдаваться в подробности, почему график в стареньком тесте HD Tach 2.61, на который уже давно пора смотреть сквозь толстые пальцы, выглядит так или иначе в зависимости от примененного режима кэширования записи (детали желающие могут почитать в этой статье). Просто отметим, что ни в том, ни в другом случае результатам скорости записи на диск в этом тесте, использующем специфический режим для измерения скорости записи, верить нельзя.
Реализация стандарта Serial ATA

Наконец-то, через год после утверждения стандарта, первые Serial ATA устройства уже поступили в магазины. Практически все известные производители карт-контроллеров уже обладают готовыми Serial ATA решениями, однако производители жестких дисков решили обождать до осени. В данной статье мы попытаемся рассмотреть и протестировать несколько Serial ATA устройств.
Уже давно понятно, что времена стандарта IDE/ATA прошли. Пользователи всегда пытаются улучшить производительность своих систем, и негибкий параллельный ATA выделяется в компьютере как мамонт в зоопарке. Шлейфы бывают всегда слишком коротки и слишком ненадежны.
Параллельная передача данных (посылка данных по нескольким параллельным маршрутам) подразумевает использование нескольких проводов, к тому же высокочастотный сигнал подвержен электромагнитным помехам. Serial ATA является последователем других успешных стандартов, базирующихся на принципе последовательной передачи данных. Среди них можно упомянуть Ethernet, USB, FireWire и даже AMD HyperTransport.
Итак, после трех лет разработки первые устройства появились в магазинах. Достиг ли Serial ATA указанных целей? Будет ли он быстр, легок и надежен? Давайте посмотрим.
Скорость последовательной передачи
«Последовательная передача обеспечивает высокую скорость». Еще несколько лет назад, если бы вы такое сказали специалисту, он бы покрутил пальцем у виска. Ведь последовательные COM порты никогда не обеспечивали высокой скорости передачи. Но не забывайте, что все самые важные сегодняшние стандарты (USB 2.0, FireWire, Ethernet, V-Link, MuTIOL, HyperTransport, RapidIO) являются последовательными, и в то же время они быстры и дают хорошую производительность.
Кабель стал тоньше и длиннее
Скажем правду в лицо: ленточные IDE шлейфы уже всех достали. У них масса недостатков. При максимальной длине в 40 см невозможно закрепить жесткие диски в верхней части больших корпусов. Более того, расположение разъемов вдоль IDE шлейфа жестко нормировано, так что приходится располагать диски в определенном порядке. И поскольку на разъеме IDE почти не имеется желобков (та маленькая штучка скорее смешна) очень соблазнительно воткнуть его, предварительно повернув на 180 градусов. Вы ведь когда-нибудь ошибались в правильном подключении IDE дисков, не так ли? А задача по подсоединению двух IDE устройств на один шлейф не всегда тривиальна. Не все жесткие диски живут друг с другом, к сожалению.
Надежность шлейфов и разъемов оставляет желать лучшего. Перегиб кабеля может легко вывести его из строя. И что хуже всего, огромные размеры шлейфов мешают нормальной циркуляции воздуха в корпусе, ухудшая охлаждение.
В теории победа явно за Serial ATA. Новые кабели могут быть до метра длиной, размер их необычно мал из-за использования всего семи проводов. Даже разъем (попробуйте воткнуть его наоборот) имеет всего 8 мм ширины. Стоит напомнить, что рабочая группа Serial ATA сейчас разрабатывает стандарты Serial ATA II и Serial ATA III, которые обеспечат пропускную способность 300 и 600 Мбайт/с соответственно.
Разъемы
Число контактов на разъеме питания кажется слишком большим. Главной причиной является возможность использования третьего напряжения помимо 5 В и 12 В. То есть Serial ATA винчестеры могут питаться от 3,3 В. Причем они могут браться и с материнской платы, поскольку на 3,3 В работает несколько компонентов платы.
Контроллер Serial ATA
Поскольку по многим причинам параллельному стандарту ATA уже пора на свалку, стандартом де-факто станет последовательный ATA. Важная особенность нового стандарта заключается в возможности использования текущих чипов-контроллеров ATA, к которым необходимо добавить лишь соответствующие компоненты (мосты). В результате мы опять выигрываем на цене контроллеров.
Не следует ожидать интеграции Serial ATA в чипсеты раньше 2003 года, когда выйдут Intel ICH5 и VIA VT8236/8238. Кстати и хабовая архитектура Intel, и V-Link VIA представляют собой несколько последовательных соединений, обеспечивающих скорость 533 Мбайт/с. Контроллер Serial ATA сможет достичь своего потенциала в этих архитектурах, поскольку интеграция ничего сложного собой не представляет.
Адаптеры
Адаптер HighPoint позволяет подключать обычный IDE диск к контроллеру Serial ATA.
HighPoint в комплект с RocketRAID 1520 включает два адаптера, позволяющие подсоединять Ultra ATA жесткие диски к последовательной шине ATA. Так что существующее оборудование сможет работать с новым интерфейсом без потери производительности.
Как показывает наш горький опыт, если новая технология звучит слишком заманчиво, то первое оборудование начнет нормально работать только лишь через недели или даже месяцы после появления на свет. Однако все Serial ATA устройства, что мы перепробовали, работали как часы. Впрочем, некоторые странные вещи все же иногда происходили, но мы ведь тестировали прототипы.
Сначала мы попытались подключить Serial ATA диск от Western Digital к нашему HighPoint RocketRAID 1520. Мы не смогли одновременно подключить кабель питания и кабель данных. Проблема может заключаться как в кабеле данных, поставляемым с контроллером, поскольку разъемы в нем на 2 мм шире кабеля Western Digital, или, что более вероятно, входы на жестком диске находятся слишком близко друг к другу. Однако мы тестируем прототип, и вряд ли подобная проблема проявится в нормальных моделях.
Второй недостаток мы обнаружили во время тестирования жесткого диска. Мы положили его на стол и очень аккуратно задели. Но даже легкого касания достаточно, чтобы диск отключил питание и перезапустился. Мы сначала не поверили, но через несколько минут ситуация повторилась.
Причина заключалась в плохом крепеже кабелей контроллера и разъема жесткого диска. Если поместить диск внутрь корпуса, то кабель может отпасть даже при простом передвижении корпуса. Мы надеемся, что подобный недостаток будет исправлен в продажных версиях.
Контроллеры
SATA/300
ATA/600
Описание SATA
eSATA
Разъемы менее хрупкие и конструктивно рассчитаны на большее число подключений(
Требует для подключения два провода: шину данных и кабель питания. В новых спецификациях планируется отказаться от отдельного кабеля питания для выносных eSATA устройств.
Длина кабеля увеличена до 2 м (по сравению с 1 м у SAT A).
SAS (Serial Attached SCSI)
Типичная система с интерфейсом SAS состоит из следующих компонентов:
Инициаторы (англ. Initiators)
Целевые устройства (англ. Targets)
Целевое устройство содержит логические блоки и целевые порты, которые осуществляют прием запросов на обслуживание, исполняет их; после того, как закончена обработка запроса, инициатору запроса отсылается подтверждение выполнения запроса. Целевое устройство может быть как отдельным жестким диском, так и целым дисковым массивом.
Подсистема доставки данных (англ. Service Delivery Subsystem)
Расширители (англ. Expanders )
Сравнение SAS и параллельного SCSI
SAS использует последовательный протокол передачи данных между несколькими устройствами, и, таким образом, использует меньшее количество сигнальных линий.
В отличие от SCSI, SAS не нуждается в терминации шины пользователем.
В SCSI имеется проблема, связанная с тем, что скорость передачи информации по разным линиям, составляющим параллельный интерфейс, может отличаться. Интерфейс SAS лишен этого недостатка.
SAS поддерживает большое количество устройств (> 16384), в то время как интерфейс SCSI поддерживает 8, 16, или 32 устройства на шине.
SAS поддерживает высокие скорости передачи данных (1,5, 3,0 или 6,0 Гбит/с). Такая скорость может быть достигнута при передаче информации на каждом соединении инициатор-целевое устройство, в то время как на шине SCSI пропускная способность шины разделена между всеми подключенными к ней устройствами.
SAS использует команды SCSI для управления и обмена данными с целевыми устройствами.
Сравнение SAS и SATA
SATA использует набор команд ATA и поддерживает жесткие диски и накопители на оптическом диске, в то время как SAS поддерживает более широкий набор устройств, в том числе жесткие диски, сканеры, принтеры и др.
Разъемы
Существует несколько вариантов разъемов SAS:
| Изображение | Кодовое название | Также известен как | Внеш./внутр. | К-во линий | К-во устр-в | Комментарий |
|---|---|---|---|---|---|---|
| | SFF 8470 | Разъeм типа Infiniband | Внешний | 32 | 4 | Внешний разъeм с высокой плотностью контактов (также может использоваться в качестве внутреннего разъeма). |
| | SFF 8087 | Внутренний мини- SAS | Внутренний | 4 | Внутренний разъeм типа Molex iPASS уменьшeнной ширины с подключением до 4-х устройств, в будущем планируется поддержка скоростей до 10 Гбит/с. | |
| | SFF 8088 | Внешний мини- SAS | Внешний | 32 | 4 | Внешний разъeм типа Molex iPASS уменьшeнной ширины с подключением до 4-х устройств, в будущем планируется поддержка скоростей до 10 Гбит/c. |
«Переходники» с SATA на IDE и c IDE на SATA
Контроллер Adaptec Serial ATA RAID 1210SA
Ну а мы без лишних предисловий перейдем к делу.
Seagate Barracuda ATA V ST3120024A
Ну а попутно мы затронем и два вспомогательных вопроса: новый тест накопителей в виде плагина к популярной программы AIDA32 версии 3.60 и выше, а также работу кэширующего драйвера hptpro.sys для контроллеров от HighPoint Technologies, который призван существенно улучшить производительность системы при работе с дисками под Windows XP/2000.
Adaptec Serial ATA RAID 1210SA
Этот контроллер является старшим братом контроллера Adaptec SATAConnect 1205SA, который продолжает линейку многочисленных (от самых разных производителей) двухканальных Serial ATA PCI-карт на микроконтроллере SiI3112A от Silicon Image.
Adaptec 1205SA card
Контроллер Adaptec SATAConnect 1205SA.
Adaptec 1210SA & SiliconImage SiI3112A cards
Контроллеры Serial ATA RAID на чипе SiI3112A: Adaptec 1210SA внизу и референс-плата Silicon Image наверху.
Ради низкопрофильного формата Adaptec 1210SA пришлось вынести разъемы Serial ATA на выступ.
При этом сигнальные проводники от чипа SiI3112A до разъемов Serial ATA на плате получились достаточно длинные. Зато с обратной стороны плата имеет грамотную разводку.
Обратная сторона платы Adaptec 1210SA.
Пример низкопрофильного решения контроллера Serial ATA.
Как мы уже сказали, контроллеры Adaptec 1210SA и 1205SA базируются на чипе SiI3112A от Silicon Image. Это контрастирует с ранее представленным компанией Adaptec профессиональным четырехканальным Serial ATA RAID контроллером 2405SA на «хайпойнтовских» чипах HPT370 с конверторами 88i8030 от Marvell (на фото ниже).
В коробке с контроллером помимо компакт-диска со всевозможным софтом и мануала содержатся два метровых кабеля Serial ATA и планка для «низкопрофильного» применения контроллера. Переходники питания дисков по Serial ATA, к сожалению, отсутствуют.
Таким образом, преимущества, которые в данном случае будут присущи массивам дисков Serial ATA RAID: 32-битная проверка четности для всех передаваемых сигналов (команды, данные, статус; для параллельного ATA-интерфейса проверялись только данные), встроенная поддержка прямого доступа к системной памяти (DMA), минимизация электронных шумов (наводок), ведущих к потерям данных во время передачи, компактные и более длинные кабели (правда, надежность/жесткость их крепления на разъемах пока оставляет желать лучшего).
Экран начальной загрузки контроллера Adaptec 1210SA с диском ST380023AS.
Фирменному адаптековскому BIOS Setup этого контроллера могут позавидовать все остальные решения на SiI3112A.
BIOS Setup контроллера Adaptec Serial ATA RAID 1210SA.
Есть меню для выбора параметров и утилит для работы с дисками и конфигурирования массивов. Можно создавать и переконфигурировать массивы, инициализировать диски, форматировать и проверять накопители,
устанавливать параметры работы контроллера с каждым из дисков в отдельности, например, кэширование записи и упреждающее чтение, режимы DMA и SMART. В общем, все наглядно видно на фотографиях пунктов меню BIOS Setup контроллера 1210SA.
В Device Manager Windows XP контроллер возникает как самостоятельный SCSI-элемент и видны подключенные к нему диски, причем в свойствах контроллера нельзя (в отличие от случая родных драйверов Silicon Image) посмотреть дополнительную информацию о диске, включая работу режимов кэширования чтения и записи, а также текущий интерфейс. Будем надеяться, что позже такая возможность в драйверах Adaptec появится.
Реверсим и улучшаем SATA контроллер
Вы когда-нибудь задумывались, как много вокруг умной электроники? Куда ни глянь, натыкаешься на устройство, в котором есть микроконтроллер с собственной прошивкой. Фотоаппарат, микроволновка, фонарик. Да даже некоторые USB Type C кабели имеют прошивку! И всё это в теории можно перепрограммировать, переделать, доработать. Вот только как это сделать без документации и исходников? Конечно же реверс-инжинирингом! А давайте-ка очень подробно разберём этот самый процесс реверса, от самой идеи до конечного результата, на каком-нибудь небольшом, но интересном примере!
Выбираем подопытного
К различным PCI-E устройствам я начал присматриваться ещё несколько лет назад, но большинство из встреченных мной девайсов либо были слишком просты и имели намертво зафиксированную функциональность, и очень небольшие возможности со стороны прошивки:

Либо выглядели настолько сложно, что перспектива реверса такого монстра просто пугала:
Продвинутый сетевой контроллер Fujitsu
Мне же требовалось устройство, которое имеет:
встроенный мощный микроконтроллер
легко перепрограммируемое ПЗУ
отладочные интерфейсы (UART, JTAG)
встроенную прошивку (а не загружаемую драйвером)
Ну и в добавок, это должно быть широко поддерживаемым всеми системами устройством, например, SATA или USB контроллером. И, как вы уже догадались из названия статьи, недавно я наткнулся на вот такой SATA контроллер:
А именно, меня привлекла крайняя простота контроллера (только проц, да ПЗУ) и радиатор на нём (а значит, внутри мощный CPU!). Быстрый поиск по названию чипа ещё больше подогрел к нему интерес. Найденная прошивка для него весила аж 500 КБ, имела признаки ARM кода, не была пожата, и имела достаточно текстовых отладочных строк:
Даже по беглому взгляду на прошивку уже можно сказать, что исследовать её будет несложно
И на него была некоторая документация, в которой очень много выводов было не подписано, что давало шанс на наличие отладочных интерфейсов:
Какие подозрительные ряды неиспользуемых пинов, не правда ли?
В скором времени контроллер был куплен, и я взглянул на него повнимательнее:


Но зато я нашёл даташиты на другие очень похожие контроллеры, с явным упоминанием отладки:
То, что производитель просит не подключать TST2-TST6 ну очень намекает на наличие JTAG, а прямое указание UART на TST0 и TST1 (в другом даташите) это уже джекпот. Засим было решено купить 88SE9215 как самый недорогой из доступных, и издеваться уже над ним:
Проверяем работоспособность
И вот объект изучения у нас в руках, первым делом проверяем, что он работает. Это важный момент, именно тут мы устраняем возможные будущие вопросы «Это я сломал или оно и было нерабочим??»
Для этого мне пришлось купить M2 райзер, поскольку единственный PCI Express слот моего ПК занят видеокартой:

В общем, тест прошёл успешно, я даже установил систему на HDD, подключенный к этому контроллеру, всё подцепилось стандартными драйверами:
При запуске ПК мелькает информация о состоянии контроллера, это PCI Option ROM и по идее из этого меню можно что-то настраивать, но мне никак не удалось зайти в настройки:

Анализируем компоненты
Теперь нужно определить, что с чем соединено, где процессор, а где ПЗУ, и какие компоненты за что отвечают. В нашем случае анализ крайне простой, особенно учитывая наличие даташитов:

Ну а соединения компонентов за нас нарисовал производитель Исследователям на заметку

Точное назначение и тип компонентов узнаём по маркировке и даташитам. В нашем случае список компонентов довольно небольшой:
Маркировка
Назначение
Параметры
SATA III x4 / PCI-E 2.0 x1
Получаем прошивку
Вот мы убедились, что устройство работает, проанализировали, из каких компонентов оно состоит, теперь следует его «забэкапить», по максимуму извлечь из него данные, чтобы в будущем можно было его к этому же состоянию и вернуть. Прошивка может находиться как во внешнем ПЗУ, так и в самом контроллере, это тоже следует учитывать и внимательно смотреть документацию.
Обычно прошивку можно получить тремя способами, это:
обновления от производителя
программатором из ПЗУ / контроллера
по отладочным интерфейсам из устройства


И в два клика ПЗУ определилось и прочиталось программатором:
Да, автор программатора очень любит писать «флешь» с мягким знаком
Часто контроллер мешает считыванию и приходится выпаивать микросхему или хотя бы подавать питание на устройство. В этом случае повезло, но на всякий случай считываем несколько раз и сравниваем содержимое, чтобы убедиться, что считалось корректно.
Анализируем прошивку
В качестве объекта для анализа я взял скачанную с сайта прошивку (чтобы начать исследование ещё до того, как купленный контроллер приедет ко мне). Первым делом нужно определить структуру образа прошивки. При беглом просмотре сразу видно, что большую часть образа занимает пустое место, а полезные данные начинаются на некоторых адресах, кратных 0x1000. И по адресу 0x2000 видим достаточно интересный набор данных:
Ну вот, за нас даже структуру прошивки расписали! Итак, согласно описанию, в образе мы имеем:
Смещение
Размер
Название
Назначение
Мне повезло, что в образе уже было описание разделов. В общем случае, столкнувшись с неизвестным образом, желательно прогнать его через binwalk, эта утилита сразу покажет известные форматы файловых систем и упакованных данных. В этом конкретном случае он нашёл только таблицы коэффициентов для CRC32:
Также полезно разбить прошивку на части и прогнать их через cpu_rec, чтобы знать, с какой программной архитектурой имеем дело. Ещё в начале статьи я предположил, что контроллер должен иметь архитектуру ARM, ну а Option ROM должен быть архитектуры x86, поскольку исполняется он на хосте. Проверим это:
И видим, что первые инструкции выполняют прыжки на адреса 0xFFFF00**, а это значит, что либо контроллер первым делом при старте прыгает в Mask ROM по адресу 0xFFFF0000 (что сомнительно), либо код Loader сам грузится в этот адрес. Перезагружаем код в дизассемблер по 0xFFFF0000 и действительно, всё корректно парсится:
Функций здесь очень немного (целых четыре), и выяснить что делает код не представляет труда:
По адресу 0xF8064000 код обращается к содержимому ПЗУ
В ПЗУ происходит поиск сигнатуры «MAGIIMGF»
Блок данных с этой сигнатурой парсится и раскидывается по ОЗУ
Происходит запуск основной системы прыжком по адресу 0
И да, именно с сигнатуры «MAGIIMGF» начинается Firmware, который мы вырезали ранее! Немного проанализировав загрузчик, получаем вот такой формат блока прошивки:
И теперь мы можем распарсить Firmware и правильно прогрузить его в дизассемблер! Ожидаемо всё идеально прогружается и можно начать анализ основной системы:
часто вызываемые стандартные функции (malloc, memset, memcpy)
текстовая отладочная информация из прошивки
различные уникальные константы
Очень полезно найти функцию Assert, которая выводит в отладочную консоль наименование файла исходников и номер строки с возникшей ошибкой. Например, здесь название файла намекает, что эта функция занимается выделением памяти:
А здесь явно происходит инициализация последовательного порта:
Кстати, немного проанализировав задачи инициализации системы, можно наткнуться на функцию, которая принимает указатель на другую функцию и некоторое имя. Очень похоже на запуск новой задачи! Так и назовём:
В процессе изучения кода задач натыкаемся на интересную функцию, которой часто передаются красивые десятичные значения (100, 1000). И это очень похоже на функцию задержки исполнения, sleep:
И вот у нас уже есть какая-никакая, но документация, с помощью которой мы находим то, что искали изначально, а именно функцию отображения (маппинга) адресного пространства ПК в адреса самого контроллера:
Этой функцией контроллер взаимодействует с ПК, к которому он подключен. Достаточно задать нужный адрес в аппаратных регистрах транслятора, и чтение/запись в пределах заданного «окна» по адресу 0x40000000 автоматически приведут к чтению/записи физической памяти ПК!
Ищем отладочные интерфейсы
Надоело смотреть на скриншоты ассемблерного кода? Возвращаемся к железякам! У нас есть набор тестовых контактов, но мы не знаем, где на них какие отладочные интерфейсы (и есть ли они там вообще). Сначала нужно что? Правильно, подпаяться к ним и вывести на гребёнку:

Производитель совсем не заботится о глазах реверс-инженеров, нет бы хоть пятаки сделать!

Ииии ничего не нашлось:
Ну хоть узнали, какие выводы In, а какие Out.
Ожидаемо, подумал я, и вспомнил про пин «TESTMODE» из даташита. Вероятно, его нужно задействовать и тогда. Что-ж, паяем ещё проводков, ставим подтяжку на TESTMODE:
Иии снова ничего не нашлось, правда, картина немного иная, почему-то всё стало Input:
Теперь почему-то все выводы стали Input
Да что ж такое, ну ладно JTAG, хотя бы UART найду, подумал я. Подключаем логический анализатор.

И не видим признаков UART ни на одном выводе.
А с поднятым TESTMODE, тест выводы и вовсе колбасит по-черному, и это точно не UART:
Ну, думаю, он просто выключен в прошивке. Нужно его включить! Вношу небольшие изменения и сталкиваюсь с тем, что через клипсу прошивка не хочет записываться. Контроллер питается от программатора и мешает записи. Да что за день-то такой?! Психанул, сделал ПЗУ съёмной:

Для этого я подключил логический анализатор прямо к SPI микросхеме:
И проанализировал чтение флешки по SPI:
Здесь уже использую более скоростной анализатор DSLogic
И да, читался только неведомый Autoload (причём трижды) и BIOS! Загрузчик и прошивка и не думали грузиться! Я наконец понял, что мой контроллер имеет только функциональность SATA, а прошивка нужна для RAID, который у меня не поддерживается..
В отчаянии, используя SPI логи, я разреверсил формат Autoload, он оказался очень простой:
Я собрал Autoload, в котором во все возможные адреса стека записывался адрес ПЗУ (0xF8064000), запихнул на флешку и. Эта зараза прожевала все 128 КБ и не подавилась, дважды!! (первый раз подавилась, похоже, по таймауту)
Скриншот одной из первых попыток, 128 КБ лог не сохранил
В общем, да. На 9230 JTAG нашёлся с пол-пинка и даже без TESTMODE пина:

























