Каждое устройство ATA имеет стандартный набор регистров, адресуемых сигналами от хост-адаптера (CS0#, CS1#, DA2, DA1, DA0, DIOR# и DIOW#). Набор регистров (табл. 9.6) состоит из двух блоков, выбираемых сигналами CS0# и CS1#, из которых активным (низкий уровень, «0») может быть только один. В таблице приведены адреса регистров в пространстве ввода-вывода IBM PC-совместимого ПК для первого и второго каналов ATA. При обращении к регистрам сигнал DMACK# должен быть неактивным. BSY регистра состояния. Запись в регистры должна производиться лишь при BSY=0 и DRQ=0, кроме особо оговоренных случаев. Если устройство поддерживает управление энергопотреблением, в «спящем» режиме содержимое этих регистров недействительно и запись игнорируется, кроме особо оговоренных случаев.
Таблица 9.6. Регистры контроллеров устройств ATA
| Адрес | Сигналы адресации канала № (0 — низкий уровень, 1 — высокий) | Назначение (R — чтение, W — запись) | |||||
|---|---|---|---|---|---|---|---|
| 1 | 2 | CS0# | CS1# | DA2 | DA1 | DA0 | |
| 1 | 1 | x | x | x | Нет обращения (шина данных в третьем состоянии) | ||
| 0 | 0 | x | x | x | Недопустимый адрес (шина данных в третьем состоянии) | ||
| 3FX | 37Х | ||||||
| 1 | 0 | 0 | X | x | Не используется (шина данных в третьем состоянии) | ||
| 1 | 0 | 1 | 0 | x | Не используется (шина данных в третьем состоянии) | ||
| 3F6 | 376 | 1 | 0 | 1 | 1 | 0 | R: Alternate Status (AS) — альтернативный регистр состояния |
| 3F6 | 376 | 1 | 0 | 1 | 1 | 0 | W: Device Control (DC) — регистр управления устройством |
| 3F7 | 377 | 1 | 0 | 1 | 1 | 1 | R: Drive Address (DA) — регистр адреса (не используется)¹ |
| 1FX | 17Х | ||||||
| 1F0 | 170 | 0 | 1 | 0 | 0 | 0 | R/W: Data (DR) — регистр данных |
| 1F1 | 171 | 0 | 1 | 0 | 0 | 1 | R: Error (ER) — регистр ошибок |
| 1F1 | 171 | 0 | 1 | 0 | 0 | 1 | W: Features (FR) — регистр свойств |
| 1F2 | 172 | 0 | 1 | 0 | 1 | 0 | R/W: Sector Count (SC) — регистр счетчика секторов |
| 1F3 | 173 | 0 | 1 | 0 | 1 | 1 | R/W: Sector Number (SN) — регистр номера сектора/LBA[7:0]² |
| 1F4 | 174 | 0 | 1 | 1 | 0 | 0 | R/W: Cylinder Low (CL) — регистр младшего байта номера цилиндра LBA[15:8]² |
| 1F5 | 175 | 0 | 1 | 1 | 0 | 1 | R/W: Cylinder High (CH) — регистр старшего байта номера цилиндра/LBA[23:16]² |
| 1F6 | 176 | 0 | 1 | 1 | 1 | 0 | R/W: Device/Head (D/H) — регистр номера устройства и головки/LBA[27:24]² |
| 1F7 | 177 | 0 | 1 | 1 | 1 | 1 | R: Status (SR) — регистр состояния |
| 1F7 | 177 | 0 | 1 | 1 | 1 | 1 | W: Command (CR) — регистр команд |
¹ Рекомендуется, чтобы на сигнал чтения по этому адресу устройство не отвечало.
² Регистры сектора, цилиндра и головки в режиме LBA содержат указанные биты логического адреса.
AS (для первого канала адрес 3F6h, для второго — 376h) имеет те же биты, что и основной (см. ниже), но его чтение не приводит ни к каким изменениям состояния устройства.
DC (3F6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Программный сброс через регистр DC должен отрабатываться ив состоянии
Назначение битов регистра DC:
♦ биты [7:3] зарезервированы;
♦ бит 2 — SRST (Software Reset) — программный сброс, действует все время, пока бит не будет снят (оба устройства на шине воспринимают программный сброс одновременно);
♦ бит 1 — nIEN (Interrupt Enable) — инверсный бит разрешения прерывания (при нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход);
♦ бит 0–0.