Главная » Ассемблер, Железо » Непосредственная работа с регистрами контроллера жесткого диска

0

Необходимость работать напрямую с регистрами контроллера диска возникает в следующих случаях:

•       при переключении процессора в защищенный режим (прерывания DOS и BIOS становятся недоступными);

•       при работе с дисками большого (свыше 8 Гбайт) объема или нестандартного (не-DOS) формата;

•       в измерительных системах и системах управления реального времени (для ускорения операций ввода-вывода);

•       в системах с повышенными требованиями к обеспечению защиты информации (для предотвращения перехвата управления на уровне прерываний, например, компьютерным вирусом).

Обратите еще раз внимание на широкий ассортимент функций в разделе «Группа дисковых функций MS-DOS». Реализуемые ими операции необходимы для нормального функционирования файловой системы — для обеспечения работы в защищенном режиме программист вынужден сам писать нечто аналогичное. Поэтому выполнение перехода в защищенный режим при помощи самодельного программного обеспечения имеет смысл только в случае острой необходимости — например, если требуется реализовать многозадачность, но нельзя применять стандартные операционные системы. Стандарт АТА [62, 63] позволяет подключать к каждому каналу (то есть к одному кабелю) по два устройства. Современные IBM- подобные персональные компьютеры допускают использование до четырех каналов — следовательно, в общей сложности можно установить на компьютер до 8 дисководов с интерфейсом этого типа. Однако встроенный контроллер материнской платы поддерживает только два канала. Еще два дополнительных канала могут быть реализованы на платах расширения (например, для подключения устройства чтения компакт-дисков через звуковую карту), однако следует иметь в виду, что системный BIOS не будет с ними работать, в том числе — не будет выполнять процедуру поиска подключенных к ним устройств при включении питания. Для работы с дополнительными каналами нужно устанавливать специальные драйверы. Наличие на материнской плате двух каналов для подключения АТА- устройств фактически стало стандартом. Для этих каналов жестко закреплен диапазон адресов ввода-вывода и номера используемых прерываний (каналы 1 и 2 в табл. 6.41). С дополнительными каналами ситуация менее определенная: фирмы-изготовители договорились между собой о диапазоне адресов регистров, однако номера прерываний не закреплены жестко, они являются рекомендованными — изготовитель, пользователь или операционная система могут вместо них использовать любые другие свободные номера [37].

Таблица 6.41. Пространство ввода-вывода дисководов АТА

Номер канала

Диапазон адресов

Номер сигнала

 

 

 

прерывания IRQ

 

Регистры

Регистры

 

 

команды

контроля

 

1

1F0h-1F7h

3F6h-3F7h

14

2

170h-177h

376h-377h

15

3

1 E8h—1EFh

3Eeh-3EFh

11

4

168h-16Fh

36Eh-36Fh

10

В табл. 6.42 даны адреса регистров для двух основных каналов (для дополнительных каналов порядок регистров аналогичный). Для адресации данных на диске с интерфейсом АТА можно использовать либо режим LBA, либо режим CHS, причем назначение регистров контроллера зависит от используемого режима адресации. Все регистры, за исключением регистра данных, 8-разрядные, а регистр данных — 16-разрядный.

Таблица 6.42. Функциональное назначение регистров контроллера жесткого диска


Адрес регистра

Назначение регистра

Канал 1

Канал 2

В режиме чтения

В режиме записи

1F0h

170h

Регистр данных (DR)

 

1F1h

17lh

Регистр ошибок (ER)

Регистр свойств (FR)

1F2h

172h

Счетчик секторов (SC)

 

1F3h

173h

В режиме CHS — регистр

 

 

 

номера сектора (SN);

 

 

 

в режиме LBA — разряды 0-7

 

 

 

адреса сектора

 

1F4h

174h

В режиме CHS — регистр

 

 

 

младшего байте номера

 

 

 

цилиндра (CL);

 

 

 

в режиме LBA — разряды

 

 

 

8-15 адреса сектора

 

1F5h

175h

В режиме CHS — регистр

 

 

 

старшего байта номера

 

 

 

цилиндра (СН);

 

Адрес регистра

Назначение регистра

Канал 1

Канал 2

В режиме чтения

В режиме записи

1F6h

176h

