ACNews
#54
21 января 2009 |
|
Железо - Контроллер IDE.
Здравствуй редакция журнала ADVENTURER! Пишет Вам Владислав из Черкасс. Большое спасибо за журнал. Причиной этого письма послужила разработанная мною вторая версия схемы IDE-HDD адаптера которая стала частью периферийного контроллера. Данная статья базируется на предыдущей, и является обновленным и дополненным материалом, в котором учтены особенности второй версии схемы. Я не стал делать в статье ссылки на предыдущую, с тех соображений, что не у каждого может оказаться Adventurer #13 и возможность его преобрести. Программную поддержку и железо разрабатываю пока один. Что касается железа, то у меня собственноручно собранный в клавиатурном корпусе от "Робика" Spectrum: 2Mb RAM; 32K ROM; FDD HD/DD Turbo контроллер; IDE-HDD адаптер v2. 0; MC146818A; AY8910; Giga-screen; LPT-порт;i8042;FDD 3. 5`;HDD Seagate 85OMb; 15OBt блок питания. Начал сборку звуковой карты с прямым доступом. Если у Вас есть по ней какая-либо информация или программная поддержка, мой E-mail:vmatlash@icu.net Надеюсь, что новая схема будет полезна читателю. Заранее благодарен. Почта: Украина, 18002 г. Черкассы ул. Ленина 10, кв. 6 Матлашу Владиславу ---------------------------------------------------------------- Вторая версия схемы IDE-HDD адаптера Отличительные особенности схемы: 1. Высокая повторяемость 2. Доступная элементная база 3. Простота, доступность сборки и наладки даже начинающему 4. Быстрая адаптация драйверов других аналогичных адаптеров от (C) Nemo, (C) Slot & Со ... 5. Полноценная поддержка команд ввода-вывода блоков (INI, INIR, OUTI, OTIR) ускоряющих пересылку данных что экономит память и время 6. Работа как в короткой так и в длинной адресацииПеречень элементов +-------------------------------------+ | МИКРОСХЕМЫ | +---------+-----------------------+---+ | DD1,DDЗ | KP1533UP22 (7ЧALSЗ73) | 2 | | DD2,DDS | KP1533UP23 (7ЧALSЗ74) | 2 | | DD7 | KP15ЗЗАПб (7ЧALS245) | 1 | | DDЧ | KP15ЗЗЛИ1 (7ЧALSO8) | 1 | | DDб,DD8 | KP15ЗЗИД7 (7ЧALS138) | 2 | | DD9 | KP15ЗЗИД14 (7ЧALS139) | 1 | +---------+-----------------------+---+ | КОНДЕНСАТОРЫ | +---------+-----------------------+---+ | C1 - C9 | 0,68 - 0,1 мкФ | 9 | | C10 | 20 мкФ х 6,3 В | 1 | +---------+-----------------------+---+ | РЕЗИСТОРЫ | +---------+-----------------------+---+ | R1,R2 | 10 K | 2 | | R3 | 300 Ом | 1 | +---------+-----------------------+---+ | РАЗЪЕМЫ | +---------+-----------------------+---+ | X1 | СНПS8-64/94х9В-23-1-В | 1 | | X2 | OНП-КГ-56-40-В53 | 1 | +---------+-----------------------+---+ Принцип работы схемы Данная схема позволяет подключить до двух накопителей на жестких магнитных дисках (НЖМД) практически любой емкости, а также других устройств рассчитанных на интерфейс АТА (IDE). Схема состоит из шести основных частей: 1. Дешифратора портов ввода - вывода устройства IDE, выполненного на микросхемах DDб (ИД7) и DD8 (ИД7). 2. Схемой управления режимом работы в короткой или широкой адресации. 3. Блока формирования слова шины данных [D15:D0] для записи в устройство, выполненного на 8-разрядных регистрах DD1 (ИР22) и DD2 (ИР23). 4. Регистра DDS (ИР23) для защелкивания старшего байта слова шины данных [D15:D8] устройства во время чтения. 5. Двунаправленного 8-разрядного буфера DD7 (АПб) для формирования младшего байта слова шины данных [D7: D0]. 6. Регистра DDЧ (ИР22) для буферизации сигналов управления устройством DAO, DA1, DA2, DIOW#, DIOR#, RES#. Дешифратор DD8 (ИД7) формирует сигнал (AE#) лог. 0 на выходе [9] разрешающий работу дешифраторов DD9 (ИД14) и DDб (ИД7), которые генерируют сигналы управления работой схемы: - RWE# - низким логическим уровнем разрешает регистрам DD1 (ИР22) и DD2 (ИР23) выставить слово [D15:D0] на шину данных устройства, формирует на выходе элемента 2-И DDЧ.1 (ЛИ1) сигнал (SCE) логического нуля, который совмесно с сигналом (A3) на дешифраторе DD9 (ИД14) сгенерирует соответственно сигналы (CASO#) и (CAS1#) для выбора блока регистров устройства. - WWC# - по фронту этого сигнала будет записан байт с шины данных компьютера в 8-разрядный регистр DD2 (ИР23) для формирования младшего байта слова [D7:D0] на шине данных устройства. - RWC# - низким логическим уровнем формирует на выходе элемента 2-И DDЧ.2 (ЛИ1) сигнал (WRE#) логического 0, разрешающего двунаnравлeнному 8-разрядному буферу DD7 (АПб) открыть канал. На направление передачи указывает сигнал (RD#) nоданный на вывод [1] DD7 (АПб), при активном уровне этого сигнала младший байт слова [D7:D0] с шины данных устройства будет передан на шину данных компьютера. Фронт сигнала (RWC#) защeлкнeт старший байт слова [D15:D8] с шины данных устройства в регистре DDS (ИР23) для возможности чтения его процессором. - LHE# - генерируется при короткой дешифрации и аналогичен сигналу (RWC#), только фронт сигнала ни какого влияния не имеет. Краткая инструкция по сборке и настройке При правильной сборке и исправных комплектующих настройка адаптера не требуется, но если Вам не повезло и приобретенная элементная база оставляет желать лучшего, советую прочесть данную инструкцию. Для выявления неисправностей и проверки правильности сборки нужна следующая измерительная аппаратура: - вольтметр или тестер (мультиметр); - логический пробник (на тот случай, если нет осциллографа). Прежде чем настроить адаптер, необходимо произвести его сборку. Для этого потребуется фольгированный двухсторонний стеклотекстолит размером 70х90 мм. На двух сторонах которого процарапывают под линейку шины питания и места для припаивания микросхем и разъемов СНПS8-64/94х9В и OНП-КГ-56-40-В53 согласно (рис. 2). Для процарапывания фольги, я использую резец изготовленный из прослужившего свой срок полотна от пилы по металу, обрезав его до нухной длины и предав на шлифовальном круге одной из сторон вид заточенного "когтя" (см. рис. 1).Для уменьшения поиска нeисnровностeй проверяют отсутствие замыканий и обрывов проводников на плате используя тестер. Установить микросхемы, разъемы и запаять их. При этом рекомендую пользоваться паяльником с занулением и флюсом (глицерин + хлорамоний с соотношением 95% к 5%). Перед запаиванием микросхем плату желательно залудить припоем ПОС-62 во избежание нежелательного окисления медной фольги. На зарезервированную площадь стороны "А" платы подать потенциал земли (GND). Монтаж проводников ведут проводом МГТФ-0.03 согласно схемы. Для фиксации которого на плате следует использовать направляющие кольца из медного провода диаметром 0.5 мм припаянных перпендикулярно к шине питания. На каждую микросхему рекомендуется установить блокировочный конденсатор 0.1 мкФ по питанию для исключения паразитных помех. На шину питания желательно установить электролитический конденсатор емкостью 20 мкФ х 6.3 В.Сторона АПосле проверки тестером правильности монтажа проводников и на отсутствие замыканий выводов микросхем, плату промывают от флюса под проточной горячей водой (если не пользовались канифолью) и дают ей высохнуть. Следует отметить, то, что обрыв и замыкания сигналов могут быть не только между проводниками платы, а еще и внутри самих микросхем. Далее для подключения адаптера следует выполнить следующие действия: 1. Вставить адаптер в свободный интерфейсный разъем компьютера. 2. Подключить 40-контактный разъем шлейфа диска IDE. Самыми распространенными ошибками подключения шлейфов являются переворот разъема на 180 градусов и боковое или продольное смещение контактов. От этих ошибок спасает пластмассовый ободок, окружающий штырьки наиболее качественных разъемов, и его ключевая прорезь. Однако с ключами случаются и конфузы: бывает, что разъем шлейфа, имеющий ответный ключевой выступ, на шлейф наколот неправильно. Тогда для правильного соединения этот выступ приходится срезать (это проще, чем качественно переколоть разъем). Я сам лично столкнулся с этой проблемой подключая IDE шлейф к винчестеру. 3. Подключить индикатор обращения к жесткому диску "HDDLED" в двухштырьковый разъем на плате адаптера. Правильно подключить разъем можно во время загрузки с жесткого диска - при этом индикатор должен мигать. Для быстрой проверки правильности всего подключения наберите: 10 PRINT АТ 0,0;IN 199;" ":GO ТО 10 Если все правильно, то после прохождения внутреннего теста устройством на экране должно мерцать число 80. Данное описание по настройке очень краткое из-за невозможности отразить всевозможные неисправности и варианты сборки адаптера. Оно служит алгоритмом сборки и запуска ограничиваясь лишь некоторыми советами. Программное управление Для программного взаимодействия с устройствами подключенными к адаптеру, в пространстве ввода/вывода компьютера была выбрана область адресов портов (см. рис. 3).Рис. 3. Организация порта выбора регистров устройств IDE Пространство портов ввода/вывода адаптера выбрано таким образом, что бы можно было использовать автоматические команды ввода/вывода МП Z80 и обращаться к регистрам устройства по короткой дешифрации без участия старшей части шины адреса [A15:A8]. Достоинство в этом то, что уменьшается кол-во тактов процессора (соответственно и времени) затрачиваемых при операциях обмена данными с устройством и экономится память для программы-драйвера. Использование полуавтоматических команд ввода/вывода раскрывающих цикл обмена значительно увеличит скорость. Такое распределения пространства порта не исключает возможность конфликтов с другими устройствами не проверяющими все адреса [A0:A7]. Для устранения этого недостатка организуйте возможность включения / отключения адаптера свободным битом системного порта, подав соответствующий вывод на предварительно отсоeдинeнный от потенциала "GND" вывод [5] или [4] дешифратора DD8 (ИД7). Адресное пространство портов ввода-вывода Таблица 1. Пространство адресов ввода-вывода +-+-+-+-----+-----+--+--+------------------+-------------------+ |A|A|A|A A A|Порт |CS|CS|Чтение |Запись | |8|4|3|2 1 0|hex |0#|1#| | | +=+=+=+=====+=====+==+==+==================+===================+ |х|0|0|0 0 0|xxC0 |0 |1 |(DR) D[7:0]|(DR) D[7:0]| |х|0|0|0 0 1|xxC1 |0 |1 |(ER) |(ER) | |х|0|0|0 1 0|xxC2 |0 |1 |(SC) |(SC) | |х|0|0|0 1 1|xxC3 |0 |1 |(SN) LBA[7:0] |(SN) LBA[7:0] | |х|0|0|1 0 0|xxC4 |0 |1 |(CL) LBA[15:8] |(CL) LBA[15:8] | |х|0|0|1 0 1|xxC5 |0 |1 |(СН) LBA[23:16] |(СН) LBA[23:16] | |х|0|0|1 1 0|xxC6 |0 |1 |(D/Н) LBA[27:24] |(D/Н) LBA[27:24] | |х|0|0|1 1 1|xxC7 |0 |1 |(SR) |(CR) | +-+-+-+-----+-----+--+--+------------------+-------------------+ |х|0|1|0 х х|xxC8-|1 |0 |Не использ. [7:0]|Не использ. D[7:0]| |х|0|1|1 0 х|-xxCD|1 |0 |Не использ. |Не использ. | |х|0|1|1 1 0|xxCE |1 |0 |(AS) |(DC) | |х|0|1|1 1 1|xxCF |1 |0 |Не использ. |Не использ. | +-+-+-+-----+-----+--+--+------------------+-------------------+ |0|1|0|0 0 0|xnC0 |0 |1 |(DR) D[7:0]|(DR) * D[7:0]| |0|1|0|0 0 1|xnC1 |0 |1 |(ER) |(DR) * | |0|1|0|0 1 0|xnC2 |0 |1 |(SC) |(DR) * | |0|1|0|0 1 1|xnC3 |0 |1 |(SN) LBA[7:0] |(DR) * | |0|1|0|1 0 0|xnC4 |0 |1 |(CL) LBA[15:8] |(DR) * | |0|1|0|1 0 1|xnC5 |0 |1 |(СН) LBA[23:16] |(DR) * | |0|1|0|1 1 0|xnC6 |0 |1 |(D/Н) LBA[27:24] |(DR) * | |0|1|0|1 1 1|xnC7 |0 |1 |(SR) |(DR) * | +-+-+-+-----+-----+--+--+------------------+-------------------+ |1|1|0|0 0 0|xnD0 |0 |1 |(DR) * D[15:8]|(DR) D[15:8]| |1|1|0|0 0 1|xnD1 |0 |1 |(DR) * |(DR) | |1|1|0|0 1 0|xnD2 |0 |1 |(DR) * |(DR) | |1|1|0|0 1 1|xnD3 |0 |1 |(DR) * |(DR) | |1|1|0|1 0 0|xnD4 |0 |1 |(DR) * |(DR) | |1|1|0|1 0 1|xnD5 |0 |1 |(DR) * |(DR) | |1|1|0|1 1 0|xnD6 |0 |1 |(DR) * |(DR) | |1|1|0|1 1 1|xnD7 |0 |1 |(DR) * |(DR) | +-+-+-+-----+-----+--+--+------------------+-------------------+ |0|1|1|0 х х|xnD8-|1 |0 |Не использ. [7:0]|Не использ. D[7:0]| |0|1|1|1 0 х|-xnDD|1 |0 |Не использ. |Не использ. | |0|1|1|1 1 0|xnDE |1 |0 |(AS) |(DC) * | |0|1|1|1 1 1|xnDF |1 |0 |Не использ. |Не использ. | +-+-+-+-----+-----+--+--+------------------+-------------------+ |1|1|1|0 х х|xnD8-|1 |0 |Не использ. [15:8]|Не использ. D[15:8]| |1|1|1|1 0 х|-xnDD|1 |0 |Не использ. |Не использ. | |1|1|1|1 1 0|xnDE |1 |0 |(AS) * |(DC) | |1|1|1|1 1 1|xnDF |1 |0 |Не использ. |Не использ. | +-+-+-+-----+-----+--+--+------------------+-------------------+ *:регистр-защелка, х:любое значение, n:только A8 имеет значение Alternate Status (AS) - альтернативный регистр состояния Device Control (DC) - регистр управления устройством Data (DR) - регистр данных Еггог (ER) - регистр ошибок Features (FR) - регистр свойств Sector Count (SC) - регистр счетчика секторов Sector Number (SN) - регистр номера сектора Cylinder Low (CL) - регистр младшего байта номера цилиндра Cylinder High (СН) - регистр старшего байта номера цилиндра Device/Head (D/Н) - регистр номера устройства и головки Status (SR) - регистр состояния Command (CR) - регистр команд ;Пример подпрограммы чтения сектора идентификации устройства ORG #C000 INSTL DI L2 IN A,(#C7) ;Регист состояния CP #50 JR Z,L1 ;Ошибок нет CALL #1F54 ;Проверка нажатия BREAK RET NC JR L2 L1 LD C,#C7 L3 IN A,(C) RLCA JR C,L3 ;Ждем готовность устройства LD A,#EC ;Команда OUT (C),A ;Регистр команд L5 IN A,(C) BIT 7,A JR Z,L4 ;Принимаем пакет 256 слов CALL #1F54 RET NC JR L5 ;Ждем ответ L4 LD ВС,#00D0 ;Регист данных LD HL,50000 ;Адрес приема информации INIR INIR RET ;Успешный выход Фрагмент чтения сектора данных K-во тактов Z80 K-во байт . . . LD HL,адрес буфера 10 3 LD ВС,#00D0; Адрес порта 10 3 INIR (INI 256 команд) 21/16 2 INIR (INI 256 команд) 21/16 2 . . . ----- --- Итого: 10762 10 При раскрытом цикле: 8212 518 Фрагмент записи сектора данных K-во тактов Z80 K-во байт . . . LD HL,адрес буфера 10 3 LD ВС,#00D0; Адрес порта 10 3 OTIR (OUTI 256 команд) 21/16 2 OTIR (OUTI 256 команд) 21/16 2 . . . ----- -- Итого: 10762 10 При раскрытом цикле: 8212 518 Регистры устройств АТА Каждое устройство АТА имеет стандартный набор регистров, адресуемых сигналами от хост-адаптера (CSO#, CS1#, DA2, DA1, DAO, DIOR# и DIOW#). Набор регистров (табл. 2) состоит из двух блоков, выбираемых сигналами CSO# или CS1#. Блок командных регистров служит для посылки команд устройству и передачи информации о его состоянии. Блок управляющих регистров используется для управления устройством и получения байта его состояния. На действительность содержимого регистров командного блока и альтернативного регистра состояния указывает нулевое значение бита BSY регистра состояния. Если устройство поддерживает управление энергопотреблением, в спящем режиме Sleep mode содержимое этих регистров нeдeйствитeльно. Таблица 2. Регистры контроллеров устройств АТА +---------------------+----------------------------------------+ | Адрес | | +----+----+---+---+---+Назначение (R - чтение, W - запись) | |CSO#|CS1#|DA2|DA1|DAO| | +====+====+===+===+===+========================================+ |1 |1 |х |х |х |Не используется (шина данных в третьем | | | | | | |состоянии) | +----+----+---+---+---+----------------------------------------+ |Control block registers - блок управляющих регистров | +----+----+---+---+---+----------------------------------------+ |1 |0 |0 |х |х |Не используется (шина данных в третьем | | | | | | |состоянии) | +----+----+---+---+---+----------------------------------------+ |1 |0 |1 |0 |х |Не используется (шина данных в третьем | | | | | | |состоянии) | +----+----+---+---+---+----------------------------------------+ |1 |0 |1 |1 |0 |R: Alternative Status (AS) - альтерна-| | | | | | |тивный регистр состояния | | | | | | |W: Device Control (DC) - регистр управ-| | | | | | |ления устройством | +----+----+---+---+---+----------------------------------------+ |1 |0 |1 |1 |1 |Не используется * | +----+----+---+---+---+----------------------------------------+ |Command block registers - блок командных регистров | +----+----+---+---+---+----------------------------------------+ |0 |1 |0 |0 |0 |R/W: Data (DR) - регистр данных | +----+----+---+---+---+----------------------------------------+ |0 |1 |0 |0 |1 |R: Еггог (ER) - регистр ошибок | | | | | | |W: Features (FR) - регистр свойств | +----+----+---+---+---+----------------------------------------+ |0 |1 |0 |1 |0 |R/W: Sector Count (SC) - регистр счeтчи-| | | | | | |ка секторов | +----+----+---+---+---+----------------------------------------+ |0 |1 |0 |1 |1 |R/W: Sector Number (SN) - регистр номера| | | | | | |сектора | | | | | | |LBA[7:0] ** | +----+----+---+---+---+----------------------------------------+ |0 |1 |1 |0 |0 |R/W: Cylinder Low (CL) - регистр младше-| | | | | | |го байта номера цилиндра | | | | | | |LBA[15:8] ** | +----+----+---+---+---+----------------------------------------+ |0 |1 |1 |0 |1 |R/W: Cylinder High (СН) - регистр стар-| | | | | | |шего байта номера цилиндра | | | | | | |LBA[23:16] ** | +----+----+---+---+---+----------------------------------------+ |0 |1 |1 |1 |0 |R/W: Device/Head (D/Н) - регистр номера| | | | | | |устройства и головки | | | | | | |LBA[27:24] ** | +----+----+---+---+---+----------------------------------------+ |0 |1 |1 |1 |1 |R: Status (SR) - регистр состояния | | | | | | |W: Command (CR) - регистр команд | +----+----+---+---+---+----------------------------------------+ |0 |0 |х |х |х |Нeдоnустимый адрес | +----+----+---+---+---+----------------------------------------+ * Регистр выпадает из блока. ** Регистр сектора, цилиндра и головки в режиме LBA содержат указанные биты логического адреса. РЕГИСТР СОСТОЯНИЯ отражает текущее состояние устройства в процессе выполнения команд. Чтение регистра состояния разрешает дальнейшее изменение его бит и сбрасывает запрос прерывания. Бит 7 - BSY (Busy) указывает на занятость устройства. При его единичном значении устройство игнорирует попытки записи в командный блок регистров, а чтение этих регистров дает неопределенный результат (их значение устройством может быть изменено в любой момент). При нулевом значении этого бита регистры командного блока доступны, а устройство может изменять только значение бит IDX, DRDY, DF, DSC и CORR. Бит устанавливается под действием аппаратного и программного сброса устройства, а также по получении команды. Бит может устанавливаться и на кратковременный интервал, так что хост может и не заметить этого факта. Бит 6 - DRDY (Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Если состояние бита изменилось, оно не может измениться обратно до чтения регистра состояния. При нулевом значении бита устройство воспринимает только команды EXECUTE DEVICE DIAGNOSTIC и INITIALIZE DEVICE PARAMETERS, прекращая выполнение текущей команды и сообщая об этом флагом ABRT в регистре ошибок и ERR в регистре состояния. Прием других команд при нулевом бите DRDY приводит к непредсказуемым результатам. Бит 5 - DF (Device Fault) - индикатор отказа устройства. Бит 4 - DSC (Device Seek Complete) - индикатор завершения поиска трека. Бит 3 - DRQ (Data Request) - индикатор готовности к обмену словом или байтом данных. Бит 2 - CORR (Corrected Data) - индикатор исправленной ошибки данных. Бит 1 - IDX (Index) - индекс, трактуется специфично для каждого производителя. Бит 0 - ERR (Еггог) - индикатор ошибки выполнения предыдущей операции. Дополнительная информация содержится в регистре ошибок. Если установился бит ERR, до приема следующей команды, программного или аппаратного сброса устройство не изменит состояние этого бита, а также регистра ошибок, регистра количества секторов и регистров цилиндра, головки и номера сектора. АЛьТЕРНАТИВНЫЙ РЕГИСТР СОСТОЯНИЯ имеет те же биты, что и основной, но его чтение не приводит ни к каким изменениям состояния устройства. Назначение РЕГИСТРА КОМАНД очевидно из названия. Устройство начинает исполнять команду сразу, как только ee код будет записан в данный регистр. РЕГИСТРЫ НОМЕРА ЦИЛИНДРА (старшего и младшего байта) и НОМЕРА СЕКТОРА имеют двоякое назначение в зависимости от выбранной системы адресации (CHS или LBA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. РЕГИСТР НОМЕРА УСТРОЙСТВА И ГОЛОВКИ кроме хранения части адресной информации служит для выбора устройства-0 или устройства-1 и метода адресации. Биты 7 и 5 зарезервированы. Бит 6 - L - единичным значением указывает на применение режима адресации LBA. При нулевом значении бита используется режим CHS. Бит 4 - DEV (Device) - выбор устройства. При DEV=0 выбрано устройство-0 (Master), при DEV=1 - устройство-1 (Slave). Биты [3:0] имеют двоякое назначение в зависимости от выбранной системы адресации. В режиме CHS они содержат номер головки, в режиме LBA - старшие биты логического адреса. Как и предыдущие, этот адресный регистр инициализируется хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. До принятия стандарта АТА-2 считалось, что адресные регистры должны модифицироваться и после успешного выполнения операции, отражая текущее значение адреса в носителе. РЕГИСТР ДАННЫХ может использоваться как 8-битный или 16-битный в зависимости от типа данных, передаваемых в текущей команде. Из РЕГИСТРА УПРАВЛЕНИЯ УСТРОЙСТВОМ используются только два бита, биты [7:3] зарезервированы, бит 0 всегда должен быть нулевым. Бит 2 - SRST (Software Reset) - программный сброс, действует все время, пока бит не будет сброшен. Оба устройства шины воспринимают программный сброс одновременно. Бит 1 - IEN# (Interrupt Enable) - инверсный бит разрешения прерывания. При нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход. РЕГИСТР ОШИБОК хранит состояние выполнения последней операции или диагностический код. После завершения операции на наличие ошибки, раскраваeмой данным регистром, указывает бит ERR регистра состояния. Бит 7 зарезервирован. Бит 6 - UNC (Uncorrectable Data Еггог) - неисправимая ошибка данных. Бит 5 - MC (Media Changed) - смена носителя. После смены носителя первая же команда обращения отвергается и устанавливается данный бит ошибки. После сброса данног бита следующие команды будут выполняться нормальным образом. Бит 4 - IDNF (ID Not Found) - указывает на ненайденный идентификатор сектора. Бит 3 - ABRT (Aborted Command) - устанавливается, если команда отвергнута как нeдeйствитeльная или в случае возникновения иной ошибки. Бит 2 - MCR (Media Change Requested) - индикатор запроса смены носителя. После обнаружения запроса смены носителя последующие команды DOOR LOCK будут возвращать бит ошибки ERR и установленный бит MCR. Бит MCR сбрасывается командами DOOR UNLOCK, MEDIA EJECT или аппаратным сбросом. Бит 1 - TKONF (Track 0 Not Found) - указывает на то, что по команде RECALIBRATE не удалось найти нулевой трек. Бит 0 - AMNF (Address Mark Not Found) - не найден адресный маркер данных в заголовке сектора. После включения питания, выполнения сброса или команды EXECUTE DEVICE DIAGNOSTIC регистр ошибок содержит диагностический код. РЕГИСТР СВОЙСТВ (более подходящий эквивалент названию Features Register найти не удалось) используется в зависимости от команды. В команде SET FEATURES он, например, позволяет управлять кэшированием. Некоторые устройства могут игнорировать запись в этот регистр. В ряде систем, разработанных до принятия стандарта АТА-2, в этот регистр помещали значение рекомендуемого номера цилиндра для предкомпенсации записи. РЕГИСТР СЧЕТЧИКА СЕКТОРОВ содержит число секторов, участвующих в обмене. Хост инициализирует этот регистр до подачи команды (нулевое значение соответствует 256 секторам). По успешному завершению операции доступа к данным регистр должен обнулиться. Если команда завершилась с ошибкой, в регистре будет число секторов, которое должны быть переданы для успешного завершения предыдущего запроса. Некоторые команды (INITIALIZE DEVICE PARAMETERS или WRITE SAME) могут переопределить значение этого регистра. Система команд Стандарт АТА-2 задает и СИСТЕМУ КОМАНД, которая приведена в табл. 3. В этой таблице графа <> определяет метод передачи данных, требуемых для команды: PI - ввод данных от устройства в режиме PIO, PO - вывод данных в режиме PIO, DM - обмен данными по каналу DMA, ND - нет обмена данными, VS - специфично для устройства. Графа <<тиn>> определяет характеристику команды: O - обязательная для всех устройств, Д - дополнительная, С - специфическая. Графа <<код>> представляет hex-код, загружаемый в регистр команды. Команды, помеченные звездочкой, поддерживаются для обеспечения совместимости со старыми контроллерами. В графах <<исnользуeмыe рeгистры>> приняты следующие обозначения: CY - регистры цилиндра, SC - регистр счетчика секторов, DH - регистр номера устройства и головки, SN - регистр номера сектора, FR - регистр свойств. Использование регистров обозначено следующим образом: у - регистр содержит параметры для команды (для регистра номера устройства и головки - используются оба параметра), D - используется только номер устройства, d - используется только номер устройства, использование поля номера головки специфично для производителя, D0 - команда адресуется к устройству-0, но выполняют ee оба устройства. Таблица 3. Система команд АТА-2 +--------------------------+--------+---+-------+--------------+ | | | | |Исп. регистров| | Команда |Протокол|Тип| Код +--+--+--+--+--+ | | | | |FR|SC|SN|CY|DH| +==========================+========+===+=======+==+==+==+==+==+ |ACKNOWLEDGE MEDIA CHANGE -| | | | | | | | | |подтверждение смены носи-| VS | Д | DBh |- |- |- |- |D | |теля | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |ВООТ - POST-ВООТ - загруз-| | | | | | | | | |ка носителя (после загруз-| VS | Д | DCh |- |- |- |- |D | |ки) | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |ВООТ - PRE-ВООТ - загрузка| VS | Д | DDh |- |- |- |- |D | |носителя (до загрузки) | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |CHECK POWER MODE - провер-| ND | Д |98h ESh|- |у |- |- |D | |ка режима потребления | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |DOOR LOCK - запереть двер-| | | | | | | | | |цу ( запретить смену носи-| VS | Д | DEh |- |- |- |- |D | |теля) | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |DOOR UNLOCK - отпереть | VS | Д | DFh |- |- |- |- |D | |дверцу | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |DOWNLOAD MICROCODE - | | | | | | | | | |загрузка микрокода внутр. | PO | Д | 92h |у |у |у |у |D | |программного обеспечения | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |EXECUTE DEVICE DIAGNOSTIC | ND | O | 90h |- |- |- |- |D*| |- диагностика | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |FORMAT TRACK - форматиро-| VS | C | 50h |- |- |- |- |d | |вание трека | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |IDENTIFY DEVICE - иденти-| PI | O | ECh |- |- |- |- |D | |фикация устройства | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |IDLE - переход в состояние| ND | Д |97h EЗh|- |у |- |- |D | |ожидания | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |IDLE IMMEDIATE - нeмeдлeн-| | | | | | | | | |ный переход в состояние | ND | Д |95h E1h|- |- |- |- |D | |ожидания | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |INITIALIZE DEVICE | | | | | | | | | |PARAMETERS - инициализация| ND | O | 91h |- |у |- |- |у | |параметров устройства | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |MEDIA EJECT - извлечь | ND | Д | EDh |- |- |- |- |D | |носитель | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |NOP - холостая команда | ND | Д | 00h |- |- |- |- |у | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ BUFFER - чтение | PI | Д | EЧh |- |- |- |- |D | |буфера | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ DMA (w/retry) - | DM | Д | C8h |- |у |у |у |у | |чтение по DMA с повторами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ DMA (w/о retry) - | DM | Д | C9h |- |у |у |у |у | |чтение по DMA без повторов| | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ LONG (w/retry) - | | | | | | | | | |<<длинноe>> чтение с пов- | PI | Д | 22h |- |у |у |у |у | |торами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ LONG (w/о retry) - | | | | | | | | | |<<длинноe>> чтение без | PI | Д | 23h |- |у |у |у |у | |повторов | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ MULTIPLE - множeст- | PI | Д | CЧh |- |у |у |у |у | |венное чтение | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ SECTOR(S) | | | | | | | | | |(w/retry) - чтение секто-| PI | O | 20h |- |у |у |у |у | |ров с повторами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ SECTOR(S) | | | | | | | | | |(w/retry) - чтение секто-| PI | O | 21h |- |у |у |у |у | |ров без повторов | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ VERIFY SECTOR(S) | | | | | | | | | |(w/retry) - вeрификацион-| ND | O | 40h |- |у |у |у |у | |ное чтение секторов с пов-| | | | | | | | | |торами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |READ VERIFY SECTOR(S) | | | | | | | | | |(w/retry) - вeрификацион-| ND | O | 41h |- |у |у |у |у | |ное чтение секторов без | | | | | | | | | |повторов | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |RECALIBRATE - рекалибровка| ND | Д | 1xh |- |- |- |- |D | |(поиск нулевого трека) | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |SEEK - поиск | ND | O | 7xh |- |- |у |у |у | +--------------------------+--------+---+-------+--+--+--+--+--+ |SET FEATURES - установка | ND | Д | EFh |у |- |- |- |D | |свойств | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |SET MULTIPLE MODE - | | | | | | | | | |установка множественного | ND | Д | Cбh |- |у |- |- |D | |режима | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |SLEEP - перевод в <<сnящий| ND | Д |99h E6h|- |- |- |- |D | |рeжим>> | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |STANDBY - перевод в дeжур-| ND | Д |96h E2h|- |у |- |- |D | |ный режим | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |STANDBY IMMEDIATE - нeмeд-| | | | | | | | | |ленный перевод в дежурный | ND | Д |94h EOh|- |- |- |- |D | |режим | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE BUFFER - запись в | PO | Д | E8h |- |- |- |- |D | |буфер | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE DMA (w/retry) | DM | Д | CAh |- |у |у |у |у | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE DMA (w/о retry) - | DM | Д | CBh |- |у |у |у |у | |запись по DMA без повторов| | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE LONG (w/retry) - | | | | | | | | | |<<длинная>> запись с пов- | PO | Д | 32h* |- |у |у |у |у | |торами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE LONG (w/о retry) | | | | | | | | | |<<длинная>> запись без | PO | Д | 33h* |- |у |у |у |у | |повторов | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE MULTIPLE - | PO | Д | CSh* |- |у |у |у |у | |множeствeнная запись | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE SAME - запись с | PO | Д | E9h |у |у |у |у |у | |размножeниeм | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE SECTOR(S) | | | | | | | | | |(w/retry) - запись секто- | PO | O | 30h* |- |у |у |у |у | |ров с повторами | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE SECTOR(S) | | | | | | | | | |(w/о retry) - запись сек- | PO | O | 31h* |- |у |у |у |у | |торов без повторов | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |WRITE VERIFY - запись с | PO | Д | ЗCh* |- |у |у |у |у | |вeрификациeй | | | | | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ |Vendor specific - сneцифи-| | | 8xh | | | | | | |ческие команды (по усмот- | VS | C | 9Ah |- |- |- |- |- | |рению производителя) | | |OOh-СЗh| | | | | | | | | |FOh-FFh| | | | | | +--------------------------+--------+---+-------+--+--+--+--+--+ * Коды поддерживаются для совместимости. Свое основное назначение устройства АТА-2 реализуют с помощью команд чтения и записи данных, минимальной адресуемой единицей которых является 512-байтный сектор. Команды чтения секторов в режимах обмена PIO - READ SECTOR(S) и DMA - READ DMA позволяют считать последовательно расположенные секторы, количество которых задано в регистре SC, а адрес начального сектора - в регистрах СН, CL, D/Н и SN. Команды чтения имеют версии с повторами или без них. В первом случае, если при чтении сектора обнаружена неисправимая ошибка, устройство автоматически делает несколько повторных попыток чтения. После исполнения команды в случае нeисnравимой ошибки блок командных регистров содержит адрес сектора, на котором эта ошибка случилась. Если устройство использует ECC-код, то некоторые ошибки чтения оно исправляет и без повторов, но указывает на этот факт в регистре ошибок. Команда чтения в блочном режиме передачи READ MULTIPLE отличается от обычного (с обменом PIO) тем, что запросы прерывания вырабатываются не на каждый сектор, а на блок секторов, размер которого задан командой SET MULTIPLE MODE. Кроме того, в случае появления нeисnравимой ошибки чтения содержимое блока командных регистров будет неопределенным (не укажет на сбойный сектор). Блочный режим за счет сокращения числа прерываний, которые должен обслуживать процессор, в многозадачной системе позволяет повысить производительность дискового обмена даже на 30%. От размера блока зависит производительность обмена, но значение размера, оптимальное для устройства, может не совпадать со значением, оптимальным для операционной системы. В однозадачной системе существенного выигрыша от блочного режима не будет, поскольку прерывания могут и не использоваться. Команда <<длинного>> чтения READ LONG считывает сектор данных вместе с контрольными байтами и также имеет версии с повторами и без. При ee вызове регистр SC должен указывать на запрос только одного сектора. Блок данных считывается 16-битными словами, а контрольные байты - 8-битными. Некоторые устройства АТА-1 неспособны быстро передавать байты ECC вслед за данными. Для их считывания необходимо использовать 8-битный обмен в режиме PIO Mode 0. Команда верификации READ VERIFY SECTOR(S) с повторами и без в отличие от обычного чтения не передает данные от устройства. В случае обнаружения нeисnравимой ошибки на адрес сбойного сектора указывает содержимое блока командных регистров. Запрос прерывания выполняется после исполнения команды. Продолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября