Драйвер жесткого диска
і і і(байт)і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДґ
і АМ і Адресный маркер і 4 і
і ИНТ1 і Интервал і 9-12 і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДґ
і і Поле идентификации: і і
і СИНХ1 і Синхробайт і 1 і
і ИНТ2 і Интервал і 2 і
і СРВ і Байт для сравнения і 1 і
і ЦСБ і Старший байт номера цилиндра і 1 і
і ЦМБ і Младший байт номера цилиндра і 1 і
і ГЛВ і Номер головки і 1 і
і СЕКТ і Номер сектора і 1 і
і ФЛАГ і Флаговый байт і 1 і
і НУЛЬ і Нулевой байт і 1 і
і КС1 і Контрольная сумма поля идентификации і 4 і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДґ
і ИНТ3 і Интервал і 16 і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДґ
і і Область данных: і і
і СИНХ2 і Синхробайт і 1 і
і ИНТ4 і Интервал і 2 і
і ДАННЫЕ і Поле данных і 512 і
і КС2 і Контрольная сумма поля данных і 4 і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДґ
і ИНТ5 і Интервал і 43 і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДЩ
Начало сектора обозначается при помощи уникальной
комбинации, называемой адресным маркером. Пять интервалов,
обозначенных в таблице ИНТ1 - ИНТ5, заполняются нулями, причем длина
ИНТ2 и ИНТ4 постоянна и равна 2 байтам, в то время как ИНТ1, ИНТ3 и
ИНТ5 могут иметь разную длину, немного отличающуюся от значений,
приведенных в таблице. Эти три интервала предназначены для
подготовки накопителя к считыванию (записи) следующей за ним области, а
различие в длине объясняется тем, что адресный маркер, поле
идентификации и данные могут записываться в разное время поверх
ранее имевшейся информации, что не обеспечивает точного совпадения
физической длины записанной области и ранее имевшейся на этом месте
области.
Отличия в длине могут составлять несколько бит, чем объясняется наличие
после после интервалов синхробайта, позволяющего определить
истинную начальную границу области и правильно сгруппировать все
последующие биты по байтам. Байт СРВ имеет постоянное значение для
всех секторов и используется для проверки правильности считывания
поля идентификации. Флаговый байт содержит служебную информацию, в
частности отмечает дефектность сектора, если он не пригоден для записи.
Контрольные суммы служат для проверки правильности считывания информации
из поля идентификации и области данных и вычисляются специальным
генератором кодов коррекции ошибок (Error Correction Code, ECC) с
производящим полиномом 32-й степени.
Контроллер жестких дисков для АТ-подобных ПЭВМ
IBM PC AT отличается от всех предыдущих моделей IBM PC и
совместимых ПЭВМ в следующем:
- стандартный BIOS обеспечивает возможность работы как с
накопителями на гибких, так и с накопителями на жестких дисках;
- контроллеры жестких и гибких дисков расположены на одной плате;
- адреса портов ввода-вывода, предназначенных для управления
жестким диском, и назначение портов полностью отличаются от ХТ-подобных
ПЭВМ.
Возможно подключение к одному ПЭВМ двух жестких дисков. Каждый
диск имеет свой набор портов (1F0h-1F7h для первого и 170h-177h для
второго). Ниже будут описаны порты только первого
диска. Назначение портов второго диска аналогично первому.
Описание портов ввода-вывода
Порт 1F0h
Предназначен для обмена данными с внутренним ОЗУ
контроллера, являющимся промежуточным звеном между оперативной памятью
ПЭВМ и накопителем.
Порт 1F1h.
При чтении через этот порт можно получить информацию о
последней возникшей ошибке:
7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і і 0 і і 0 і і і і Бит:
АДВДБДВДБДДДБДВДБДДДБДВДБДВДБДВДЩ ДДДД
і і і і і АД>0: 1=адресный маркер данных не
і і і і і найден
і і і і АДДДДД>1: 1=ошибка на нулевой дорожке
і і і АДДДДДДДДД>2: 1=выполнение команды прекра-
і і і щено программно, команда
і і і не завершилась
і і АДДДДДДДДДДДДДДДДД>4: 1=идентификатор сектора не
і і найден
і АДДДДДДДДДДДДДДДДДДДДДДДДД>6: 1=неисправимая ошибка в дан-
і ных, ошибка контрольной
і суммы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДД>7: 1=дефектный сектор
Порт 1F2h.
Чтение/запись числа секторов для последующей операции.
Порт 1F3h.
Чтение/запись параметра "номер сектора" для последующей
операции.
Порт 1F4h.
Чтение/запись старших битов номера цилиндра для последующей операции
(биты 0 - 1 - это биты 8 - 9 в 10-битовом номере цилиндра).
Порт 1F5h.
Чтение/запись младших восьми битов номера цилиндра для
последующей операции.
Порт 1F6h.
Чтение/запись номера устройства и головки для последующей
операции.
Порт 1F7h (запись).
Вывод команды по управлению накопителем.
Порт 1F7h (чтение).
Чтение состояния накопителя и результатов предыдущей команды:
7 6 5 4 3 2 1 0
ЪДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДї
і і і і і і і і і Бит:
АДВДБДВДБДВДБДВДБДВДБДВДБДВДБДВДЩ ДДДД
і і і і і і і АД>0: 1=предыдущая команда завер-
і і і і і і і шилась с ошибкой
і і і і і і АДДДДД>1: 1=сигнал "индекс"
і і і і і АДДДДДДДДД>2: 1=данные при выполнении пос-
і і і і і ледней операции были скор-
і і і і і ректированы при помощи
і і і і і алгоритма ECC
і і і і АДДДДДДДДДДДДД>3: 1=идет процесс обмена данными
і і і АДДДДДДДДДДДДДДДДД>4: 1=поиск завершен
і і АДДДДДДДДДДДДДДДДДДДДД>5: 1=ошибка записи
і АДДДДДДДДДДДДДДДДДДДДДДДДД>6: 1=устройство готово для чте-
і ния, записи или поиска
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДД>7: 1=устройство занято выполне-
нием команды ( остальные
биты не несут смысловой
нагрузки)
Система команд
Код команды заносится в порт 1F7h после того, как
подготовлены все параметры в портах 1F2h - 1F6h. Выполнение команды
начинается сразу после занесения в порт 1F7h кода команды. Команда
состоит из одного байта. Старшие 4 бита содержат код требуемой
операции, младшие содержат параметры. Перечень команд с возможными
значениями параметров приведен в таблице.
ЪДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Код і Назначение і Параметры і
іоперацииі і і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 1 і Рекалибровать (сброс і Период импульсов сигнала і
і і головок на цилиндр 0) і "шаг" і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 2 і Чтение секторов і Биты, определяющие необходи-і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ мость повторных обращений і
і 3 і Запись секторов і к диску и повторных попыток і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ считывания при ошибках і
і 4 і Проверка секторов і контрольной суммы і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 5 і Форматирование дорожкиі Параметр = 0 і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 7 і Поиск цилиндра і Период импульсов сигнала і
і і і "шаг" і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і 9 і Диагностика і Параметр = 0 і
і ГДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і Установка параметров і Параметр = 1 і
і і накопителя (максималь-і і
і і ное число головок и і і
і і секторов) і і
АДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Для получения информации о жёстких дисках, а также их самодиагностики
необходимо программировать IDE контроллер. Для того, чтобы приведённый
исходный текст модуля был более или менее понятен, необходимо разъяснить
некоторые принципы программирования IDE контроллера. Базовый порт
ввода/вывода для первого IDE контроллера - 1F0h. Ещё я использовал порт
контроля (3F6h) для сброса состояния контроллера. Для сброса контроллера
служит функция hd_reset(). Так как контроллер генерирует запрос на
прерывание IRQ14, то е
| | скачать работу |
Драйвер жесткого диска |