Программный доступ PIO (Programmed Input/Output) выполняется в виде следующих друг за другом операций чтения или записи в пространстве ввода-вывода по адресу регистра данных. Готовность устройства проверяется перед началом передачи блока, после чего хост производит серию операций в определенном темпе, который определяется выбранным режимом PIO Mode 0–4 . Для каждого режима определены допустимые параметры временной диаграммы цикла обмена. Обмен PIO программно реализуется с помощью процессорных инструкций ввода-вывода строк REP INS
или REP OUTS
с занесенным в регистр СХ
количеством слов (или байтов) в передаваемом блоке. Эти инструкции обеспечивают максимально возможную скорость обмена для данного процессора и системной шины. «Обуздать» процессор в соответствии с выбранным режимом входит в задачу адаптера ATА, который использует для удлинения цикла сигнал готовности шины (для ISA — IOCHRDY
). Традиционные режимы 0, 1 и 2 имеют временные параметры, фиксируемые только хост-адаптером. Для прогрессивных режимов ATA-2 (PIO Mode 3 и выше) устройство может затормозить обмен, используя сигнал готовности IORDY
. Программный обмен на все время передачи блока занимает и процессор, и системную шину.
Обмен по каналу DMA занимает исключительно шины ввода-вывода и памяти. Процессору требуется выполнить только процедуру инициализации канала, после чего он свободен до прерывания от устройства в конце передачи блока (этим могут воспользоваться многозадачные системы). Стандартные каналы DMA шины ISA для интерфейса ATA не используются из-за низкой пропускной способности. Высокопроизводительные адаптеры ATA имеют собственные более эффективные контроллеры. Режимы обмена по каналу DMA бывают одиночными и множественными. При одиночном режиме — Singleword DMA — устройство для передачи каждого слова вырабатывает сигнал запроса DMARQ
и сбрасывает его по сигналу DMACK#
, подтверждающему цикл обмена. При множественном режиме — Multiword DMA — на сигнал DMARQ
хост отвечает потоком циклов, сопровождаемых сигналами DMACK#
. Если устройство не справляется с потоком, оно может приостановить его снятием сигнала DMARQ
, а по готовности установить его снова. Множественный режим позволяет развить более высокую скорость передачи.
В спецификации ATA/ATAPI-4 появился новый режим — Ultra DMA , позволяющий перешагнуть барьер в 16,6 Мбайт/с, свойственный традиционным режимам и используемому кабелю. При этом обеспечивается и контроль достоверности передачи данных по шине, чего не делалось ни в PIO, ни в стандартных режимах DMA (а зря!). Стандартом ATA-4 было определено 3 режима Ultra DMA (0, 1 и 2), впоследствии ввели новые; выбор режима осуществляется командой Set Features
. В режимах Ultra DMA сигналы DMARQ
и DMACK#
сохраняют свое назначение, а вот смысл сигналов DIOR#
, DIOW#
и IORDY
на время передачи пакета (Ultra DMA Burst) существенно меняется. В пакете данные на шине сопровождаются стробом, генерируемым источником данных, причем для синхронизации используются оба перепада сигналов. Это позволяет повысить пропускную способность шины до 33 Мбайт/с, не увеличивая частоту переключения сигналов сверх 8,33 с -1(этот предел для обычного кабеля достигается в режиме PIO Mode 4 и Multiword DMA Mode 2). Каждое переданное слово участвует в подсчете CRC-кода, который передается хост-контроллером в конце пакета. Подсчет ведется и источником данных, и приемником.
При несовпадении принятого устройством кода с ожидаемым кодом фиксируется ошибка передачи, о которой устройство сообщает в конце исполнения команды. Передача в пакете может приостановиться, если приемник снимет сигнал готовности ( DDMARDY#
или HDMARDY#
). Передача пакета может прекращаться по инициативе устройства (снятием сигнала) или хоста (сигналом STOP
). Противоположная сторона должна подтвердить окончание цикла сигналом STOP
или DMARQ
соответственно.
Способ сообщения об ошибке передачи зависит от типа выполнявшейся команды. Для команд READ DMA
, WRITE DMA
, READ DMA QUEUED
или WRITE DMA QUEUED
в регистре ошибок ER
устанавливается бит 7 ( ICRC
) и бит 2 ( ABRT
). Для пакетной команды REQUEST SENSE
(уточнить состояние) в случае ошибки в регистре состояния SR
устанавливается бит 0 ( CHK
) и сообщается ключ состояния ( Sense key
) 0Bh (команда отвергнута). Для всех других пакетных команд в случае ошибки устанавливается бит CHK
и сообщается состояние 04h (аппаратная ошибка), а в последующих командах REQUEST SENSE
сообщается значение ASC/АSСQ
08h/03h (ошибка CRC при связи с логическим устройством). Получив сообщение об ошибке, хост должен повторить команду. Если ошибки появляются постоянно, хост должен понизить скорость обмена (вплоть до выхода из режима Ultra DMA).
Читать дальше