Основные команды
6.3.1. Основные команды
К этой группе относятся команды АТА для доступа к дан- ным. Для устройств, существенно отличающихся от НЖМД, имеется альтернативный способ доставки команд и парамет- ров - команда Packet. По этой команде, используя вывод в режиме PIO, хост-адаптер передает пакет с блоком дескрип- тора команды. Подробнее о пакетном интерфейсе см. в 6.7.
Минимальной адресуемой единицей команд чтения и запи- си является 512-байтный сектор.
Команды чтения секторов в режимах обмена PIO - Read Sectorfs) и DMA - Read DMA позволяют считывать после- довательно расположенные секторы, количество которых за- дано в регистре SC, а адрес начального сектора - в регист- рах СН, CL, DH и SN. Команды чтения бывают с повторами или без них. В первом случае, если при чтении сектора об- наружена неисправимая ошибка, устройство автоматически делает несколько повторных попыток чтения. После испол- нения команды в случае неисправимой ошибки блок команд- ных регистров содержит адрес сектора с ошибкой. Если уст- ройство использует ЕСС-код, то некоторые ошибки чтения оно исправляет без повторов, но указывает на этот факт в регистре ошибок.
Команда чтения в блочном режиме передачи Read Multiple отличается от обычного (с обменом PIO) тем, что запросы прерывания вырабатываются не на каждый сектор, а на блок секторов, размер которого задан командой Set Multiple Mode. Кроме того, в случае появления неисправимой ошибки чте- ния содержимое блока командных регистров не определено (не указывает на сбойный сектор). За счет сокращения чис- ла прерываний, которые должен обслужить процессор, блоч- ный режим в многозадачной системе позволяет повысить
производительность на 30%. Производительность обмена за- висит от размера блока. Размер, оптимальный для устрой- ства, может не быть оптимальным для ОС.
Команда "длинного" чтения Read Long считывает сектор данных вместе с контрольными байтами. При ее вызове ре- гистр SC должен указывать на запрос только одного секто- ра. Блок данных считывается 16-битными словами, а конт- рольные байты - 8-битными.
Некоторые устройства АТА- 1 неспособны быстро передавать байты ЕСС вслед за данны- ми. Для их считывания используют 8-битный обмен в ре- жиме PIO Mode 0.
Команда верификации Read Verify Sectors) в отличие от обычного чтения не передает данные от устройства. В слу- чае ошибки на адрес сбойного сектора указывает блок ко- мандных регистров. Запрос прерывания выполняется после исполнения команды.
Команды записи Write DMA, Write Sectors), Write Long, Write Multiple работают аналогично соответствующим им коман- дам чтения и также имеют версии с повторами и без. Ко- манда записи с верификацией Write Verify аналогична команде Write Sectors), но для каждого сектора после записи выпол- няется контрольное считывание. Для логической инициали- зации (очистки области) дисков имеется команда записи Write Same, которая позволяет содержимое 512 байт, принятых от хоста, записать в группу секторов. Если в регистр свойств занесен код 22h, область записываемых секторов определя- ется регистрами командного блока. Если в регистр свойств занесен код DDh, запись производится во все доступные сек- торы устройства.
Команды чтения и записи буфера Read Buffer и Write Buffer служат для обмена в режиме PIO с 512-байтной буферной памятью устройства (но не сектором носителя).
Команда форматирования трека Format Track по входным пара- метрам специфична для каждого устройства, и ее использова- ние не рекомендуется. Многие устройства ее отвергают как недопустимую. Поскольку команда форматирования традици- онно ориентирована на один трек, форматирование дисков АТА в режиме трансляции геометрии, при котором физическая
организация не совпадает с логической, невозможно. В накопи- телях с зонным форматом записи форматирование логичес- кого трека будет "накрывать" переменное число физических.
Вспомогательное назначение имеют команды поиска. По ко- манде поиска Seek устройство устанавливает головки на за- данный цилиндр/трек и считывает идентификатор сектора.
Команда рекалибровки Recalibrate заставляет устройство найти нулевой цилиндр.
Если устройству это не удается, устанавливается бит ошибки Track O Not Found. Эту коман- ду обычно применяют при обработке ошибок: часто после такого "встряхивания" ошибка не повторяется. После ус- пешного выполнения команды блок командных регистров содержит адрес первого сектора диска в формате, завися- щем от режима адресации (LBA или CHS).
Для накопителей со сменными носителями в АТА-2 были предназначены команды загрузки и выгрузки, подтверждения смены носителя, блокировки и разблокировки устройства - Boot - Post-Boot, Boot - Pre-Boot, Media Eject, Acknowledge Media Change, Door Lock, Door Unlock. Их реализация специ- фична для каждой модели устройства. В АТА-4 набор этих команд сокращен. Смену носителя вызывает только коман- да Media Eject (для устройств ATAPI - пакетная команда Start/Stop Unit). Здесь может работать один из двух меха- низмов защиты от несанкционированной смены носителя. При использовании уведомления о смене носителя Removable Media Status Notification нажатие кнопки на накопителе сме- ны носителя не вызывает, этот факт и состояние носителя могут определяться по команде Get Media Status. Этот меха- низм включается и отключается соответствующими подко- мандами Set Features', по любому сбросу устройства он от- ключается. Когда механизм уведомления отключен, работает другой: для запрета/разрешения смены носителей от кноп- ки устройства (только для непакетных устройств) применя- ют команды Media Lock/Media Unlock, они же используются для определения состояния (наличия, защиты записи и факта смены носителя).
Для запоминающих устройств на флэш-памяти в АТА-4 вве- ли команды, начинающиеся с аббревиатуры CFA (Compact
Flash Association - ассоциация производителей компактных флэш-карт). Специфика этих устройств заключается в за- писи: запись обеспечивается лишь в предварительно стер- тые ячейки (сектор), хотя есть устройства, автоматически осуществляющие стирание при записи. Операция записи выполняется существенно медленнее, чем чтения, скорость которого приближается к скорости динамической памяти.Операция стирания занимает еще больше времени. Интерес представляет информация о состоянии сектора: стертый или нет и сколько раз выполнялась запись.