Аппаратные интерфейсы ПК

         

Контроллер НГМД


Программное взаимодействие с НГМД производится через контроллер накопите­лей на гибких дисках FDC (Floppy Drive Controller), как правило, при участии контроллера DMA и прерываний. Программирование контроллера НГМД для вы­полнения операций с дискетами — довольно хлопотное занятие (см. [4,8,9]). Все функции, необходимые для использования НГМД в качестве устройств хранения данных, реализованы сервисами BIOS Int 13h (см. 12.8.1) и ОС. Игнорирование сервисов BIOS и даже ОС оправданно в основном лишь для нетривиальных задач типа работы с ключевыми дискетами и т. п.

Все контроллеры, применяемые в IBM PC, обеспечивают совместимость с «ис­торической» микросхемой контроллера NEC PD765, которая является аналогом i8272. Контроллер FDC А Т поддерживает два накопителя; он позволяет рабо­тать со скоростями передачи данных 250 Кбит/с (для работы с дискетами SD, DD и QD в старых дисководах 5"), 500 Кбит/с для плотности HD (1,2 и 1,44 Мбайт), а также 300 Кбит/с для работы с дискетами SD, DD и QD в приводах HD 5". Со­временные контроллеры, поддерживающие накопители ED (2,88 Мбайт), долж­ны обеспечивать и скорость 1000 Кбит/с. Режимы контроллеров, соответству­ющие скоростям 250/300,500 и 1000 Кбит/с, обозначаются соответственно 1М, 2М и 4М. В режиме 1М на одном треке умещается 9 секторов (по 512 байт); для этого при частоте вращения 300 об/мин требуется скорость 250 Кбит/с, а при 360 об/мин -300 Кбит/с. В режиме 2М при частоте вращения 300 об/мин (у дисководов HD 3,5") на одном треке умещается 18 секторов, а при частоте вращения 360 об/мин (у дис­ководов HD 5") — 15 секторов. Режим 4М, похоже, так и останется невостребован­ным. Выбор скорости задает частоту синхронизации при записи и форматирова­нии, а также настраивает цепи Ф АПЧ сепаратора данных контроллера. Сепаратор данных способен устойчиво выделять данные и синхросигнал из сигнала, приня­того с головки, лишь при небольших (порядка ±10 %) отклонениях скорости от номинала, поэтому скорость должна быть правильно выбрана для всех операций обмена данными с диском.


9.1. Интерфейс НГМД_____________________________________________    357

В карте ресурсов AT имеется место под два контроллера НГМД:

¦     FDC АТ#1 (стандартный или основной) занимает порты с адресами 3FOh-

3F7h (как и FDC XT);

¦     FDC AT#2 (дополнительный) занимает порты с адресами 370h-377h.

Контроллеры вырабатывают запрос аппаратного прерывания IRQ6 (BIOS I n t 0E h) по окончании выполнения внутренних операций. Для обмена данными может ис­пользоваться канал DMA2. Назначение регистров контроллера приведено в табл. 9.2.

Адрес регистра состояния FDC 3F7 (377) совпадает с адресом регистра HDC (дав­но неиспользуемого), в связи с чем раздельная работа FDC и HDC, расположенных на разных платах, проблематична. В нормальном (не диагностическом) режиме из этого регистра интерес представляет только бит 7 — признак смены носителя.

Таблица 9.2. Регистры контроллера НГМД Адрес     Назначение (R — чтение, W — запись)

3F2 (372) RW: DOR (Digital Output Register) — регистр управления: биты [4:7] — включение моторов А, В, С, D: 1 — включен; бит 3:1— разрешение использования DMA2 и IRQ6; бит 2:0 — сброс, 1 — разрешение контроллера; биты [1:0] — номер выбранного привода 0-3. В AT биты 6,7 и 1 не используются

3F3 (373) RW: TDR (Tape Drive Register) — регистр стриммера: биты [1:0]— номер устройства, которому соответствует стриммер. По сбросу устанавливается 00, но это означает отсутствие стриммера (вместо дисковода А: стиммер не поставить)



3F4 (374) R: MSR (Main State Register) — главный регистр состояния: бит 7 (DQM) — запрос: 1 — готов к приему/передаче байта; бит 6 (DIO) — направление данных: 1 — FDC -> CPU; бит 5 (NON DMA) — использование DMA: 1 — DMA не используется; бит4(CMDBSY): 1 — контроллер занят выполнением команды; биты [0:3] — привод А:, В:, С:, D: занят (в AT используются только биты 0,1)

3F4 (374)1

W: DSR (Datarate Select Register) — регистр выбора скорости: бит 7:1 — сброс

контроллера (обнуляется автоматически); бит 6:1 — отключение питания контроллера; бит 5:1 — разрешение внешней ФАПЧ (должен быть 0); биты [4:2] — выбор времени предкомпенсации записи (000 — предкомпенсация по умолчанию); биты [1:0] — скорость обмена (00 — 500Кбит/с,01 — 300 Кбит/с, 10 —250 Кбит/с, 11 —1 Мбит/с)



3F5 (375) RW: DR (Data Register) — регистр команд/данных

3F7 (377) W: CCR (Configuration Control Register) — регистр параметров контроллера (AT): биты [7:2] — не используются; биты [1:0]— скорость обмена (00 — 500 Кбит/с, 01—300 Кбит/с, 10 — 250 Кбит/с, 11—1 Мбит/с)

3F7 (377) R: DIR (Digital Input Register) — регистр состояния (только в AT): бит 7:1 =смена носителя (чтение инвертированной линии DC); биты [6:0] — не используются, при чтении не выводятся на шину данных

1 Регистр DSR обеспечивает совместимость с контроллером 18272; в современных контроллерах НГМД на АТ-совместимых компьютерах вместо него используют CCR, поскольку требуется только задание скорости.

Контроллер НГМД может быть использован и для работы со стриммерами; спе­циально для этого в контроллере имеется регистр TDR (Tape Drive Register), пара младших битов которого задает номер устройства, которому соответствует стрим­мер (для него иначе настраиваются цепи ФАПЧ сепаратора данных).

358________________________________ Глава 9. Интерфейсы устройств хранения

Все операции с дискетами выполняются по командам, посылаемым хостом в регистр DR (3F5) согласно состоянию битов регистра MSR (3F4). Запись байта команды или данных в регистр DR разрешается лишь при текущем значении MSR=10xxxxxxb, чтение — при MSR=llxxxxxxb. Для записи/чтения этого регистра приходится ис­пользовать отдельные подпрограммы, не только дожидающиеся разрешающих значений MSR, но и имеющие аварийный выход по тайм-ауту. Хост также выпол­няет запись в регистр DOR (3F2) для запуска/останова дисковода, а также в CCR (3F7) или DSR (3F4) для выбора скорости передачи данных. В операциях обмена данными с дискетами обычно участвует контроллер DMA, и он должен быть свое­временно проинициализирован. Сигнал ТС (завершение цикла DMA) использу­ется как признак завершения фазы данных. В общем виде процедура обмена дан­ными состоит из следующих шагов.

1.    Запуск мотора и выбор дисковода (записью в регистр DOR).



2.    Установка скорости (записью в регистр CCR).

3.    Выполнение команды рекалибровки.

4.    Ожидание раскрутки двигателя ( если мотор работает еще менее 0,5 с).

5.    Позиционирование головки на требуемый цилиндр.

6.    Инициализация контроллера DMA.

7.    Посылка команды чтения/записи.

8.    Ожидание прерывания от контроллера. Прерывание произойдет, когда завер­

шится фаза исполнения, во время которой контроллер обычно обменивается

данными с хостом. Если за определенное время прерывание не получено, фик­

сируется неудачная попытка обращения с ошибкой тайм-аута.

9.    По прерыванию от контроллера считываются байты результата, и если ошибок

нет, на этом обмен успешно завершается. Если есть ошибки, то снова переходят

на шаг инициализации DMA и далее повторяют команду чтения/записи. Если за несколько (3) раз успех не достигается, то выполняется рекалибровка, затем инициализация DMA и повторные попытки чтения/записи. Если успех не до­стигается и после нескольких рекалибровок, обмен прекращается аварийно.

Помимо описанного механизма имеется механизм автоматического выключения

мотора НГМД, если к нему долго нет обращения. Для этого в фиксированном

месте ОЗУ (BIOS Data Area, ячейка 0:0440) имеется счетчик времени работы мо­тора НГМД и адрес дисковода (в позиционном коде), мотор которого включен (0:043F). При каждом обращении к дискете (когда в регистре DOR устанавливает­ся бит включения мотора) в счетчик времени заносится константа, соответству­ющая выдержке на отключение (по умолчанию — 2 с). Обработчик аппаратного прерывания от таймера IRQ0 (BIOS Int 08h)c интервалом около 55 мс декрементирует счетчик времени и По его обнулению отключает мотор (записью в регистр DOR). Таким образом, если в течение заданного интервала нет обращений, мотор автоматически выключается. Конечно, это работает, лишь когда BIOS отрабаты­вает аппаратные прерывания от таймера, так что не отключающийся мотор ди­сковода может быть косвенным признаком «зависания» компьютера.



9,2. Интерфейс АТА/ATAPI (IDE)     _____________________________________ 359

Исполнение каждой команды имеет три фазы.

1.   Фаза команды. Контроллер устанавливает биты DQM=1 и DIO-0, что является приглашением к вводу команды. В регистр DR посылается байт команды, пос­ле которого посылаются байты параметров в строго предписанном порядке. На прием каждого байта контроллер отзывается обнулением DQM на время об­работки. После получения последнего требуемого байта DQM остается обнулен­ным и контроллер переходит в фазу исполнения. В качестве параметров фигу­рируют номер цилиндра С, номер головки Н, номер сектора R, код размера N или длина поля данных сектора DTL, номер последнего сектора на треке EOT, число секторов SC, длительность зазоров GPL и некоторые другие данные.

2.   Фаза исполнения требует передачи данных от хоста к контроллеру или обратно,

передача может происходить как в режиме DMA, так и чисто программно (РЮ). В режиме DMA обмен выполняется по сигналам DRQ и DACK# используемого канала. Если DMA не используется, то запросом на передачу является бит DQM и сигнал прерывания. По окончании фазы вырабатывается сигнал прерыва­ния (и его признак в регистре ST0), и контроллер переходит в фазу результата.

3.   В фазе результата DQM=1 и 010=1, хост должен считать байты результата из DR, после чего биты установятся в значение DQM=1 и 010=0, что соответствует переходу в фазу приема команды.

С момента получения команды и до окончания фазы результата в регистре MSR бит СМО BSY=1. Контроллер всегда можно принудительно сбросить (перевести в начало фазы команды) записью в регистр DOR или DSR. Если контроллер получит неподдерживаемую команду, он сразу выставит DQM=1 и 010=1, что является ука­занием на необходимость чтения DR. Хост должен прочитать из DR код состояния, в котором будет значение 80h (недопустимая команда).

В современных контроллерах НГМД имеется буфер FIFO глубиной 16 байт, работающий при передаче данных (но не команд и параметров) через регистр DR; в «историческом» контроллере 18272 буфера FIFO не было.Логика общения с ре­гистром DR остается той же. Буфер должен быть своевременно обслужен, чтобы не происходило его переполнения или опустошения. Логика буфера устанавливает запрос данных так, чтобы не отвлекать хост «по пустякам». При чтении из DR за­прос устанавливается, когда в буфере имеется (16-яорог) байтов или же считан последний байт сектора. При записи в OR запрос первоначально устанавливается и удерживается до заполнения буфера, впоследствии он устанавливается снова, когда в буфере остается порог байтов. Переход в фазу результата происходит, когда завершается обмен хоста с DR и буфер опустошается. Общение с регистром DR при записи команд и параметров должно выполняться согласно значениям старших битов регистра MSR (буфер FIFO при этом не используется).


Содержание раздела