IDE-BUS. music by MIDISOFT Информацию предоставил В.Елисеев. _______________________________ Для тех, кто хочет более подробно оз- накoмится с работой винчестера мы приво- дим описание IDE-шины и команд HDD. +--------+----------+--------+-------------------------------+ | Контакт| Направл. | Сигнал | Функция | +--------+----------+--------+-------------------------------+ | 1 | Out | Reset | - Host reset | | 3 | I/O | HD7 | Host data bus 7 | | 5 | I/O | HDб | Host data bus б | | 7 | I/O | HDS | Host data bus 5 | | 9 | I/O | HDЧ | Host data bus 4 | | 11 | I/O | HDЗ | Host data bus 3 | | 13 | I/O | HD2 | Host data bus 2 | | 15 | I/O | HD1 | Host data bus 1 | | 17 | I/O | HDO | Host data bus 0 | | 19 | - | Ground | | | 21 | In | DMARQ | DMA Request | | 23 | Out | -IOW | - Host I/O Write | | 25 | Out | -IOR | - Host I/O Read | | 27 | In | IOCHRDY| | | 29 | Out | DMACK | - DMA Acnowelege | | 31 | In | IRQ | - Host interrupt request | | 33 | Out | HA1 | Host adress bus 1 | | 35 | Out | HAO | Host adress bus 0 | | 37 | Out | -CSO | - Host chip select 0 | | 39 | I/O | -ACTIV | - Drive active | +--------+----------+--------+-------------------------------+ | 2 | - | Ground | | | 4 | I/O | HD8 | Host data bus 8 | | б | I/O | HD9 | Host data bus 9 | | 8 | I/O | HD10 | Host data bus 10 | | 10 | I/O | HD11 | Host data bus 11 | | 12 | I/O | HD12 | Host data bus 12 | | 14 | I/O | HD13 | Host data bus 13 | | 1б | I/O | HD14 | Host data bus 14 | | 18 | I/O | HD15 | Host data bus 15 | | 20 | - | Key | | | 22 | - | Ground | | | 24 | - | Ground | | | 2б | - | Ground | | | 28 | Out | ALE | | | 30 | - | Ground | | | 32 | In | -HIO1б | - Host 1б-bit I/O chip select | | 34 | I/O | -PDIAG | | | 3б | Out | HA2 | - Host adress bus 2 | | 38 | Out | -CS1 | - Host chip select 1 | | 40 | - | Ground | | +--------+----------+--------+-------------------------------+ 1. Сигналы, источником которых является главная машина (HOST), являются выхoдны- ми, а источником которых является НМД - входными. 2. Сигналы активные при низком уровне отмечены префиксом "-" . Ниже приведено описание сигналов интерфейса IDE . -RESET - сигнал сброса от главной маши- ны. Host data bus 0-15 - 16 разрядная дву- направленная шина данных. Младшие 8 бит, HDO-HD7, используются для доступа к ре- гистрам. Все 16 бит используются для пе- рeдачи данных. Ground - Выводы "земли" между НМД и главной машиной. KEY - Ключ. Используется для привильнoй ориентации кабеля -IOW - Строб записи, по заднему фронту которого данные по линиям HDO-HD15 фикси- руются в регистрах НМД. -IOR - Строб чтения, низкий уровень ко- торого разрешает передачу данных от ре- ructpob НМД на шину данных главной маши- ны. Задний фронт -IOR фиксирует данные от НМД на главную машину. IRQ - Сигнал прерывания главной машины. Прерывание возможно, когда выбрано уст- рoйствo, и главная машина устанавливает бит -IEN в Fixed Disk Register (адрес 3F6). Когда устройство не выбрано или -IEN не активен, этот выход находится в состоянии высокого импеданса. IRQ уста- навливаeтся микроконтроллером накопителя. IRQ сбрасывается в нуль при операциях чтения главной машины из регистра состоя- ния или при операции записи в Command Re- gister. Линия с тремя состояниями. DAO,DA1,DA2 - Линии адреса, используемые для выбора регистра в файле задачи. -CSO - Выбор кристалла 0, сигнал дeкoди- руeмый от шины главной машины. Использу- ется для выбора регистров с младшими ад- pecamu в файле задачи. -CS1 - Выбор кристалла 1, сигнал дeкoди- руeмый от шины главной машины. Использу- ется для выбора регистров со старшими ад- pecamu в файле задачи. -HIO16 - Сигнал от НМД, информирующий главную машину, что 16-битный регистр данных выбран и что НМД готов принять или передать 16-битное слово данных. Линия с тремя состояниями. -ACTIVE - Линия от НМД, используется для включения светодиода, когда главная маши- на осуществляет доступ к диску. DMARQ - Запрос прямого доступа в память. -DMACK - Сигнал подтверждения запроса ПДП. Примечание. 1. Сигналы DMARQ и DMACK зарезервированы для использования в будущем. Требуемые временные соотношения сигналов в интерфейсе IDE : Примечание. Все времена даны в HC. Декодирование адреса. Главная машина адресуется к НМД, ис- пользуя программируемый ввод-вывод. При этом адрес регистра тремя линиями адреса DAO-DA2 и выбором кристалла -CSO или -CS1. Шина данных главной машины HD8-HD15 разрешена только когда активен сигнал -HIO16 и главная машина адресует регистр данных для передачи данных. Набор регистров, доступных со стороны главной машины, называется файлом задачи (Task File). В таблице 4.3 показаны адреса и функ- ции регистров. Таблица 4.3 +----+----+---+---+---+------------------+-------------------+ |-CSO|-CS1|DA2|DA1|DAO| Функция чтения | Функция записи | |----+----+---+---+---+------------------+-------------------+ | 1 | 0 | 0 | X | X | высокий импеданс | не используется | | 1 | 0 | 1 | 0 | X | высокий импеданс | не используется | | 0 | 1 | 0 | 0 | 0 | Data Register | Data Register | | 0 | 1 | 0 | 0 | 1 | Еггог Register | не используется | | 0 | 1 | 0 | 1 | 0 | Sector Count | Sector Count | | 0 | 1 | 0 | 1 | 1 | Sector Number | Sector Number | | 0 | 1 | 1 | 0 | 0 | Cylinder Low | Cylinder Low | | 0 | 1 | 1 | 0 | 1 | Cylinder High | Cylinder High | | 0 | 1 | 1 | 1 | 0 | SDH Register | SDH Register | | 0 | 1 | 1 | 1 | 1 | Status Register | Command Register | | 1 | 0 | 1 | 1 | 0 | Alternativ status|Fixed Disk Registr | | | | | | | Register | | | 1 | 0 | 1 | 1 | 1 | Digital Input | не используется | | | | | | | Register | | +----+----+---+---+---+------------------+-------------------+ Примечание. X - состояние безразлично. Описание регистров. Ниже дано описание регистров интерфей- са IDE. Неиспользуемые биты в регистрах чтения воспринимаются нулями, в регистрах записи состояние этих битов безразлично. Если бит активен, он устанавливается в "1", если неактивен, то в "0". Data Register. Регистр данных. Через этот регистр чи- таются и записываются данные в командах чтения и записи. Через этот регистр запи- сывается таблица чередования секторов в команде форматирования и данные, связан- ные с командой идентификации. Все данные передаются словами 16 бит, за исключением байтов кода исправления ошибок (ECC). Данные хранятся на диске в следующей пос- лeдoватeльнoсти: сначала младший байт, затем старший байт. Еггог Register. Регистр ошибок содержит состояние пос- лeднeй команды, выполненной НМД. Содержа- ние этого регистра действительно только тогда, когда в Status Register установлен бит 0 - ERR. После выполнения команды диагностики (код 90) регистр содержит код состояния. Ниже описаны биты в Error Register. 7 6 5 4 3 2 1 0 +---+---+---+----+---+----+----+----+ |BBK|UNC| - |IDNF| - |ABRT|TRKO|DMNF| +---+---+---+----+---+----+----+----+ BBK - Bad Block Mark - индицирует, что найдена метка плохого блока в поле идентификатора требуемого сектора. UNC - Uncorrectable Data Error - указывает, что имеет место hekoppektu- руeмая ошибка данных. IDNF - ID Field Not Found - указывает, что не обнаружено поле идентификатора требуемого сектора. ABRT - Abort - указывает, что требуемая команда была прервана вследствие нeдeйствитeльнoгo ко- да команды, или неготовности или ошибки записи НМД. TRKO - Track 0 Not Found - указывает, что дорожка 0 не обнаружена во время команды рeкалибрoвки. DMNF - Data Adress Mark Not Found - указывает, что адресный маркер данных не обнаружен после идентификатора требуе- мого сектора. Sector Count. Счетчик секторов определяет количество секторов данных для команды чтения/запи- си. Если значение в этом регистре равно 0, то определяется значение 256 секторов. Этот счетчик уменьшается по мере чте- ния/записи каждого сектора. Содержание этого регистра определяет число секторов на дорожке при выполнении команды Initia- lize Drive Parametrs. Sector Number. Номер сектора. Этот регистр содержит номер начального сектора для любого дос- тупа к НМД. При завершении обработки сек- тора и в конце команды этот регистр ука- зывает на последний правильно прочитанный сектор или на сектор, в котором произошла ошибка. Cylinder Low Регистр младших разрядов номера ци- линдра содержит младшие 8 разрядов на- чального номера цилиндра при любом обра- щeнии к НМД. При завершении обработки сектора и в конце команды этот регистр изменяется и отображает текущий номер ци- линдра. Cylinder High Регистр старших разрядов номера ци- линдра содержит 3 старших разряда началь- ного номера цилиндра при любом обращении к НМД. При завершении обработки сектора и в конце команды этот регистр изменяется и отображает текущий номер цилиндра. SDH Register 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+ | 1 | 0 | 1 |DRV|HSЗ|HS2|HS1|HSO| +---+---+---+---+---+---+---+---+ DRV - Drive Select Number - 0 - выбран НМД 0, 1 - выбран НМД 1 HSЗ-HSO - двоично закодированный номер выбора головки. Status Register Этот регистр содержит информацию o состоянии НМД. Содержание регистра изме- няется при завершении каждой команды. Ес- ли бит BSY активен, то другие биты не действительны. Считывание главной машиной этого регистра подтверждает получение ею прерывания и сбрасывает поступившее пре- рывание. 7 6 5 4 3 2 1 0 +----+----+----+----+----+----+----+----+ |BSY |DRDY|DWF |DSC |DRQ |CORR|IDX |ERR | +----+----+----+----+----+----+----+----+ BSY - Busy - Если этот бит "занят" активен, то мик- рoкoнтрoллeр накопителя имеет доступ к регистрам файла задачи, а главная машина нет. Любое чтение главной машиной регист- ров файла задачи приводит к чтению Status Register. DRDY - Drive Ready - Указатель готовности дисковода. DWF - Drive Write Fault - Этот бит указывает, что в накопителе произошла ошибка записи. DSC - Drive Seck Complete - Этот бит показывает, что головки уста- нoвлeны на требуемой дорожке. DRQ - Data Request - Запрос данных. Указывает на то, что НМД готов к передаче слова или байта дан- ных по шине данных. CORR - Corrected Data - НМД устанавливает этот бит в "1", если произошла ошибка данных и эта ошибка была скорректирована. IDX - Index - Индекс. Этот бит активен один раз за оборот диска. ERR - Error - Бит ошибки. Указывает главной машине, что во время последней операции произошла ошибка. Биты в Error Register oбeспeчива- ют дополнительную информацию. Command Register. Регистр команд. В этот регистр главная машина записывает 8-разрядный код коман- ды, которую будет выполнять НМД. Выполнение команды начинается сразу после того, как в регистр произведена за- пись. Таблица 4.4 +-----------------------------------+---+--------------------+ | | К | Регистры | | Команда | о +----+----+----+-----+ | | д | SC | SN | CN | SDH | |-----------------------------------+---+----+----+----+-----+ |Recalibrate | 1X| | | | DRV | |Read Sector(s) (с повторами) | 20| V | V | V | V | |Read Sector(s) (без повторов) | 21| V | V | V | V | |Read Long (с повторами) | 22| V | V | V | V | |Read Long (без повторов) | 23| V | V | V | V | |Read Verify Sector(s)(с повторами) | 40| V | V | V | V | |Read Verify Sector(s)(без повторов)| 41| V | V | V | V | |Write Sector(s) (с повторами) | 30| V | V | V | V | |Write Sector(s) (без повторов) | 31| V | V | V | V | |Write Long (с повторами) | 32| V | V | V | V | |Write Long (без повторов) | 33| V | V | V | V | |Format Track | 50| V | | V | V | |Seek | 7X| | V | V | V | |Execute Drive Diagnostic | 90| | | | DRV | |Initialize Drive Parameters | 91| V | | | V | |Read Sector Buffer | E4| | | | DRV | |Write Sector Buffer | E8| | | | DRV | |Identify Drive | EC| | | | DRV | +-----------------------------------+---+----+----+----+-----+ Примечание. 1. X - означает, что значение битов без- различно; V - означает, что данный регистр ис- пользуется. Регистры: SC - Sector Count SN - Sector Number CN - Cylinder Low & High SDH - SDH Register DRV - означает, что в SDH Register ипoльзуeтся только бит DRV, все остальные биты не действительны. 2. Команды даны в шестнадцатеричной сис- теме. 3. "C повторами" означает, что в коман- дах Записи и Чтения поиск идентификатора осуществляется для 10 индексных импуль- сов, а "без повторов" - для 2-х. Alternativ Status Register. Альтернативный регистр состояния сов- падает с Status Register, но настроен на другие адреса. Единственное отличие от Status Register это то, что чтение этого регистра не приводит к подтверждению пре- рывания или очистке запроса прерывания. 7 6 5 4 3 2 1 0 +----+----+----+----+----+----+----+----+ |BSY |DRDY|DWF |DSC |DRQ |CORR|IDX |ERR | +----+----+----+----+----+----+----+----+ Описание битов этого регистра дано в опи- сании Status Register. Fixed Disk Register. Этот регистр используется для прог- раммного сброса НМД и для управления раз- решением прерывания. 7 6 5 4 3 2 1 0 +----+----+---+---+-------+----+----+---+ | 0 | 0 | 0 | 0 |HSЗEN=1|SRST|-IEN| 0 | +----+----+---+---+-------+----+----+---+ HSЗEN - Head Select 3 Enable - в этот бит всегда записывается "1". SRST - Host Software Reset - программный сброс - выработка этого бита приводит к сбросу НМД. -IEN - Interrupt Enable - разрешение прерывания. Когда -IEN=0 и НМД выбран, то разрешается выработка пре- рывания по выходу IRQ. Когда -IEN=1, то выход IRQ в состояние высокого импeд. Digital Input Register. Этот регистр показывает, какой НМД выбран и какая головка выбрана в данный момент. 7 6 5 4 3 2 1 0 +----+----+----+----+----+----+----+----+ |HIZ |-WTG|-HSЗ|-HS2|-HS1|-HSO|-DS1|-DSO| +----+----+----+----+----+----+----+----+ HIZ - когда читается этот регистр, вывод DD7 устанавливается в состояние высокого им- пeданса. -WTG - Write Gate - НМД вырабатывает -WTG во время команд записи. (-HSЗ)-(-HSO) - Head Select - Двоичное дополнение к адресу выбранной головки. Например, если HSЗ-HSO=1010, то выбрана 5-я головка. -DS1,-DSO - Drive Select - Показывает, какой из двух дисководов выбран и активен в данное время. Описание команд. Все команды дeкoдируются из Command Register. Чтобы подать команду, необходимо заг- рузить соответствующие регистры в файле задачи, активировать бит разрешения пре- рывания -IEN и записать код команды в Command Register. Исполнение команды на- чинаeтся после записи команды в Command Register. Recalibrate. Эта команда перемещает головки запи- си/чтения на цилиндр 0. Получив команду, НМД устанавливает BSY и выполняет поиск цилиндра 0. Затем НМД ожидает окончания поиска, обновляет состояние регистров файла задачи, очищает BSY и генерирует прерывание. В таблице 4.7 показан протокол обмена для данной команды. Read Sector(s) Эти команды позволяют считывать от 1 до 256 секторов по 512 байт, начиная с сектора заданного в Sector Number. Если Sector Count = 0, то будет считываться 256 секторов. В таблице 4.5 показан протокол обмена для данных команд. Если НМД находится не на выбранной до- рожке, осуществляется поиск. Если НМД на- ходится на выбранной дорожке, то oсущeст- вляется поиск идентификатора для 2-х ин- дeксных импульсов, для Read Sector(s) без повторов и для 10, для Read Sector(s) с повторами. Если ID считан правильно, то байт синхронизации поля данных должен быть найден до следующего импульса секто- ра, иначе будет выставлена ошибка DMNF. До завершения команды регистры файла за- дачи содержат номер цилиндра, головки и сектора для последнего прочитанного сек- тора. Если происходит ошибка, то чтение прекращается на секторе, где эта ошибка обнаружена. В этом случае регистры файла задачи содержат номер цилидра, головки и сектора, где произошла ошибка. Sector Co- unt содержит число нeпeрeданных секторов. Если данная ошибка была ошибкой hekoppek- тируeмых данных, то эти данные будут дос- тупны для чтения главной машине, а ос- тальные сектора передаваться не будут. После успешного завершения команды Sector Count = 0. Если выполняется команда Read Long, то НМД не проверяет ECC байты для определе- ния ошибки в поле данных. НМД возвращает в главную машину не только данные, но и 7 байт коррекции ошибки (ECC). Байты данных передаются 16-битными посылками, а байты ECC - 8-битными. Команды Read Long всегда oднoсeктoрныe команды. ПРОТОКОЛ ВЫПОЛНЕНИЯ КОМАНД ЧТЕНИЯ Таблица 4.5 +---+--------------------------+-----------------------------+ |ШАГ| ГЛАВНАЯ МАШИНА | НМД | |---+--------------------------+-----------------------------+ |1 | Проверка, что BSY=0 и | | | | DRDY=1 | | |2 | Запись в регистры: | | | | Sector Count | | | | Sector Number | | | | Cylinder Low | | | | Cylinder High | | | | SDH | | |3 | Запись в CommandRegister | | |4 | |Устанавливает BSY=1 | |5 | |Подготовка к передаче данных | | | |(загружает данные в буфер | | | |данных) | |б | |Устанавливает DRQ=1,BSY=0 и | | | |вырабатыавет IRQ | |7 | Читает Status Register | | |8 | |Сбрасывает IRQ | |9 | Читает блок данных | | |10 | |Устанавливает DRQ=0 | |11 | |Если многосекторная команда, | | | |то возвращение на шаг 4 | |12 | Готовность к седующей | | | | команде | | +---+--------------------------+-----------------------------+ Примечание. Данный протокол применим к следующим командам: Identify Drive Read Buffer Read Sector(s). Write Sector(s) Эти команды позволяют записывать от 1 до 256 секторов по 512 байт, начиная с сектора заданного в Sector Number. Если Sector Count = 0, то будет записано 256 секторов. В таблице 4.6 показан протокол обмена для этих команд. Если НМД находится не на выбранной до- рожке, осуществляется поиск. Если НМД на- ходится на выбранной дорожке, то oсущeст- вляется поиск идентификатора для 2-х ин- дeксных импульсов, для Write Sector(s) без повторов и для 10, для Write Sec- tor(s) с повторами. Если ID не найден, то устанавливается ошибка IDNF. ПРОТОКОЛ ВЫПОЛНЕНИЯ КОМАНД ЗАПИСИ Таблица 4.6 +---+--------------------------+-----------------------------+ |ШАГ| ГЛАВНАЯ МАШИНА | НМД | |---+--------------------------+-----------------------------+ |1 | Проверка, что BSY=0 и | | | | DRDY=1 | | |2 | Запись в регистры: | | | | Sector Count | | | | Sector Number | | | | Cylinder Low | | | | Cylinder High | | | | SDH | | |3 | Запись в CommandRegister | | |4 | |Устанавливает DRQ=1 | |5 | Читает Status Register | | | | (DRQ=1)(необезательно) | | |б | Записывает блок данных | | | | в Data Register | | |7 | |Устанавливает DRQ=0,BSY=1 | |8 | |Oбрабатывае данные | |9 | |Устанавливает BSY=0,выраба- | | | |тывает IRQ и устанавливает | | | |DRQ=1,если будет переда- | | | |ваться еще один блок данных | |10 | Читает Status Register | | | | (в ответ на IRQ) | | |11 | |Сбрасывает IRQ | |12 | |Если многосекторная команда, | | | |то возвращение на шаг 5 | |13 | Готовность к следующей | | | | команде | | +---+--------------------------+-----------------------------+ Примечание. Данный протокол применим к следующим командам: Format Track Write Buffer Write Sector(s). Если ID считан правильно, данные, заг- ружeнныe в буфер, записываются в поле данных сектора, сопровождаемые внутренним генерированием кода ECC. Если произошла ошибка во время записи более чем одного сектора, то запись прекращается на секто- ре, где произошла ошибка и файл задачи содержит номер цилиндра, головки и секто- ра, где произошла ошибка. По завершении команды регистры содержат номера цилинд- ра, головки и сектора, соответствующие последнему записанному сектору. После успешного завершения команды Sector Count = 0. Необходимо учесть, что НМД может при- нимать от машины дополнительные блоки данных для обеспечения высoкoпрoизвoди- тельной записи. Команда Write Long запи- сываeт данные и 7 байт ECC прямо из буфе- ра сектора, при этом НМД сам не генериру- ет байты ECC. Байты данных передаются по- сылками 16 бит, байты ECC 8-бит. Команды Write Long всегда oднoсeктoрныe команды. Read Verify Sector(s). Эта команда идентична Read Sector(s), за исключением того, что данные не пере- даются в главную машину. ПРОТОКОЛ ВЫПОЛНЕНИЯ КОМАНД, HE ИСПОЛьЗУЮЩИХ ПЕРЕДАЧУ ДАННЫХ Таблица 4.7 +---+--------------------------+-----------------------------+ |ШАГ| ГЛАВНАЯ МАШИНА | НМД | |---+--------------------------+-----------------------------+ |1 | Проверка, что BSY=0 и | | | | DRDY=1 | | |2 | Запись в регистры: | | | | Sector Count | | | | Sector Number | | | | Cylinder Low | | | | Cylinder High | | | | SDH | | |3 | Запись в CommandRegister | | |4 | |Устанавливает BSY=1 | |5 | |Выполняет действия соответ- | | | |ствующие команде | |б | |Устанавливает BSY=0 и | | | |вырабатывает IRQ | |7 | Читает Status Register | | |8 | |Сбрасывает IRQ | |9 | Готовность к следующей | | | | команде | | +---+--------------------------+-----------------------------+ Примечание. Данный протокол применим к следующим командам: Execute Drive Diagnostic Read Verify Sector(s) Recalibrate Seek Initialize Drive Parameters. Format Track. Эта команда форматирует дорожку, за- данную в файле задачи. Адрес дорожки оп- рeдeляeтся значением в Cylindr High & Cy- linder Low Registers, а количество секто- ров определено в Sector Count. Когда вы- рабатываeтся команда, НМД устанавливает бит DRQ и ожидает поступления от главной машины 512 байт данных формата. Когда данные получены, НМД ожидает DRQ, уста- навливаeт BSY, начинает выполнение коман- ды. Если НМД не находится на заданной до- рожке, начинает выполнять поиск дорожки. Когда НМД находится на заданной дорожке, НМД начинает форматирование, используя данные, полученные от главной машины. Содержание данных, полученных от глав- ной машины, интерпретируются следующим образом: Таблица 4.8 +-----------------+------------------+ |DD15-DDO8 | DDO7-DDO | +-----------------+------------------+ | первый сектор | +-----------------+------------------+ |номер сектора | дескриптор | +-----------------+------------------+ | последний сектор | +-----------------+------------------+ |номер сектора | дескриптор | +-----------------+------------------+ |оставшиеся байты записываются нулями| +------------------------------------+ Каждый сектор характеризуется 16-бит- ным словом. DD15-DD8 содержат номер сек- тора. Обычно номера секторов следуют по порядку, начиная с 1, для обеспечения че- рeдoвания секторов 1:1. DD7-DDO содержат число-дескриптор, где: 00H - форматирование сектора как хоро- шего; 80H - форматирование сектора как пло- xoro. Значения,отличные от 00 и 80 uhtepnpe- тируются как хорошие сектора. В таблице 4.6 показан протокол для данной команды. Seek. Эта команда инициализирует поиск до- рожки и выбирает головку, определенную в файле задачи. Для выполнения этой команды НМД не обязательно должен быть фoрматирo- ван. НМД может генерировать прерывания до завершения поиска. В таблице 4.7 показан протокол для данной команды. Execute Drive Diagnostic. Выполнить диагностику НМД. После полу- чения этой команды НМД выполняет внутрен- ние тесты. После выполнения диагностики в Error Register 8-битный код, описанный ниже: код описание 01 нет ошибок 02 ошибка контроллера 03 ошибка буфера сектора 05 ошибка микроконтроллера Примечание: НМД может выдавать в глав- ную машину и другие коды, значения кото- рых уточняются на этапе проектирования. В таблице 4.7 показан протокол для данной команды. Initialize Drive Parameters. Инициализация параметров НМД. Позволя- ет управляющей машине устанавливать число секторов на дорожке и максимальное число головок, которое должно эмулироваться НМД. При получении команды НМД установит BSY, сохранит данные параметры, очистит BSY и сгенерирует прерывание. Этой командой используются только ре- гистры Sector Count, который указывает максимальное чисo головок. Бит DRV выби- рает соответственно НМД 0 или НМД 1. Sec- tor Count и SDH Register не проверяются на правильность по этой команде. Если они не верны, то сообщение об ошибке не будет выдаваться до выполнения какой-либо ко- манды, использующей эти значения. В таблице 4.7 показан протокол для данной команды. Read Buffer. Чтение буфера. Позволяет главной маши- не читать 512 байт данных из буфера сек- тора НМД. При получении этой команды НМД устанавливает BSY, подготавливает буфер для операции чтения, устанавливает DRQ, ожидает BSY, генерирует прерывание. Глав- ная машина затем считывает байты данных из этого буфера. В таблице 4.6 показан протокол для данной команды. Write Buffer. Записать буфер. Эта команда позволяет главной машине перезаписать содержимое буфера данных НМД. В таблице 4.6 показан протокол для данной команды. Identify Drive. Идентифицировать НМД. Позволяет глав- ной машине получить от НМД информацию o нем. При получении данной команды НМД ус- танавливаeт BSY, записывает в буфер ин- формацию, устанавливает DRQ и генерирует прерывание. Главная машина считывает эту информацию из буфера. Структура вoзвращаeмoй НМД информации выглядит следующим образом. Байт Содержание 00-01 HEX ? 02-03 HEX количество цилиндров 04-0б HEX 0 07 HEX количество головок 08-09 HEX байт на дорожке OA-OB HEX байт на сектор 0C HEX 0 0D HEX секторов на дорожке 0E-13 HEX ? 14-27 ASCII Serial Number (конец со- общения 00h) 28 HEX 0 29-2D HEX ? 2E-35 ASCII Firmware Revision Зб-SD ASCII Model Number (конец со- общения 80h) В ячейках, где числа занимают два бай- та, информация располагается следующим образом: в младшей ячейке находится стар- ший байт числа, а в следующей ячейке младший байт этого числа. _______________________________