Изобретаем жесткий диск. Часть 7. Схема.

В предыдущих частях мы начали дизассемблирование на основе только документации к процессору. Однако, хорошо бы посмотреть как программа управления связана с остальной аппаратурой. Для этого вооружимся тестером с пищалкой, платой WD21000, документацией на микросхемы и начнем рисовать схему электрических соединений.

Так как в данном исследовании мне хотелось бы по максимуму использовать операционную систему Linux, то рисовать схему будем в KiCad.

Исходные файлы схемы доступны на github проекта. Там же все страницы схемы в формате pdf.

Сначала, я добавил в схему все известные микросхемы. Каждую на свою отдельную страницу и объединил их всех на странице верхнего уровня вот так:

Главная страница схемы WD21000.

Главная страница схемы WD21000.

Continue reading

Обзор функций программы R.tester

В ролике сделан обзор функций программы R.tester на примере SATA и SCSI/Fibre channel дисков. Показан принцип работы debug-контейнеров. Продемонстрирована возможность выполнить SCSI форматирование.

Изобретаем жесткий диск. Часть 6. Технологический режим.

Обмен данными с жестким диском производится через интерфейс IDE, SATA (или какой-либо другой) при помощи стандартизированных команд. Чтобы прочитать данные с диска достаточно использовать всего две команды: идентификации и, собственно, чтения. Первая нужна для получения размера диска и определения типа команды чтения, которая будет работать со всей поверхностью диска.

Если помните, то за историю своего существования жесткие диски преодолевали целый ряд ограничений емкости.

Некоторые из ограничений преодолевались добавлением новой команды чтения с адресом большей разрядности. Следовательно, из идентификации нужно узнать, какая команда чтения позволит получить доступ ко всей поверхности. Кроме стандартных команд, фирма-производитель дисков еще реализует и использует, так называемые, технологические команды. Их можно разделить на три больших класса:

  • информационные,

  • производственные,

  • диагностические.

Рассмотрим эти классы чуть более подробно.

Continue reading

Изобретаем жесткий диск. Часть 5. Дизассемблирование.

Итак, приступим к самому магическому действу, а именно, исследованию прошивки нашего подопытного накопителя. Для этого будем использовать IDA disassembler.

Запускаем сей продукт, выбираем «открыть файл» и указываем файл считанный из ПЗУ(см. часть 3 данного опуса). Далее появляется вот такое окно:

IDA disassembler, load new file

IDA disassembler, load new file

Изменяем тип процессора на «Intel 80196NP». Хотя на нашей плате стоит версия NU, однако, с точки зрения разбора кода программы эти процессоры не отличаются. Нажимаем «ОК».

Continue reading

Изобретаем жесткий диск. Часть 4. Документация на микросхемы.

Перед тем как переходить к детальному разбору конструкции и программы управления жесткого диска WD AC21000 добавим к проекту всю имеющуюся документацию на микросхемы. Файлы загружены на GitHub: https://github.com/rlabru/WD21000/tree/master/doc

Плата жесткого диска WD AC2100 (вид со стороны компонентов)

Плата жесткого диска WD AC2100 (вид со стороны компонентов)

Файлы имеющие префикс «t_» — это попытки перевести документацию на русский язык.

Continue reading

Изобретаем жесткий диск. Часть 3. Удалось прочитать ПЗУ.

В прошлом выпуске была реализована плата-переходник для подключения ПЗУ к плате Arduino MEGA2560. С тех пор удалось протестировать плату, написать и запустить программу чтения данных из ПЗУ.

На рисунке ниже показан основной цикл программы. Полностью программу можно скачать с репозитория проекта на GitHub.

Отрывок программы для Arduino для чтения ПЗУ WD21000

Отрывок программы для Arduino для чтения ПЗУ WD21000

Основной цикл void loop() обрабатывает две команды, подаваемые от ПК к устройству чтения ПЗУ платы Arduino: „d“ и „r“.

Команда „d“ считывает одно слово wData (2 байта) из ПЗУ по текущему адресу в переменной romAddress, выполняет инкремент romAddress и передает через последовательный порт в компьютер прочитанное слово в виде текстовой строки с шестнадцатиричным представлением значения. Еще программа следит за тем, чтобы возвращаемая строка была всегда одного и того же размера. Например, вместо считанного значения 0 будет сформирована строка «0000».

Команда „r“ сбрасывает romAddress в 0.

Continue reading

Диагностика неисправностей жестких дисков. Часть 2.

В предыдущем посте по данной теме был обозначен список последовательных шагов диагностики.

В этой части мы раскроем подробности следующих пунктов:

повреждены элементы электроники (проверка платы электроники); механические повреждения.

Что делать раньше: осматривать плату, или искать вмятины — это пусть каждый решает сам. Чтобы поставить диагноз нужно собрать данные о всех видимых неполадках: от повреждений на корпусе, до проблем с элементами электроники. Так что, в любом случае, плату следует открутить и осмотреть, даже если нашлись вмятины.

Пример применения описанной ниже диагностики можно найти в видеоролике для диска Seagate Momentus 5400.6

Continue reading

Изобретаем жесткий диск. Часть 2. Чтение ПЗУ.

Целью под номером три в списке запланированных работ по «жесткому диску» значится: «считать микросхему ПЗУ». Для этого необходимо прочитать содержание старой 5-и вольтовой ПЗУ AT27C516 с разрядностью 16 бит и объемом 64К. Подходящего программатора и переходника под руками нет. Однако, возможно решить задачу при помощи подключения данной ПЗУ к Arduino MEGA2560. На фото ниже представлена реализация такого подключения.

Подключение к Arduino ПЗУ AT27C516

Подключение к Arduino ПЗУ AT27C516

Continue reading

R.tester: использование CERT Tool для проверки жесткого диска

Видеоинструкция по использованию компонента CERT Tool, входящего в состав диагностической утилиты R.tester. Показана проверка жесткого диска Seagate в случае, когда данные с него не нужны.

Предыдущая видеоинструкция R.tester: быстрая диагностика Seagate