Протоколы взаимодействия хоста и устройства
6.4. Протоколы взаимодействия хоста и устройства
Обычный протокол взаимодействия хоста с устройством выглядит следующим образом:
1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита BSY. Если присутствуют два уст- ройства, хост обращается к ним "наугад" - состояние будет сообщать последнее выбранное устройство.
2. Дождавшись освобождения устройства, хост записывает в регистр DH байт, у которого бит DEV указывает на ад- ресуемое устройство. Здесь кроется причина невозмож- ности параллельной работы двух устройств на одной шине АТА: обратиться к устройству можно только после осво- бождения обоих устройств.
3. Хост читает основной или альтернативный регистр со- стояния адресованного устройства, дожидаясь признака готовности (DRDY=i),
4. Хост заносит требуемые параметры в блок командных регистров.
5. Хост записывает код команды в регистр команд.
6. Устройство устанавливает бит BSY и переходит к испол- нению команды. Дальнейшие действия зависят от прото- кола передачи данных, заданного командой (см. графу "Протокол" в табл. 6.4).
Для команд, не требующих передачи данных (ND):
7. Завершив исполнение команды, устройство сбрасывает бит BSY и устанавливает запрос прерывания (если он не запрещен). К этому моменту в регистрах состояния и ошибок уже имеется информация о результате исполне- ния. Выполнение завершается.
Единичное значение бита BSY может промелькнуть между шагами 6 и 7 так быстро, что хост его не зафиксирует, но для фиксации факта выполнения команды или ее части и предназначен запрос прерывания.
Для команд, требующих чтения данных в режиме PIO (Р1):
7. Подготовившись к передаче первого блока данных по шине АТА, устройство устанавливает бит DRQ. Если была ошибка, она фиксируется в регистрах состояния и оши- бок. Далее устройство сбрасывает бит BSY и устанавли- вает запрос прерывания (если он не запрещен).
8. Зафиксировав обнуление бита BSY (или по прерыванию), хост считывает регистр состояния, что приводит к сбро- су прерывания от устройства.