sata контроллер что это такое
Что такое контроллер SATA Express?
SATA или Serial ATA добились востребования в файловых хранилищах компьютера. Стандартизация интерфейса обеспечивает простоту установки и совместимость между компьютерами и устройствами хранения. Проблема состоит в достижении предела пропускной способности популярного SATA.
SATA или PCI-Express соединение
Существующие спецификации SATA 3.0 были ограничены пропускной способностью всего 6,0 Гбит/с, что соответствует примерно 750 МБ/с. Теперь с накладными расходами на интерфейс и остальные моменты. Это означает, что эффективная производительность была ограничена только 600 МБ/с.
Многие из нынешних поколений твердотельных накопителей достигли этого предела и нуждаются в некоторой форме более быстрого интерфейса. Спецификация SATA 3.2, частью которой считается SATA Express, представляет новое средство связи между компьютером и устройствами, позволяя устройствам выбирать, использовать ли существующий метод SATA, обеспечивая обратную совместимость со старыми устройствами или использовать быструю PCI Sata.
Шина PCI-Express традиционно использовалась для связи между процессором и периферийными устройствами, такими как графические карты, сетевые интерфейсы, порты USB и т.д.
С действующими стандартами PCI-Express 3.0, одна линия слота PCI-Express может обрабатывать до 1 гб/с делает это быстрее, чем текущий интерфейс SATA. Этого не возможно достичь на одной линия PCI-Express, но устройства могут использовать несколько линий. Согласно спецификациям SATA Express, накопитель с новым интерфейсом может использовать две линии PCI-Express (часто называемые x2), чтобы иметь потенциальную полосу пропускания 2 гб/с, что почти в три раза превышает скорость предыдущих SATA 3.0.
Новый разъем SATA Express
Теперь новый интерфейс также требует нового разъема. Это может выглядеть несколько похоже, потому что разъем фактически объединяет два разъема данных SATA вместе с третьим немного меньшим разъемом, который имеет общее с коммуникациями на основе PCI-Express. Два разъема SATA на считаются полностью функциональными портами SATA 3.0. Один разъем SATA Express на компьютере может поддерживать два старых порта SATA. Проблема возникает, когда вы хотите подключить в разъем более новый накопитель на основе SATA Express. Все разъемы SATA Express будут использовать доступную ширину независимо от того, использует ли диск старую связь SATA или новую PCI-Express. Один SATA Express может обрабатывать либо два диска SATA, либо один диск SATA Express.
Так почему же диск SATA Express на основе PCI-Express не использует только один третий разъем, а не два порта SATA? Это связано с тем, что накопитель на основе SATA Express может использовать любую технологию, поэтому он должен иметь интерфейс с обеими. Многие порты SATA связаны с линией PCI-Express для связи с процессором. Используя интерфейс PCI-Express напрямую с диском SATA Express, вы в используете два порта SATA на материнской плате.
Ограничения интерфейса команд
Есть небольшая проблема. Это новая технология, и в результате она не встроена в большинство существующих на рынке операционных систем. Большинству потребуется установить в них дополнительные драйверы, чтобы диски могли использовать новую технологию NVMe. Развертывание быстрой производительности для дисков SATA Express может занять некоторое время, так как программное обеспечение должно стать более зрелым, как в первом представлении AHCI. Но SATA Express позволяет дискам использовать любой из этих двух методов. Поэтому вы все еще можете использовать новую технологию сейчас с драйверами AHCI и, возможно перейти к более новым стандартам NVMe для повышения производительности, или потребуется переформатировать диск.
Функции, добавленные в SATA Express через SATA 3.2
Пользователи SSHD (твердотельные гибридные накопители) также получат выгоду от новых стандартов, поскольку они внедрили новый набор оптимизаций. В текущих реализациях SATA контроллер накопителя будет определять, какие элементы должны и не должны кэшироваться, основываясь на том, что он видит, как запрашивается. Благодаря новой структуре операционная система может по существу сообщать контроллеру накопителя, какие элементы он должен хранить в кэше, что уменьшает количество служебных данных на контроллере накопителя и повышает производительность.
Есть функция для использования с настройками дисков RAID. Одной из целей RAID считается избыточность данных. В случае отказа диска его можно заменить, а затем данные будут восстановлены из данных контрольной суммы. Они создали новый процесс в стандартах SATA 3.2, который может улучшить процесс восстановления, распознавая, какие данные повреждены, а какие нет.
Реализация и почему этого не произошло
SATA Express считают официальным стандартом с конца 2013 года, но он не начал проникать в компьютерные системы до выпуска чипсетов Intel H97/Z97 весной 2014 года. Даже с материнскими платами, имеется новый интерфейс, но на момент запуска нет дисков, которые могут использовать новую технологию. Это связано с поддержкой операционной системой новой очереди команд, чтобы в полной мере использовать SATA Express. Текущие реализации позволяют использовать разъемы SATA Express с существующими дисками SATA. Это поможет упростить внедрение для тех, кто приобрел технологию сейчас, когда диски станут доступны.
Причина того, что интерфейс не стал популярным, считается интерфейс M2. Это используется исключительно для твердотельных накопителей, которые имеют меньший форм-фактор, и используется в ноутбуках, но также и в настольных системах. Жестким дискам по-прежнему не хватает стандартов SATA. M.2 обладает большей гибкостью, поскольку не зависит от более крупных дисков, но может использовать четыре линии PCI-Express, что означает более быстрые диски, чем две линии SATA Express. На этом этапе потребители могут никогда не увидеть, что SATA Express будет принят.
Реверсим и улучшаем SATA контроллер
Вы когда-нибудь задумывались, как много вокруг умной электроники? Куда ни глянь, натыкаешься на устройство, в котором есть микроконтроллер с собственной прошивкой. Фотоаппарат, микроволновка, фонарик. Да даже некоторые USB Type C кабели имеют прошивку! И всё это в теории можно перепрограммировать, переделать, доработать. Вот только как это сделать без документации и исходников? Конечно же реверс-инжинирингом! А давайте-ка очень подробно разберём этот самый процесс реверса, от самой идеи до конечного результата, на каком-нибудь небольшом, но интересном примере!
Выбираем подопытного
К различным PCI-E устройствам я начал присматриваться ещё несколько лет назад, но большинство из встреченных мной девайсов либо были слишком просты и имели намертво зафиксированную функциональность, и очень небольшие возможности со стороны прошивки:
USB 3.0 контроллер на чипе ASMedia
Либо выглядели настолько сложно, что перспектива реверса такого монстра просто пугала:
Продвинутый сетевой контроллер Fujitsu
Мне же требовалось устройство, которое имеет:
встроенный мощный микроконтроллер
легко перепрограммируемое ПЗУ
отладочные интерфейсы (UART, JTAG)
встроенную прошивку (а не загружаемую драйвером)
Ну и в добавок, это должно быть широко поддерживаемым всеми системами устройством, например, SATA или USB контроллером. И, как вы уже догадались из названия статьи, недавно я наткнулся на вот такой SATA контроллер:
А именно, меня привлекла крайняя простота контроллера (только проц, да ПЗУ) и радиатор на нём (а значит, внутри мощный CPU!). Быстрый поиск по названию чипа ещё больше подогрел к нему интерес. Найденная прошивка для него весила аж 500 КБ, имела признаки ARM кода, не была пожата, и имела достаточно текстовых отладочных строк:
Даже по беглому взгляду на прошивку уже можно сказать, что исследовать её будет несложно
И на него была некоторая документация, в которой очень много выводов было не подписано, что давало шанс на наличие отладочных интерфейсов:
Какие подозрительные ряды неиспользуемых пинов, не правда ли?
В скором времени контроллер был куплен, и я взглянул на него повнимательнее:
Без радиатора контроллер выглядит ещё более простым
Увы, скорей всего эти выводы не тестовые
Но зато я нашёл даташиты на другие очень похожие контроллеры, с явным упоминанием отладки:
То, что производитель просит не подключать TST2-TST6 ну очень намекает на наличие JTAG, а прямое указание UART на TST0 и TST1 (в другом даташите) это уже джекпот. Засим было решено купить 88SE9215 как самый недорогой из доступных, и издеваться уже над ним:
Проверяем работоспособность
И вот объект изучения у нас в руках, первым делом проверяем, что он работает. Это важный момент, именно тут мы устраняем возможные будущие вопросы «Это я сломал или оно и было нерабочим??»
Для этого мне пришлось купить M2 райзер, поскольку единственный PCI Express слот моего ПК занят видеокартой:
Впервые вживую увидел разъём miniUSB 3.0. Солидно!
В общем, тест прошёл успешно, я даже установил систему на HDD, подключенный к этому контроллеру, всё подцепилось стандартными драйверами:
При запуске ПК мелькает информация о состоянии контроллера, это PCI Option ROM и по идее из этого меню можно что-то настраивать, но мне никак не удалось зайти в настройки:
Чтобы поймать этот момент, пришлось записывать видео
Анализируем компоненты
Теперь нужно определить, что с чем соединено, где процессор, а где ПЗУ, и какие компоненты за что отвечают. В нашем случае анализ крайне простой, особенно учитывая наличие даташитов:
Да, простые компоненты вроде транзисторов и конденсаторов нас не интересуют
Ну а соединения компонентов за нас нарисовал производитель Исследователям на заметку
Что-то первое попавшееся из гугла для примера
Точное назначение и тип компонентов узнаём по маркировке и даташитам. В нашем случае список компонентов довольно небольшой:
Маркировка
Назначение
Параметры
SATA III x4 / PCI-E 2.0 x1
Получаем прошивку
Вот мы убедились, что устройство работает, проанализировали, из каких компонентов оно состоит, теперь следует его «забэкапить», по максимуму извлечь из него данные, чтобы в будущем можно было его к этому же состоянию и вернуть. Прошивка может находиться как во внешнем ПЗУ, так и в самом контроллере, это тоже следует учитывать и внимательно смотреть документацию.
Обычно прошивку можно получить тремя способами, это:
обновления от производителя
программатором из ПЗУ / контроллера
по отладочным интерфейсам из устройства
Самая простая клипса с али, стоит меньше бакса
Мы ещё не раз увидим эту коробочку с надписью PF
И в два клика ПЗУ определилось и прочиталось программатором:
Да, автор программатора очень любит писать «флешь» с мягким знаком
Часто контроллер мешает считыванию и приходится выпаивать микросхему или хотя бы подавать питание на устройство. В этом случае повезло, но на всякий случай считываем несколько раз и сравниваем содержимое, чтобы убедиться, что считалось корректно.
Анализируем прошивку
В качестве объекта для анализа я взял скачанную с сайта прошивку (чтобы начать исследование ещё до того, как купленный контроллер приедет ко мне). Первым делом нужно определить структуру образа прошивки. При беглом просмотре сразу видно, что большую часть образа занимает пустое место, а полезные данные начинаются на некоторых адресах, кратных 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 автоматически приведут к чтению/записи физической памяти ПК!
Ищем отладочные интерфейсы
Надоело смотреть на скриншоты ассемблерного кода? Возвращаемся к железякам! У нас есть набор тестовых контактов, но мы не знаем, где на них какие отладочные интерфейсы (и есть ли они там вообще). Сначала нужно что? Правильно, подпаяться к ним и вывести на гребёнку:
Импровизированное рабочее место инженера
Производитель совсем не заботится о глазах реверс-инженеров, нет бы хоть пятаки сделать!
Раскрыт главный секрет статьи! PF означает Pin Finder
Ииии ничего не нашлось:
Ну хоть узнали, какие выводы 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 пина:
990x.top
Простой компьютерный блог для души)
IDE/SATA контроллер — что это?
В данном материале будет простыми словами описано такое устройство как контроллер IDE/SATA.
IDE/SATA контроллер — что это такое?
Устройство (чип) на материнской плате, необходимое для функционирования подключенных жестких дисков.
Важно понимать, контроллер может быть двух вариантов:
Простыми словами — чип, благодаря которому работают порты SATA (или IDE):
К этим портам мы подключаем устройства для постоянного хранения данных — жесткие диски (HDD) или твердотельный накопитель (SSD). Также можно подключить привод CD/DVD, однако им уже мало кто пользуется. Также порты могут быть разных цветов, разница — порты имеют разную спецификацию (попросту одни работают немного медленнее чем другие, например может быть SATA 2 и 3).
Раньше некоторые материнские платы содержали сразу два интерфейса — SATA и IDE. Один был основным, а второй — функционировал за счет установки дополнительного чипа на плату.
Также такой контроллер может быть внешним, который подключается используя шину PCI-E:
Для функционирования устройства необходимо установить драйвера. Чтобы установить операционную систему на такой диск, подключенный к внешнему контроллеру — также нужно заранее подготовить драйвера, а лучше внедрить их сам образ (например утилитой nLite).
Отличия ревизий SATA
В основном отличаются скоростью: