-1

Я хочу обратиться к цилиндрам жесткого диска, но не могу найти хорошее руководство по распиновке интерфейса IDE. Кто-нибудь знает, как это сделать?

Я не хочу ничего читать / записывать на диск, просто перемещать руку через цилиндры. И я хочу сделать это, подключив несколько проводов к интерфейсу и отправив несколько сигналов.

3 ответа3

2

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

Я нашел сайт об основах доступа к моторам на дискетах здесь:http://www.epanorama.net/circuits/diskstepper.html

Тем не менее, я считаю маловероятным, что подобный прямой доступ к двигателю возможен с приводами в стиле IDE ... Современные (после MFM) жесткие диски серьезно абстрагировали управление физическим оборудованием даже от вызовов API самого низкого уровня. Я не уверен, возможно ли то, что вы хотите сделать, хотя, возможно, вы могли бы написать об этом Стиву Гибсону на grc.com.

2

Вы можете найти что-то интересное, например, в Art of Assembly: Глава 13

После 13.2.5 INT 13h - Службы дисков низкого уровня, вы можете использовать int 13h

Функция int 13h предоставляет несколько различных низкоуровневых дисковых сервисов программам для ПК: сброс системы дискет, получение статуса дискеты, чтение секторов дискеты, запись секторов дискеты, проверка секторов дискеты, форматирование дорожки дискеты и многое другое.

Из раздела Некоторые общие вызовы BIOS дисковой подсистемы:
АХ = 0 Ч
Входные параметры: такие же, как (4) выше, за исключением того, что нет необходимости в секторе
Выходные параметры: То же, что (4) выше. Отправляет головку диска на указанную дорожку на диске.
Описание: Отправляет головку диска на указанную дорожку на диске.

Что касается распиновки IDE ... это первое изображение, которое появилось в поиске Google "IDE PINOUT":

0

Интерфейс IDE (действительно Parallel ATA) хорошо описан в статье Википедии ("Parallel ATA"). Оттуда вы можете найти ссылки на актуальные спецификации. Старые версии спецификаций все бесплатно для скачивания (или были, когда я последний раз проверял).

Однако DigitalSorceress верен: на разъеме нет контактов, которые бы просто и прямо указывали приводу перемещать рычаг. (Даже интерфейс дисковода гибких дисков не так просто.) Изначально IDE-диски были предназначены для непосредственного подключения к 16-битной шине ISA в IBM PC AT. Диск декодирует несколько "портов" ввода / вывода, которые могут быть адресованы процессором. Привод интерпретирует их как "регистры". Вы загружаете различные регистры с параметрами для команды, а затем записываете команду в регистр команд. (Вы делаете это, передавая протокол шины ISA контактам на диске IDE.) Затем проверьте статус, прочитав несколько одних и тех же регистров.

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

Если вы думаете о подключении накопителя к Arduino или чему-то другому (я думаю, что это должно быть что-то вроде Mega, чтобы получить достаточное количество выводов), вы, вероятно, можете заставить головы двигаться, при значительном объеме программирования. Помните, что в этом случае вы будете не только реализовывать протокол PATA, вы также будете использовать протокол ISA в своем коде. Это не очень сложно, но все это складывается, и я не знаю, будет ли Arduino достаточно быстрым, чтобы соответствовать требованиям времени в автобусе.

Было бы намного проще просто подключить диск к старому ПК. Затем вы могли бы написать небольшой ассемблерный код для вызова функций INT из BIOS для доступа к различным блокам на диске, как предложил Хастур.

Или вы можете подключить его к адаптеру PATA-USB и запустить его с более нового ПК. Нетрудно написать программу, которая взаимодействует с неформатированным жестким диском (то есть, без распознаваемой файловой системы).

Другая сложность заключается в том, что мы больше не обращаемся к жестким дискам по цилиндрам / головкам / секторам. Мы просто используем LBA - адреса логических блоков. Они начинаются с 0 и идут линейно до n-1. Диск беспокоится о том, как они отображаются в C / H / S местоположениях. Это отображение не является простым, потому что в современных приводах число секторов на дорожке изменяется от внешних цилиндров к внутренним. Честно говоря, я не знаю, могут ли современные накопители даже принимать адресацию C / H / S. Конечно, если вы просто отправите приводу серию увеличивающихся LBA, рычаг будет двигаться время от времени, когда вы пересекаете границы цилиндров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .