3. В фазе результата DQM
=1 и DIO
=1, хост должен считать байты результата из DR
, после чего биты установятся в значение DQM
=1 и DIO
=0, что соответствует переходу в фазу приема команды.
С момента получения команды и до окончания фазы результата в регистре MSR
бит CMD BSY
=1. Контроллер всегда можно принудительно сбросить (перевести в начало фазы команды) записью в регистр DOR или DSR. Если контроллер получит неподдерживаемую команду, он сразу выставит DQM
=1 и DIO
=1, что является указанием на необходимость чтения DR
. Хост должен прочитать из DR
код состояния, в котором будет значение 80h (недопустимая команда).
В современных контроллерах НГМД имеется буфер FIFO глубиной 16 байт, работающий при передаче данных (но не команд и параметров) через регистр DR
; в «историческом» контроллере i8272 буфера FIFO не было. Логика общения с регистром DR
остается той же. Буфер должен быть своевременно обслужен, чтобы не происходило его переполнения или опустошения. Логика буфера устанавливает запрос данных так, чтобы не отвлекать хост «по пустякам». При чтении из DR
запрос устанавливается, когда в буфере имеется (16– порог ) байтов или же считан последний байт сектора. При записи в DR
запрос первоначально устанавливается и удерживается до заполнения буфера, впоследствии он устанавливается снова, когда в буфере остается порог байтов. Переход в фазу результата происходит, когда завершается обмен хоста с DR
и буфер опустошается. Общение с регистром DR
при записи команд и параметров должно выполняться согласно значениям старших битов регистра MSR
(буфер FIFO при этом не используется).
9.2. Интерфейс ATA/ATAPI (IDE)
Интерфейс ATA (AT Attachment for Disk Drives) разрабатывался в 1986–1990 гг. для подключения накопителей на жестких магнитных дисках к компьютерам IBM PC AT с шиной ISA. Стандарт, выработанный комитетом X3T10, определяет набор регистров устройств и назначение сигналов 40-контактного интерфейсного разъема. Интерфейс появился в результате переноса стандартного (для PC/AT) контроллера жесткого диска ближе к накопителю, то есть создания устройств со встроенным контроллером — IDE (Integrated Drive Electronics). Стандартный контроллер AT позволял подключать до двух накопителей, что в интерфейсе ATA означает параллельное подключение контроллеров двух устройств. В спецификации ATA фигурируют следующие компоненты.
♦ Хост-адаптер — средства сопряжения интерфейса ATA с шиной компьютера. Хостом мы будем называть компьютер с хост-адаптером интерфейса ATA. Хост-контроллер — более развитый вариант хост-адаптера.
♦ Ведущее устройство (Master) — ПУ, в спецификации ATA официально называемое Device-0 (устройство 0).
♦ Ведомое устройство (Slave) — ПУ, в спецификации официально называемое Device-1 (устройство 1).
Хост-адаптер и устройства объединяются кабелем-шлейфом, соединяющим параллельно одноименные контакты интерфейсных разъемов. Регистры обоих контроллеров оказываются расположенными в одних и тех же областях пространства ввода-вывода. Для выбора устройства, исполняющего текущую команду, используется бит выбора накопителя ( DEV
) в регистре номера устройства и головки (drive/head register). Если бит DEV
=0, выбрано ведущее устройство, если DEV
=1 — ведомое. Запись в этот регистр воспринимается сразу обоими устройствами, на обращения к остальным регистрам реагирует только выбранное. Достаточно универсальный набор сигналов позволяет подключать любое устройство со встроенным контроллером, которому в пространстве портов ввода-вывода достаточно того же набора регистров, способное поддержать режим выбора устройства через вышеупомянутый бит. Принятая система команд и регистров, являющаяся частью спецификации ATA, ориентирована на блочный обмен данными с устройствами прямого доступа. Для иных устройств существует спецификация ATAPI, основанная на тех же аппаратных средствах, но позволяющая обмениваться пакетами управляющей информации (Package Interface, PI). Структура и наполнение пакетов позаимствованы из универсального интерфейса SCSI. Пакетный интерфейс позволяет расширить границы применения шины ATA.
Адресация в ATA имеет «дисковые корни»: для накопителей изначально указывали адрес цилиндра (cylinder), головки (head) и сектора (sector) — так называемая трехмерная адресация CHS . Сначала эта адресация точно соответствовала реальной геометрии — физически сектор действительно находился по указанному адресу. Позже по ряду причин диски ATA стали описывать внешней геометрией, отличающейся от реальной внутренней (например, разные зоны треков имеют разное число секторов, причем часть секторов может резервироваться на случай замены дефектных). При этом одно и то же устройство может иметь различную внешнюю геометрию. Преобразование адресов в реальные выполняется встроенным контроллером устройства. В системе CHS устройство ATA позволяет адресовать до 267 386 880 (65 536×16×255) секторов (блоков), что при размере сектора в 512 байт дает 136 902 082 560 байт (около 137 Гбайт). Позже пришли к линейной адресации логических блоков LBA (Logical Block Addressing), где адрес блока (сектора) определяется 28-битным числом, что позволяет адресовать до 268 435 455 (2 28) блоков (немного больше, чем в CHS). Для устройств ATА, поддерживающих и CHS, и LBA, режим адресации определяется для каждой команды битом L
(бит 6) регистра D/H
; режимы могут чередоваться произвольным образом. Устройства ATAPI используют принятую в SCSI 32-битную логическую адресацию, позволяющую адресовать до 2 Тбайт (при 512-байтном блоке).
Читать дальше