Аппаратные интерфейсы ПК. Энциклопедия - Михаил Гук
Шрифт:
Интервал:
Закладка:
¹ Рекомендуется, чтобы на сигнал чтения по этому адресу устройство не отвечало.
² Регистры сектора, цилиндра и головки в режиме LBA содержат указанные биты логического адреса.
Альтернативный регистр состояния AS (для первого канала адрес 3F6h, для второго — 376h) имеет те же биты, что и основной (см. ниже), но его чтение не приводит ни к каким изменениям состояния устройства.
Регистр управления устройством DC (3F6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Программный сброс через регистр DC должен отрабатываться ив состоянии Sleep.
Назначение битов регистра DC:
♦ биты [7:3] зарезервированы;
♦ бит 2 — SRST (Software Reset) — программный сброс, действует все время, пока бит не будет снят (оба устройства на шине воспринимают программный сброс одновременно);
♦ бит 1 — nIEN (Interrupt Enable) — инверсный бит разрешения прерывания (при нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход);
♦ бит 0–0.
Регистр адреса устройства DA (3F7h, 377h) использовался только в первой версии ATA для совместимости со старыми контроллерами, чтением этого регистра можно было определить адресованный привод и головку. Регистр выпадает из блока (он совпадает с диагностическим регистром состояния контроллера НГМД) и рекомендуется, чтобы устройство ATA не отвечало на чтение этого регистра. Если устройство отвечает на чтение, то оно не должно управлять битом DD7 во избежание конфликта с контроллером НГМД, у которого по этой линии передается бит смены носителя. Из-за несоблюдения этого требования могут возникать проблемы, когда контроллер (адаптер) ATA и контроллер НГМД находятся на разных платах.
Назначение битов регистра DA:
♦ бит 7 — (HiZ) — высокоимпедансный, при считывании не выдается на шину;
♦ бит 6 — nWTG — инверсный признак записи (во время физического выполнения записи на носитель бит нулевой);
♦ биты [5:2] — nHS[3:0] — номер головки (инверсные биты);
♦ биты [1:0] — nDS[1:0] — выбор устройства (инверсные биты): 10 — выбрано устройство 0, 01 — выбрано устройство 1.
Регистр данных DR (1F0h, 170h) может использоваться как 8-битный или 16-битный в зависимости от типа данных, передаваемых в текущей команде. Обращение к этому регистру происходит в режиме обмена PIO (когда сигнал DMACK# неактивен), при выполнении передач протокола PIO (PIO Out) хост производит запись в этот регистр, при PI (PIO In) — чтение. В режиме DMA обмен данными происходит через порт данных, при этом активны сигналы DMARQ и DMACK#, а сигналы CS0# и CS1# неактивны.
Регистр ошибок ER (1F1h, 171h) хранит состояние выполнения последней операции или диагностический код. После завершения операции на наличие ошибки указывает бит ERR регистра состояния.
Назначение битов регистра ER:
♦ бит 7 — зарезервирован;
♦ бит 6 — UNC (Uncorrectable Data Error) — неисправимая ошибка данных;
♦ бит 5 — МС (Media Changed) — смена носителя (после смены носителя первая команда обращения отвергается и устанавливается данный бит, после сброса бита следующие команды будут выполняться нормальным образом);
♦ бит 4 — IDNF (ID Not Found) — указывает на ненайденный идентификатор сектора;
♦ бит 3 — MCR (Media Change Requested) — индикатор запроса смены носителя (после обнаружения запроса смены носителя команды Door Lock будут возвращать бит ошибки ERR и бит MCR, бит MCR сбрасывается командами Door Unlock, Media Eject или сигналом аппаратного сброса);
♦ бит 2 — ABRT (Aborted Command) — устанавливается, если команда отвергнута как недействительная или в случае возникновения иной ошибки;
♦ бит 1 — TK0NF (Track 0 Not Found) — указывает на то, что по команде Recalibrate не удалось найти нулевой трек;
♦ бит 0 — AMNF (Address Mark Not Found) — не найден адресный маркер данных в заголовке сектора.
После выполнения любого сброса или команды Execute Device Diagnostic регистр ошибок содержит диагностический код. Трактовка битов, за исключением бита 2 (ABRT), может меняться в зависимости от исполненной команды.
Регистр свойств FR (1F1h, 171h) используется в зависимости от команды. В команде Set Features через него задается код подкоманды. Некоторые старые устройства могут игнорировать запись в этот регистр. До принятия спецификации ATA-2 в этот регистр помещали значение рекомендуемого номера цилиндра для предкомпенсации записи.
Регистр счетчика секторов SC (1F2h, 172h) содержит число секторов, участвующих в обмене. Хост инициализирует этот регистр до подачи команды (нулевое значение соответствует 256 секторам). По успешному завершению операции доступа к данным регистр должен обнулиться. Если команда завершилась с ошибкой, в регистре будет число секторов, которые должны быть переданы для успешного завершения предыдущего запроса. Команды Initialize Device Parameters или Write Same могут переопределить значение этого регистра. В некоторых командах регистр используется для передачи иных параметров.
Регистры номера сектора SN (1F3h, 173h) и номера цилиндра — младшего СL (1F4h, 174h) и старшего байта СН (1F5h, 175h) — имеют двоякое назначение в зависимости от выбранной системы адресации (CHS или LEA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при выполнении операции устройство поместит в них адрес, по которому встретилась ошибка.
Регистр номера устройства и головки D/H (1F6h, 176h) кроме хранения части адресной информации служит для выбора ведущего или ведомого устройства и метода адресации.
Назначение битов регистра D/H:
♦ биты 7 и 5 вплоть до ATA-3 должны были быть единичными, в ATA/ATAPI-4 их объявили устаревшими;
♦ бит 6 — L — единичным значением указывает на применение режима адресации LBA, при нулевом значении бита используется режим CHS;
♦ бит 4 — DEV (Device) — выбор устройства, при DEV=0 выбрано ведущее, при DEV=1 — ведомое;
♦ биты [3:0] имеют двоякое назначение в зависимости от выбранной системы адресации, в режиме CHS они содержат номер головки, в режиме LBA — старшие биты логического адреса.
Как и предыдущие (SN, CH и CL), адресный регистр D/H инициализируется хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. До принятия спецификации ATA-2 считалось, что адресные регистры должны модифицироваться и после успешного выполнения операции, отражая текущее значение адреса в носителе.
Регистр состояния SR (1F7h, 177h) отражает текущее состояние устройства в процессе выполнения команд: занятость, готовность, наличие ошибок и др. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает запрос аппаратного прерывания.
Назначение битов регистра SR описано ниже.
♦ Бит 7 — BSY (Busy) указывает на занятость устройства, значение этого бита действительно всегда. При BSY=1 устройство игнорирует попытки записи в командный блок регистров, а чтение этих регистров дает неопределенный результат. При BSY=0 регистры командного блока доступны, в это время устройство не может устанавливать бит DRQ, изменять значение битов ЕRR и содержимое остальных командных регистров (могут меняться только значения битов IDX, DRDY, DF, DSC и CORR). Бит может устанавливаться на кратковременный интервал, так что хост может этого не заметить. Бит устанавливается:
• при сбросе устройства;
• по получении команды, если не устанавливается DRQ;
• между передачами блоков данных в режиме PIO и после них, пока не обнулился DRQ;
• во время передач данных в режиме DMA.
♦ Бит 6 — DRDY (Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Если состояние бита изменилось, оно не может вернуться обратно до чтения регистра состояния. При DRDY=0 устройство воспринимает только команды Execute Device Diagnostic и Initialize Device Parameters, прекращая выполнение текущей команды и сообщая об этом флагом ABRT в регистре ошибок и флагом ERR в регистре состояния. Другие команды приводят к непредсказуемым результатам. Устройства ATAPI сбрасывают бит по любому сбросу и команде Execute Device Diagnostic. Бит устанавливается устройством ATA, когда оно готово к выполнению всех команд. Устройство ATAPI устанавливает бит до завершения выполнения команд, за исключением команд Device Reset и Execute Device Diagnostic.