в режиме LBA — разряды 16-23 адреса сектора В режиме CHS — регистр номера устройства и головки (DH);

 

1F7h 3F6h

3F7h

177h 376h

377h

в режиме LBA — номер устройства и разряды 24-27 адреса сектора Регистр состояния (SR) Альтернативный регистр состояния (АС) Не используется

Регистр команд (CR) Регистр управления устройством (DC)

Рассмотрим формат регистров более подробно. Регистр данных (DR) используется при выполнении операции чтения или записи сектора в программном режиме ввода-вывода) (PI0). Этот регистр недоступен, пока не начнется операция чтения или записи. Нельзя обращаться к регистру, когда происходит обмен информацией между диском и памятью в режиме прямого доступа (DMA). Передача данных через регистр осуществляется 16-разрядными словами. Обратите внимание: это 16-разрядный регистр и его адресное пространство перекрывает следующий за ним регистр ошибок (еще один радиолюбительский трюк под названием «экономия пространства ввода-вывода»). Даже в том случае, если старший байт данных не используется (такая ситуация возможна в некоторых командах), чтение/запись все равно нужно выполнять целыми словами (обнуляя старший байт перед операцией записи и после операции чтения). Специально для упрощения и ускорения работы с регистром данных контроллера жесткого диска в набор команд процессоров с архитектурой Intel х86 (начиная с 80186) были введены операции группового ввода-вывода INSW и 0UTSW, хотя можно работать с данными и при помощи обычных команд ввода-вывода IN и OUT. Рассмотрим более подробно регистры контроллера жесткого диска. Регистр ошибок (ER) доступен только для чтения. Он определяет состояние адаптера после выполнения операции. Содержимое этого регистра нужно проверять в двух случаях:

•      после выполнения любой команды, если установлен бит ошибки ERR в регистре состояния;

•      после выполнения команды «диагностика» или после выполнения внутренней диагностики адаптера по системному сбросу.

Коды регистра ошибок после выполнения команды «диагностика»:

•     Olh — нет ошибки: устройство 0 исправно, устройство 1 — либо исправно, либо не присутствует в системе (не подключено);

•     00, 02h-7Fh — устройство 0 неисправно, устройство 1 — либо исправно, либо не подключено;

•     81h — устройство 0 исправно, устройство 1 неисправно;

•     80h, 82h—FFh — оба устройства (0 и 1) неисправны.

Во всех остальных случаях разряды регистра ошибок, формат которого показан на рис. 6.9, имеют следующее назначение:

бит О (AMNF) — не найден адресный маркер сектора;

•     бит 1 (TK0NF) — не найдена нулевая дорожка при выполнении команды «рекалибровка>>;

•     бит 2 (ABRT) — аварийное прекращение выполнения команды;

•     бит 3 (MCR) — получен запрос на смену носителя информации;

•     бит 4 (IDNF) — сектор с заданными координатами (цилиндр, головка, сектор) не найден;

•     бит 5 (МС) — произведена смена носителя информации;

•     бит 6 (UNC) — некорректируемая ошибка данных;

•     бит 7 — зарезервирован.

Рис. 6.9. Формат регистра ошибок

Если при выполнении команды ошибок не было, то все разряды регистра ошибок содержат нули. Если при выполнении команды происходит какая-либо ошибка, то соответствующий разряд регистра устанавливается в 1.

Регистр свойств (FR) расположен по тому же адресу, что и регистр ошибок, но доступен только для записи. Формат данных регистра изменяется в зависимости от команды. При выполнении обычных операций ввода-вывода этот регистр не применяется.

В регистр счетчдаа секторов (SC) заносится количество секторов, которое должно быть считано или записано (при записи 0 в этот регистр происходит обработка 256 секторов). Значение этого регистра уменьшается на единицу после обработки каждого сектора. При выполнении мультисекторной операции сектора должны располагаться на диске последовательно, друг за другом (то есть область данных должна быть непрерывной). Этот регистр доступен не только для записи, но и для считывания — в случае возникновения ошибки при выполнении операции чтения или записи в этом регистре будет находиться число секторов, оставшихся необработанными. В регистр номера сектора (SN) в режиме CHS загружается стартовый номер сектора при операциях чтения/записи. После обработки каждого сектора в этот регистр автоматически заносится номер следующего сектора, подлежащего обработке. Регистр доступен для чтения/записи. После выполнения команды он содержит номер последнего обработанного сектора. В режиме LB А регистр номера сектора содержит младший байт линейного адреса сектора (разряды 0-7).

Регистры младшего (CL) и старшего (СН) байтов номера цилиндра в режиме CHS определяют стартовый цилиндр для выполнения команды (в старых контроллерах дисков использовалось только 2 младших разряда регистра СН, то есть максимальный номер цилиндра был равен 1023). Регистры доступны для чтения/записи. После выполнения команды они содержат текущий адрес цилиндра.

В режиме LBA регистр CL содержит разряды 8-15, а регистр СН — разряды 16-23 линейного адреса сектора.

Рис. 6.10. Формат регистра номера устройства и головки

Формат регистра номера устройства и головки (DH) показан на рис. 6.10. Регистр доступен для чтения и записи. В режиме CHS разряды регистра имеют следующие значения:

•     биты 0-3 (HS0-HS3) — номер головки;

•     бит 4 (DEV) — выбор устройства (0 или 1);

•     бит 5 — зарезервирован (должен быть установлен в 1);

•     бит 6 (LBA) — признак режима LBA (должен быть сброшен в 0);

•     бит 7 — зарезервирован (должен быть установлен в 1). В режиме LBA назначение разрядов следующее:

•     биты 0-3 (LBA24-LBA27) — разряды 24-27 линейного адреса сектора;

бит 4 (DEV) — выбор устройства (0 или 1);

бит 5 — зарезервирован (должен быть установлен в 1);

бит 6 (LBA) — признак режима LBA (должен быть установлен в 1);

бит 7 — зарезервирован (должен быть установлен в 1).

Рис. 6.11. Формат регистра состояния

Формат регистра состояния (SR) показан на рис. 6.11. Регистр состояния отображает состояние устройства и доступен только для чтения. Значения битов регистра состояния (возникновение определенного состояния индицируется установкой соответствующего бита в 1) перечислены ниже:

•       бит О (ERR) — при выполнении команды произошла ошибка (этот бит сбрасывается при поступлении следующей команды пли аппаратном сбросе устройства). В случае возникновения ошибки информацию о ней можно получить из регистра ошибок;

•       бит 1 (IDX) — сигнал Index, каждым производителем трактуется по-своему (поэтому при работе с диском этот сигнал нужно просто игнорировать);

•       бит 2 (C0RR) — при считывании с диска имела место ошибка, но данные были успешно скорректированы;

•       бит 3 (DRQ) — устройство готово к обмену данными с процессором;

•       бит 4 (DSC) — головки чтения/записи завершили поиск заданного сектора;

•       бит 5 (DF) — устройство неисправно;

•       бит 6 (DRDY) — устройство готово к приему следующей команды;

•       бит 7 (BSY) — устройство занято выполнением какой-то операции, ему нельзя передавать команды или данные, нельзя считывать содержимое регистров (во избежание получения ложных данных).

ПРИМЕЧАНИЕ

Если разряд готовности к приему команды DRDY сброшен в 0, устройство реагирует только на две аварийные команды — выполнить диагностику устройства (EXECUTE DEVICE DIAGNOSTIC) и установить параметры устройства (INITIALISE DEVICE PARAMETERS).

Регистр команд (CR) используется для загрузки кода выполняемой команды. Запись кода команды должна производиться в последнюю очередь — только после того, как в остальные регистры занесены все необходимые для ее выполнения данные. Выполнение команды начинается сразу после записи кода в этот регистр. Альтернативный регистр состояния (АС) по формату аналогичен регистру состояния (SR), но считывание данных из него не приводит к снятию запроса прерывания.

Рис. 6.12. Формат регистра управления устройством

Регистр управления устройством (DC) доступен только для записи. Значения битов этого регистра следующие (см. рис. 6.12):

•          бит 0 — не используется (всегда должен быть сброшен в 0);

•       бит 1 (nIEN) — запрет прерывания (0 — прерывание разрешено, 1 — запрещено);

•       бит 2 (SRST) — программный сброс всех подключенных к данному каналу устройств (сброс происходит при установке этого бита в 1);

•          биты 3-7 — зарезервированы (игнорируются).

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии