Аппаратные интерфейсы ПК. Энциклопедия

Гук Михаил Юрьевич

Глава 9

Интерфейсы устройств хранения

 

 

Устройства хранения данных — накопители на магнитных дисках (гибких и жестких, фиксированных и сменяемых), оптические диски CD и DVD, ленточные и твердотельные — подключаются к компьютеру самыми разнообразными способами. Первые устройства хранения в ПК — накопители на гибких магнитных дисках (НГМД) — подключались интерфейсным кабелем-шлейфом к контроллеру, отделенному от самих устройств. Этот специализированный интерфейс сохранился до сих пор, им подключают дисководы, требующие скорости передачи всего 500 Кбит/с (около 60 Кбайт/с). Скорость 1000 Кбит/с, требуемая для так и не распространившихся дисководов на 2,88 Мбайт, осталась невостребованной. К интерфейсу дисководов подключали и старые стриммеры (очень тихоходные). Аналогичный интерфейс поначалу использовался и для подключения винчестеров (так называемых MFM и RLL), по нему передавались «сырые» данные записи чтения с головок диска, правда, усиленные. Позже накопители слегка «интеллектуализировали», и появился (ненадолго) интерфейс дисков ESDI, обеспечивающий скорость передачи данных аж 1 Мбайт/с. Однако вскоре контроллер полностью переселился на само устройство, да еще и с собственной буферной памятью (сначала на один сектор, а потом объем стал стремительно расти), и из внешнего интерфейса устройства хранения ушла вся специфика, связанная с магнитной записью и воспроизведением данных. Так появились устройства с интерфейсом ATА, начавшим свою историю в 1988 г. и ставшим в наши дни самым распространенным. Для устройств, логически отличающихся от жестких дисков — оптических, магнитооптических, ленточных и любых других, — в 1996 г. была принята спецификация ATAPI. Это пакетное расширение интерфейса, которое позволяет передавать по шине ATA устройству блоки командной информации, структура которых была позаимствована из SCSI. Потолок скорости ATA — 100 Мбайт/с (Ultra DMA Mode 5). Интерфейс ATA имеет уже вполне видимую границу по адресации около 137 Гбайт, в AT API используется принятая в SCSI 32-битная адресация, позволяющая адресовать до 2 Тбайт (при 512-байтном блоке). Дальнейшее развитие интерфейса — Serial ATA; здесь повышается скорость обмена с устройством, решается проблема одновременной работы с несколькими устройствами, значительно расширяются возможности адресации.

Для устройств хранения используют и универсальные интерфейсы, первым конкурентом ATA является шина SCSI, как в параллельном варианте так и в последовательном (FCAL). Примерно при тех же скоростях обмена SCSI позволяет эффективно работать с несколькими устройствами на одной шине, которая во время выполнения команды с длительной фазой ожидания данных свободна для обмена с другими устройствами. В отличие от сугубо внутренней шины ATA, SCSI позволяет подключать и внешние устройства. Для внешних устройств хранения с успехом применяются и шины USB, реже Fire Wire, а также подключение к LPT-порту.

 

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

 

Накопители на гибких магнитных дисках (НГМД) подключаются к контроллеру через специальный стандартный интерфейс. Основные функции по управлению НГМД, а также кодирование-декодирование данных выполняет контроллер, расположенный на большинстве современных системных плат. Раньше контроллер часто выносили на специальную карту расширения («в компании» с интерфейсом НЖМД). На плате электроники, установленной на корпусе НГМД, расположены только схемы приводов двигателей, усилители-формирователи сигналов записи и считывания и формирователи сигналов от датчиков.

 

9.1.1. Аппаратный интерфейс

Все сигналы интерфейса НГМД являются логическими с уровнями ТТЛ, активный уровень — низкий. Формирователи выходных сигналов накопителя имеют выход типа «открытый коллектор». Интерфейс подразумевает наличие терминаторов — нагрузочных резисторов — для каждой сигнальной линии устройства. Теоретически их предполагалось включать только на последнем дисководе в шлейфе, практически же их никогда и не отключают. Современные трехдюймовые накопители используют «распределенный терминатор» — резисторы с относительно высоким сопротивлением (1–1,5 кОм), постоянно соединяющие входные линии интерфейса с шиной +5 В. Низкие частоты интерфейсных сигналов позволяют не задумываться о точности согласования импеданса шлейфа и сопротивления терминатора. Однако если на шлейфе стоят только старые 5"-накопители со снятыми терминаторами, они могут отказаться надежно работать (выходные линии с открытым коллектором останутся без нагрузки).

Логически интерфейс довольно прост. Для того чтобы заставить накопитель работать, его нужно выбрать сигналом Drive Sel и запустить мотор шпинделя сигналом Motor On. Для выборки накопитель имеет четыре сигнала DS0…DS3, но отзывается только на один из них, определенный установкой джамперов. Выбранный накопитель воспринимает управляющие сигналы от контроллера и передает контроллеру свои выходные сигналы. О том, что накопитель выбран, свидетельствует светодиодный индикатор на его лицевой панели.

Для перемещения головок на один шаг контроллер должен подать импульс Step; направление перемещения определяется уровнем сигнала Direction: при низком уровне (сигнал активен) перемещение происходит в сторону центра диска (номер трека увеличивается). Нулевой трек контроллер находит, перемещая головки от центра до появления сигнала Track 00. Выбор номера головки производится сигналом Side 1. Начало трека накопитель отмечает импульсом Index, который вырабатывается при прохождении индексного отверстия вращающейся дискеты мимо датчика. Считываемые данные в закодированном (MFM) виде (но усиленные и сформированные в ТТЛ-сигнал) поступают от накопителя по линии Read Data. Для включения режима записи служит сигнал Write Gate, закодированные данные в цифровом виде поступают от контроллера по линии Write Data. Если установлена дискета, защищенная от записи, накопитель сообщит об этом сигналом Write Protect. Для снижения тока записи, которое требуется при работе накопителей HD с дискетами DD и QD, предназначен сигнал Reduce Write, его иное название — Low Current или FDHDIN. Для переключения головок на «вертикальную запись» (для дискет 2,88 Мбайт) служит сигнал FDEDIN. Оба эти сигнала вырабатываются контроллером, но для самого дисковода они дублируются сигналами от датчиков типа дискеты (сигнал FDEDIN необязателен, дисковод сам переключится по сигналу от датчика). Некоторые модели дисководов позволяют изменить описанный способ работы датчиков типа дискеты, принятый для PC-совместимых ПК, — они могут быть отключены или выполнять информирование контроллера. Однако практически все контроллеры сами управляют линиями интерфейса, соответствующими сигналам от этих датчиков. В этом управлении учитывается тип дисковода, описанный в CMOS Setup, и заказанный формат дискеты. Сигнал Reduce Write (низкий уровень) формируется контроллером при любом обращении к дисководу, описанному в CMOS как HD (High Density — высокая плотность, емкость 1,2 или 1,44 Мбайт), для работы с дискетами DD или QD (360 или 720 Кбайт). В некоторых контроллерах этот сигнал формировался, только когда контроллер настроен на скорость 300 Кбит/с (дискета 360/720 Кбайт в дисководе на 1,2 Мбайт). Такой контроллер может надежно форматировать и записывать дискеты 720 Кбайт в приводе на 1,44 Мбайт только при наличии правильно сконфигурированного датчика HD, иначе он все 3,5" дискеты будет записывать с высоким током записи, недопустимым для дискет QD.

Накопители HD при смене дискеты устанавливают сигнал Disk Changed, который сбрасывается после обращения к этому накопителю. Этот сигнал заслуживает особого внимания. Он имеется только у дисководов HD и ED (Extra High Density, малораспространенные дисководы на 2,88 Мбайт), причем способ использования этого контакта может определяться джамперами дисковода. В PC соответствующий джампер устанавливается в положение DC (Disk Change). Альтернативное использование этой линии — сигнализация готовности устройства, что может обозначаться как RY, RDY или SR, — для PC непригодно.

Заметим, что в интерфейсе нет никаких сигналов, прямо информирующих контроллер о готовности — наличии установленной дискеты. Контроллер может определить готовность, лишь выбрав накопитель и запустив мотор. Тогда отсутствие импульсов Index будет означать неготовность — нет дискеты или она не зафиксирована на шпинделе, или же не подключен дисковод (интерфейс или питание). Наличие дисковода контроллер может определить с помощью команды рекалибровки (см. ниже) — при ее выполнении дисковод должен подать сигнал Track00.

Все НГМД, применяемые в PC, независимо от типа и размера имеют одинаковый интерфейс и унифицированные 34-контактные разъемы двух типов: с печатными двусторонними ламелями у устройств 5" и двухрядными штырьковыми контактами у устройств 3,5". Используемый в PC кабель-шлейф имеет перевернутый фрагмент из 7 проводов с номерами 10–16 (рис. 9.1). Этот поворот позволяет подключать к контроллеру одним шлейфом до двух НГМД, причем адрес накопителя определяется его положением на шлейфе: для привода А: фрагмент перевернут, для В: — нет. Универсальный шлейф с пятью разъемами, изображенный на рисунке, позволяет подключать пару любых дисководов, которые должны располагаться в разных зонах шлейфа. Некоторые разъемы могут и отсутствовать, что сковывает свободу конфигурирования дисководов. В табл. 9.1 описан интерфейсный кабель с сигналами, приходящими на разные накопители. Направление сигналов (I/O — ввод-вывод) указано относительно контроллера.

Рис. 9.1. Кабель интерфейса НГМД

Таблица 9.1. Кабель интерфейса НГМД

Контроллер  Дисковод В: Дисковод A:
Контакт¹ Сигнал I/O Контакт¹ Сигнал Контакт¹ Сигнал
2 FDHDIN (Reduce Write) О 2 Low Current 2 Low Current
4 Резерв - 4 Резерв 4 Резерв
6 FDEDEIN - 6 FDEDIN (DS3) 6 FDEDIN (DS3)
8 Index I 8 Index 8 Index
10 Motor On A O 10 DS0 16 Motor²
12 Drive Sel 1 O 12 DS11 14 DS2
14 Drive Sel 0 О 14 DS2 12 DS11
16 Motor On В О 16 Motor² 10 DS0
18 Direction О 18 Direction 18 Direction
20 Step О 20 Step 20 Step
22 Write Data О 22 WData 22 Wdata
24 Write Gate О 24 WGate 24 Wgate
26 Track 00 I 26 TR 00 26 TR 00
28 Write Protect I 28 WProt 28 WProt
30 Read Data I 30 RData 30 Rdata
32 Side 1 O 32 Side 1 32 Side 1
34³ Disk Changed I 34³ DC 34³ DC

¹ Нечетные контакты 1-33 — земля. Для дисководов 5" ключ между контактами 4–5 и 6–7.

² Пара сигналов, обеспечивающая выборку FDD (Motor On А и Drive Sel 0 для дисковода А: и Motor On В и Drive Sel 1 для дисковода В:).

³ Контакт 34 в XT не используется.

Контроллер НГМД и интерфейсный кабель, принятый в PC, позволяют адресоваться к одному из двух накопителей и включать мотор сигналами Drive Sel 0 и Motor On А для накопителя А: и Drive Sel 1 и Motor On В для накопителя В:. При этом на обоих накопителях джамперы устанавливаются так, что они отзываются на сигнал DS 1 (контакт 12 разъема). Обычно джамперы на дисководе обозначаются DS0/DS1/DS2/DS3, и следует установить джампер DS1. Если джамперы обозначаются как DS1/DS2/DS3/DS4, что встречается нечасто, то следует установить DS2. Принятая система выборки позволяет все дисководы конфигурировать однотипно, а адрес задавать положением на шлейфе. В некоторых специфических клонах PC применяют иную систему выборки накопителей и «прямой» кабель-шлейф. При этом используется выборка устройства сигналом DS0, ко переключение выборки на эту линию некоторыми накопителями не поддерживается, в результате замена накопителей в этих «фирменных» машинах может стать хлопотным делом, особенно при отсутствии технической документации.

 

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

Программное взаимодействие с НГМД производится через контроллер накопителей на гибких дисках 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%) отклонениях скорости от номинала, поэтому скорость должна быть правильно выбрана для всех операций обмена данными с диском.

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

♦ FDC АТ#1 (стандартный или основной) занимает порты с адресами 3F0h-3F7h (как и FDC XT);

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

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

Таблица 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)¹ 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] — не используются, при чтении не выводятся на шину данных

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

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

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

Все операции с дискетами выполняются по командам, посылаемым хостом в регистр DR (3F5) согласно состоянию битов регистра MSR (3F4). Запись байта команды или данных в регистр DR разрешается лишь при текущем значении MSR=10xxxxxxb, чтение — при MSR=11xxxxxxb. Для записи/чтения этого регистра приходится использовать отдельные подпрограммы, не только дожидающиеся разрешающих значений MSR, но и имеющие аварийный выход по тайм-ауту. Хост также выполняет запись в регистр DOR (3F2) для запуска/останова дисковода, а также в CCR (3F7) или DSR (3F4) для выбора скорости передачи данных. В операциях обмена данными с дискетами обычно участвует контроллер DMA, и он должен быть своевременно проинициализирован. Сигнал TC (завершение цикла 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 отрабатывает аппаратные прерывания от таймера, так что не отключающийся мотор дисковода может быть косвенным признаком «зависания» компьютера.

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

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

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

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

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

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

 

9.2. Интерфейс ATA/ATAPI (IDE)

 

Интерфейс ATA (AT Attachment for Disk Drives) разрабатывался в 1986–1990 гг. для подключения накопителей на жестких магнитных дисках к компьютерам IBM PC AT с шиной ISA. Стандарт, выработанный комитетом X3T10, определяет набор регистров устройств и назначение сигналов 40-контактного интерфейсного разъема. Интерфейс появился в результате переноса стандартного (для PC/AT) контроллера жесткого диска ближе к накопителю, то есть создания устройств со встроенным контроллером — IDE (Integrated Drive Electronics). Стандартный контроллер AT позволял подключать до двух накопителей, что в интерфейсе ATA означает параллельное подключение контроллеров двух устройств. В спецификации ATA фигурируют следующие компоненты.

♦ Хост-адаптер — средства сопряжения интерфейса ATA с шиной компьютера. Хостом мы будем называть компьютер с хост-адаптером интерфейса ATA. Хост-контроллер — более развитый вариант хост-адаптера.

♦ Ведущее устройство (Master) — ПУ, в спецификации ATA официально называемое Device-0 (устройство 0).

♦ Ведомое устройство (Slave) — ПУ, в спецификации официально называемое Device-1 (устройство 1).

Хост-адаптер и устройства объединяются кабелем-шлейфом, соединяющим параллельно одноименные контакты интерфейсных разъемов. Регистры обоих контроллеров оказываются расположенными в одних и тех же областях пространства ввода-вывода. Для выбора устройства, исполняющего текущую команду, используется бит выбора накопителя (DEV) в регистре номера устройства и головки (drive/head register). Если бит DEV=0, выбрано ведущее устройство, если DEV=1 — ведомое. Запись в этот регистр воспринимается сразу обоими устройствами, на обращения к остальным регистрам реагирует только выбранное. Достаточно универсальный набор сигналов позволяет подключать любое устройство со встроенным контроллером, которому в пространстве портов ввода-вывода достаточно того же набора регистров, способное поддержать режим выбора устройства через вышеупомянутый бит. Принятая система команд и регистров, являющаяся частью спецификации ATA, ориентирована на блочный обмен данными с устройствами прямого доступа. Для иных устройств существует спецификация ATAPI, основанная на тех же аппаратных средствах, но позволяющая обмениваться пакетами управляющей информации (Package Interface, PI). Структура и наполнение пакетов позаимствованы из универсального интерфейса SCSI. Пакетный интерфейс позволяет расширить границы применения шины ATA.

Адресация в ATA имеет «дисковые корни»: для накопителей изначально указывали адрес цилиндра (cylinder), головки (head) и сектора (sector) — так называемая трехмерная адресация CHS. Сначала эта адресация точно соответствовала реальной геометрии — физически сектор действительно находился по указанному адресу. Позже по ряду причин диски ATA стали описывать внешней геометрией, отличающейся от реальной внутренней (например, разные зоны треков имеют разное число секторов, причем часть секторов может резервироваться на случай замены дефектных). При этом одно и то же устройство может иметь различную внешнюю геометрию. Преобразование адресов в реальные выполняется встроенным контроллером устройства. В системе CHS устройство ATA позволяет адресовать до 267 386 880 (65 536×16×255) секторов (блоков), что при размере сектора в 512 байт дает 136 902 082 560 байт (около 137 Гбайт). Позже пришли к линейной адресации логических блоков LBA (Logical Block Addressing), где адрес блока (сектора) определяется 28-битным числом, что позволяет адресовать до 268 435 455 (228) блоков (немного больше, чем в CHS). Для устройств ATА, поддерживающих и CHS, и LBA, режим адресации определяется для каждой команды битом L (бит 6) регистра D/H; режимы могут чередоваться произвольным образом. Устройства ATAPI используют принятую в SCSI 32-битную логическую адресацию, позволяющую адресовать до 2 Тбайт (при 512-байтном блоке).

Если к шине ATA подключено одно устройство, оно должно быть ведущим. Если подключены два устройства, одно должно быть ведущим, другое — ведомым. О своей роли (ведущее или ведомое) устройства «узнают» с помощью предварительно установленных конфигурационных джамперов. Если применяется «кабельная выборка» (см. ниже), роль устройства определяется его положением на специальном ленточном кабеле. Оба устройства воспринимают команды от хост-адаптера одновременно. Однако исполнять команду будет лишь выбранное устройство. Выводить выходные сигналы на шину ATA имеет право только выбранное устройство. Такая система подразумевает, что, начав операцию обмена с одним из устройств, хост-адаптер не может переключиться на обслуживание другого до завершения начатой операции. Параллельно могут работать только устройства IDE, подключаемые к разным шинам (каналам) ATA. Спецификация ATA-4 определяет способ обхода этого ограничения, но эту возможность используют редко.

Для устройств IDE существует несколько разновидностей интерфейса.

♦ ATA, он же AT-BUS, — 16-битный интерфейс подключения к шине компьютера AT. Наиболее распространенный 40-проводный сигнальный и 4-проводный питающий интерфейс для подключения дисковых накопителей к компьютерам AT. Для миниатюрных (2,5" и менее) накопителей используют 44-проводный кабель, по которому передается и питание.

♦ PC Card ATA — 16-битный интерфейс с 68-контактным разъемом PC Card (PCMCIA) для подключения к блокнотным PC.

♦ XT IDE (8 бит), он же XT-BUS, — 40-проводный интерфейс, похожий на ATA, но несовместимый с ним.

♦ MCA IDE (16 бит) — 72-проводный интерфейс, предназначенный специально для шины и накопителей PS/2.

♦ ATA-2 — расширенная спецификация ATA. Включает 2 канала, 4 устройства, PIO Mode 3, Multiword DMA Mode 1, Block mode, объем диска до 8 Гбайт, поддержка LBA и CHS.

♦ Fast ATA-2 разрешает использовать Multiword DMA Mode 2 (13,3 Мбайт/с), PIO Mode 4.

♦ ATA-3 — расширение ATA-2. Включает средства парольной защиты, улучшенного управления питанием, самотестирования с предупреждением приближения отказа — SMART (Self Monitoring Analysis and Report Technology).

♦ ATA/ATAPI-4 — расширение ATA-3, включающее режим Ultra DMA со скоростью обмена до 33 Мбайт/с и пакетный интерфейс ATAPI. Появляется поддержка очередей и возможность перекрытия команд.

♦ ATA/ATAPI-5 — ревизия ATA/ATAPI-4: удаляются устаревшие команды и биты, добавляются новые возможности защиты и управления энергопотреблением. Включает режим Ultra DMA со скоростью обмена до 66 Мбайт/с.

♦ ATA/ATAPI-6 — дополнения к ATA/ATAPI-5: потоковое расширение для чтения/записи аудио- и видеоданных, управление акустическим шумом, режим Ultra DMA со скоростью обмена до 100 Мбайт/с.

♦ Serial ATA — последовательный интерфейс.

♦ E-IDE (Enhanced IDE) — расширенный интерфейс, введенный фирмой Western Digital. Реализуется в адаптерах для шин PCI и VLB. Позволяет подключать до 4 устройств (к двум каналам), включая CD-ROM и стриммеры (ATAPI). Поддерживает PIO Mode 3, Multiword DMA Mode 1, объем диска до 8 Гбайт, LBA и CHS. С аппаратной точки зрения практически полностью соответствует спецификации ATA-2.

Устройства ATA IDE, E-IDE, ATA-2, Fast ATA-2, ATA-3, ATA/ATAPI-4, ATA/ATAPI-5 и ATA/ATAPI-6 электрически совместимы. Степень логической совместимости достаточно высока (все базовые возможности ATA доступны). Однако для полного использования всех расширений необходимо соответствие спецификаций устройств, хост-адаптера и его ПО.

Разработкой спецификаций ATA/ATAPI занимается технический комитет T13 американского Национального Комитета но стандартизации в области информационных технологий (NCITS). Разработанные им спецификации оформляются в виде стандартов ANSI. Спецификация ATA/ATAPI-6 объявлена последней версией параллельного интерфейса ATA, за которой следует последовательный интерфейс Serial ATA.

 

9.2.1. Параллельный интерфейс ATA

Параллельный интерфейс ATA представляет собой шину, в которой все сигналы соответствуют стандартной логике ТТЛ:

♦ высокий уровень выходного сигнала не ниже 2,4 В (при токе до 400 мкА, сигнал DMARQ — до 500 мкА), низкий уровень не выше 0,5 В (при токе 4 мА, для линии DASP ради совместимости со старыми устройствами — 12 мА);

♦ высокий уровень входного сигнала не ниже 2,0 В, низкий уровень не выше 0,8 В.

Все информационные сигналы интерфейса передаются через 40-контактный разъем, у которого ключом является отсутствующий на вилке и закрытый на розетке контакт 20. Использование в качестве ключа выступа на корпусе розетки и прорези в бандаже вилки стандартом не приветствуется. Для соединения устройств применяется плоский многожильный кабель-шлейф, длина кабеля не должна превышать 0,46 м (18"), допустимая емкость проводников — не более 35 пФ. Терминаторы стандартом не предусматриваются (они имеются в каждом устройстве и хост-адаптере), но если кабель с тремя разъемами (розетками) используют для подключения одного устройства, то устройство и хост-адаптер рекомендуется подключать к противоположным концам кабеля. Состав информационных сигналов интерфейса ATA приведен в табл. 9.3, вид кабеля — на рис. 9.2. В большинстве кабелей одноименные контакты всех разъемов соединяются своими проводами и все коннекторы равноправны. Встречаются (редко) ленточные кабели с кабельной выборкой, изображенные на рис. 9.3. В них провод 28 перерезан, так что контакт 28 (CSEL) для ведущего устройства заземлен через хост-адаптер, а для ведомого — не подключен. Кабель должен соответствовать системе адресации, выбранной для обоих устройств.

Таблица 9.3. Интерфейс ATA (IDE)

Сигнал Тип 1 Контакт Контакт Тип 1 Сигнал
RESET# I 1 2 - GND
DD7 I/O TS 3 4 I/O TS DD8
DD6 I/O TS 5 6 I/O TS DD9
DD5 I/O TS 7 8 I/O TS DD10
DD4 I/O TS 9 10 I/O TS DD11
DD3 I/O TS 11 12 I/O TS DD12
DD2 I/O TS 13 14 I/O TS DD13
DD1 I/O TS 15 16 I/O TS DD14
DD0 I/O TS 17 18 I/O TS DD15
GND - 19 20 - Ключ (нет штырька)
DMARQ O TS 2 21 22 - GND
DIOW#/STOP 3 I 23 24 - GND
DIOR#/HDMARDY#/HSTROBE 3 I 25 26 - GND
IORDY/DDMARDY#/DSTROBE 3 O TS 2 27 28 I/O SPSYNC/CSEL 7
DMACK# I 29 30 - GND
INTRQ O TS 2 31 32 O OK IOCS16# 8
DA1 I 33 34 I, O 4 PDIAG#/CBLID 3
DA0 I 35 36 I DA2
CS0# I 37 38 I CS1#
DASP# I/O OK 5 39 40 - GND
+5 В (Logic) - 41 6 42 6 - +5 В (Motor)
GND - 43 6 44 6 - Зарезервирован

1 Тип сигнала для устройства: I — вход, О — выход, I/O — двунаправленный, TS — тристабильный, OK — открытый коллектор. Для хост-адаптера значения I и О имеют противоположный смысл.

2 У старых устройств сигнал может иметь тип OK (при разнотипных сигналах на одной шине возможен конфликт).

3 Сигналы, приведенные после символа /, используются только в режиме Ultra DMA (ATA-4).

4 У ведущего устройства — вход, у ведомого — выход.

5 У ведомого устройства — только выход.

6 Контакты 41–44 используются только для миниатюрных дисков.

7 Начиная с ATA-3 — только CSEL.

8 Начиная с ATA-3 зарезервирован.

Рис. 9.2. Интерфейсный кабель ATA

Рис. 9.3. Ленточный кабель интерфейса ATA с кабельной выборкой

Начиная с ATA/ATAPI-4 в шлейфах узаконили кабельную выборку и для подключения устройства 1 определили средний коннектор. В нем контакт 28 либо не соединен с проводом, либо просто отсутствует. Вполне понятно, что при использовании кабельной выборки хост-контроллер подключать к среднему коннектору нельзя (как и к правому на рис. 9.3). Если номер устройства назначается джампером, то для 40-проводного кабеля можно подключать устройства и хост-контроллер к любым коннекторам произвольно (но желательно избегать «висячих» концов).

Для устойчивой работы в режиме Ultra DMA рекомендуется применение 80-проводных кабелей, обеспечивающих чередование сигнальных цепей и проводов схемной земли (GND). Такие кабели требуются для режимов UltraDMA выше 2 (скорость выше 33 Мбайт/с). Эти кабели разделываются на специальные разъемы, имеющие 40-контактные гнезда с обычным назначением контактов, но ножевые контакты для врезки 80 проводов. В шлейфе для схемной земли используются либо все четные, либо все нечетные провода — это зависит от применяемых разъемов (на них должна быть маркировка EVN GND или ODD GND соответственно). Установка на одном шлейфе разнотипных разъемов недопустима (тогда все 80 проводов окажутся соединенными вместе). На 80-проводном кабеле в разъеме для подключения контроллера контакт 34 соединен с шиной GND и не соединен с проводом шлейфа; этим обеспечивается идентификация типа кабеля (CBLID). Провод шлейфа соединяет контакты 34 разъемов устройств, что обеспечивает прохождение сигнала PDIAG# от ведомого устройства к ведущему. С учетом возможности кабельной выборки на 80-проводном шлейфе положение коннекторов уже однозначно.

♦ Коннектор хост-контроллера расположен на конце шлейфа, у него контакт 34 заземлен и не соединен со шлейфом. Корпус коннектора должен быть синего цвета.

♦ Коннектор устройства 0 расположен на противоположном конце шлейфа, у него все контакты соединены со шлейфом. Корпус коннектора должен быть черного цвета.

♦ Коннектор устройства 1 (необязательный) расположен в середине шлейфа, у него контакт 28 не соединен со шлейфом. Корпус коннектора должен быть серого цвета.

Если кабельная выборка не используется, то устройства 0 и 1 можно менять местами.

Спецификация ATA «узаконивает» как 40-контактный интерфейсный разъем, так и 4-контактный разъем питания (рис. 9.4), но для малогабаритных устройств питание может подаваться по 44-проводному интерфейсному кабелю.

Рис. 9.4. Разъемы интерфейса ATA (вилки на устройствах): а — интерфейсный, б — питания

Для большинства устройств применяется 40-контактный разъем с шагом контактов 2,54 мм. Рядом с ним могут располагаться дополнительные контакты, служащие для конфигурирования устройства и технологических целей (диагностики и других операций по служебному последовательному интерфейсу). Спецификация ATA/ATAPI предусматривает два варианта, приведенные на рис. 9.5, а и б. Здесь пустым квадратиком обозначены позиции ключевых (пропущенных) выводов, контакты 1-40 используются для интерфейса (см. табл. 9.3), а контакты А-Н — для установки джамперов (табл. 9.4) и технологических целей. Для миниатюрных устройств предназначен 50-контактный разъем с шагом выводов 2 мм (рис. 9.5, в), у которого контакты 1-44 соответствуют табл. 9.3, контакты A-D — табл. 9.4 (используются для конфигурирования, а пара пропущенных контактов является дополнительным ключом). Для 50-контактного кабеля принято назначение выводов накопителей IBM Thinkpad/Travelstar:

♦ контакт А через резистор 10 кОм соединяется с шиной +5 В;

♦ контакт В для устройства задает его роль: низкий уровень — устройство 0, высокий — устройство 1;

♦ контакт С определяет режим устройства по включении питания: низкий уровень — Standby, высокий — Idle;

♦ контакт D соединяется с контактом 28 (CSEL) и через резистор 10 кОм — с шиной +5 В.

Это назначение, позволяющее конфигурировать и адресацию, и режим потребления, применяется не на всех устройствах. На винчестерах фирмы Toshiba контакты А и В могут использоваться как выход и вход последовательного интерфейса (В подтянут к шине +5 В через резистор 47 кОм), С — GND, D — роль устройства (низкий уровень для устройства 1).

Рис. 9.5. Дополнительные контакты на разъемах интерфейса ATA: а — SFF8057, б — SFF8058, в — SFF8212 (50-контактный разъем)

Таблица 9.4. Использование дополнительных контактов

Выборка SFF8057 SFF8058 SFF8212 Toshiba (1996)
Используемые контакты Е-Н A-F A-D A-D
Кабельная выборка E-F A-B B-D B-D
Master G-H E-F - -
Master при наличии Slave G-H, E-F E-F - -
Slave - C-D A-B C-D

Для малогабаритных внешних устройств существует довольно распространенный разъем HP 36, но в спецификацию ATA/ATAPI он не входит. Для устройств хранения на флэш-памяти используется коннектор, соответствующий спецификации CompactFlash Association.

В документации на устройства могут быть указаны несколько отличающиеся обозначения сигналов. Здесь приведены обозначения из стандарта ATA/ATAPI- 4.

♦ RESET# (Device Reset) — сброс устройства (инвертированный сигнал сброса системной шины). Сигнал длительностью не менее 25 мкс вырабатывается после установления питающих напряжений. Сигнал вызывает сброс интерфейса в исходное состояние и устанавливает параметры по умолчанию.

♦ DA[2:0] (Device Address) — три младших бита системной шины адреса, используемые для выбора регистров устройств.

♦ DD[15:0] (Device Data) — двунаправленная 16-битная шина данных между адаптером и устройствами. При 8-битных обменах используются младшие биты D[7:0]. У устройства не должно быть «подтягивающего» резистора на линии DD7 — на хост-контроллере эта линия через резистор 10 кОм соединена с шиной GND. Это позволяет хосту определить факт отсутствия устройства на шине сразу после аппаратного сброса: при чтении регистра состояния отсутствующего устройства бит BSY окажется сброшенным.

♦ DIOR# (Device I/O Read) — строб чтения портов ввода-вывода. Данные фиксируются по положительному перепаду сигнала.

♦ DIOW# (Device I/O Write) — строб записи портов ввода-вывода. Данные фиксируются по положительному перепаду сигнала.

♦ IORDY (I/O channel Ready) — готовность устройства завершить цикл обмена. Низким уровнем сигнала во время цикла обмена устройство может ввести такты ожидания шины. Сигнал требуется при обмене в PIO Mode 3 и выше. На хост-контроллере эта линия через резистор 1 кОм должна подтягиваться к шине питания.

♦ IOCS16# — разрешение 16-битных операций. Обращение ко всем регистрам, кроме регистра данных, всегда 8-битное. Для PIO Mode 0, 1, 2 при активном сигнале обращения 16-битные, при неактивном — 8-битные. Для PIO Mode 3, 4 и DMA все обмены 16-битные, кроме дополнительных байтов (выходящих за границу 512-байтного сектора) «длинного» считывания и записи. Начиная с ATA/ATAPI-3 не используется.

♦ DMARQ (DMA Request) — запрос обмена по каналу DMA (необязательный). При разрешении обмена сигнал (высокий уровень) вводится устройством по готовности к обмену. Введя сигнал DMARQ, устройство должно дождаться подтверждения от хост-адаптера сигналом DMACK#, после чего может снять запрос DMARQ. Для очередной передачи запрос должен быть введен снова. В режиме Multiword DMA запрос может удерживаться на время передачи всех данных. Выход должен быть тристабильным, во время работы с DMA он может быть в активном состоянии (0 или 1) только у выбранного устройства. В ATA-1 для этого сигнала мог использоваться как тристабильный, так и стандартный ТТЛ-выход. Работа на одной шине устройств с разнотипными выходами DMARQ может привести к конфликтам. На хост-контроллере линия должна соединяться с шиной GND через резистор 5,6 кОм.

♦ DMACK# (DMA Acknowledge) — подтверждение DMA. Сигнал вырабатывается хост-адаптером как подтверждение цикла передачи. Передача слова данных управляется сигналами DIOR# или DIOW#. Во время обмена по каналу DMA сигналы IOCS16#, CS0# и CS1# не используются, обмен всегда производится 16-битными словами.

♦ INTRQ (Interrupt Request) — запрос прерывания. Выход должен быть тристабильным, активный сигнал (логическую единицу) вырабатывает только выбранное устройство, когда у него имеется необслуженный запрос прерывания и его вырабатывание не запрещено битом nIEN в регистре Device Control. Запрос сбрасывается по сигналу RESET#, установке бита SRST в регистре Deviсе Control, записи в регистр команд или чтении регистра состояния. При обменах PIO запрос устанавливается в начале передачи каждого блока (сектора или группы секторов при многосекторных операциях). Исключения: по командам Format Track, Write Sector(S), Write Buffer и Write Long в начале передачи первого блока данных запрос прерывания не вырабатывается. При обменах DMA запрос прерывания вырабатывается только по завершении операции. На хост-контроллере эта линия через резистор 10 кОм должна подтягиваться к шине GND.

♦ CS0# (Chip Select 0) — сигнал выбора блока командных регистров (Command Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне 1F0h-1F7h (сигнал так же называют CS1FX#).

♦ CS1# (Chip Select 1) — выбор блока управляющих регистров (Control Block Registers). Для первого канала он вырабатывается при наличии на системной шине адреса порта ввода-вывода в диапазоне 3F6h-3F7h (часто этот сигнал называется CS3FX#).

♦ PDIAG# (Passed Diagnostics) — сигнал о прохождении диагностики. Ведущее устройство наблюдает за этим сигналом, который ведомое устройство должно выработать в ответ на сброс или команду диагностики. Если ведомое устройство обнаружено (по сигналу DASP#), ведущее устройство ожидает сигнал в течение 31 с после сброса и 6 с после команды диагностики. Если за это время сигнал не появился, ведущее устройство отмечает этот факт установкой бита 7 регистра ошибок. Если ведомое устройство не обнаружено, ведущее обнуляет регистр состояния ведомого устройства и сообщает свое состояние сразу после завершения собственной самодиагностики. Сигнал служит только для связи двух устройств и хост-адаптером не используется (в ATA-4 контакт задействован для сигнала CBLID#).

♦ CBLID# (Cable assembly type identifier) — идентификация типа кабеля. В 80-проводной сборке контакт 34 на разъеме хост-адаптера соединяется с шиной GND, а контакты 34 разъемов устройств соединяются между собой, но связи с разъемом хост-адаптера не имеют. На устройстве эта линия через резистор 10 кОм должна подтягиваться к шине питания. После прохождения сброса (когда сигнал PDIAG# снимается) хост может определить наличие 80-проводного кабеля по низкому уровню сигнала.

♦ DASP# (Device Active, Slave Present) — сигнал двойного назначения: индикатор активности устройства и присутствия ведомого устройства. Устройства имеют выход типа «открытый коллектор» с нагрузочным резистором 10 кОм к шине +5 В. После сброса по сигналу RESET# или при инициализации по включении питания оба устройства в течение 1 мс должны деактивировать этот сигнал, после чего не позже чем через 400 мс его вводит ведомое устройство для сообщения о своем присутствии. Ведущее устройство не активирует этот сигнал в течение 450 мс. Сигнал деактивируется ведомым устройством после получения им команды или через 31 с автоматически (смотря что произойдет раньше). После этого сигнал может быть введен любым устройством как индикатор активности. Адаптер использует этот сигнал для включения светодиодного индикатора доступа к диску.

♦ SPSYNC/CSEL (Spindle Synchronization/Cable Select) — синхронизация шпинделя или выборка кабелем. Сигнал двойного назначения, которое должно быть единым для обоих устройств. Сигнал SPSYNC позволяет синхронизировать шпиндели устройств (актуально для RAID-массивов); используется по усмотрению производителя накопителя, начиная с ATA/ATAPI-3 этот сигнал из спецификации изъят. Сигнал CSEL позволяет устройствам определять свой адрес по положению на специальном кабеле с разрывом провода 28 между разъемами двух устройств (малораспространенная «кабельная выборка»). Эта линия на хост-адаптере заземлена, и ведущее устройство получает заземленную линию, а ведомое — неподключенную. На устройстве линия подтягивается к высокому уровню резистором 10 кОм. Состояние сигнала (если он управляется хост-адаптером) должно удерживаться по крайней мере 31 с после сигнала RESET#.

При использовании режима Ultra DMA четыре линии получают новое назначение сигналов.

♦ STOP (Stop Ultra DMA burst) — останов передачи пакета Ultra DMA.

♦ DDMARDY# (Device Ultra DMA ready) — готовность устройства при приеме пакета Ultra DMA (управление потоком).

♦ DSTROBE (Host Ultra DMA data strobe) — строб данных устройства при передаче пакета хосту. Данные передаются по обоим перепадам DSTROBE.

♦ HDMARDY# (Host Ultra DMA ready) — готовность хоста при приеме им пакета Ultra DMA (управление потоком).

♦ HSTROBE (Host Ultra DMA data strobe) — строб данных хоста при передаче пакета устройству. Данные передаются по обоим перепадам HSTROBE.

Для блокнотных ПК в стандарте имеется вариант интерфейса IDE на 68-контактном разъеме PCMCIA (PC Card), приведенный в табл. 9.5. Здесь имеется ряд специфичных сигналов.

♦ SELATA# (Select 68-pin ATA) — сигнал, которым хост идентифицирует режим использования разъема, PC Card (сигнал снят) или ATA (сигнал установлен, то есть низкий уровень). Этот сигнал хост должен установить до подачи питания на коннектор. В течение 19 мс после подачи питания устройство игнорирует все интерфейсные сигналы, кроме этого. Если этот сигнал активен, то устройство должно сконфигурироваться на режим ATA. Если сигнал неактивен, оно должно сконфигурироваться на режим PC Card или не отвечать на другие сигналы хоста.

♦ CD1# и CD2# (Card Detect) заземляются в устройстве — по этим сигналам хост определяет присутствие устройства.

♦ CS1# (Device chip select 1) — выбор устройства, подается хостом на оба контакта (11 и 42), но устройство воспринимает только один из них.

♦ DMARQ, DMACK# и IORDY — не обязательны для использования.

♦ M/S# (Master/Slave) — инверсия сигнала CSEL. Хост выдает сигналы M/S# и CSEL до подачи питания, устройство воспринимает лишь один из них.

Таблица 9.5. 68-контактный интерфейс ATA для PC Card (PCMCIA)

Контакт Сигнал Контакт Сигнал
1 GND 35 GND
2 DD3 36 CD1#
3 DD4 37 DD11
4 DD5 38 DD12
5 DD6 39 DD13
6 DD7 40 DD14
7 CS0# 41 DD15
8   42 CS1#
9 SELATA# 43  
10   44 DIOR#
11 CS1# 45 DIOW#
12   46  
13   47  
14   48  
15   49  
16 INTRQ 50  
17 +5 В 51 +5 В
18   52  
19   53  
20   54  
21   55 M/S#
22   56 CSEL
23   57  
24   58 RESET#
25   59 IORDY#
26   60 DMARQ
27 DA2 61 DMACK#
28 DA1 62 DASP#
29 DA0 63 PDIAG#
30 DD0 64 DD8
31 DD1 65 DD9
32 DD2 66 DD10
33   67 CD2#
34 GND 68 GND

Для обеспечения «горячего» подключения разъем для цепи GND обеспечивает более раннее соединение при подключении и более позднее при отключении. В устройстве сигналы CS0#, CS1#, RESET# и SELATA# подтягиваются к пассивному состоянию.

Для компьютеров класса XT существует 8-битная версия интерфейса, называемая XT-IDE, реже — XT-Bus. Этот интерфейс [2, 5], как и ATА, реализован на 40-проводном кабеле, и многие его сигналы совпадают с 16-битной шиной AT А. Интерфейс XT-IDE можно рассматривать как подмножество AT А, хотя прямой совместимости нет. Ряд устройств ATA имеют джампер выбора режима XT/AT (в накопителях Seagate на это указывает окончание «АХ» в обозначении модели).

Регистры устройств

Каждое устройство ATA имеет стандартный набор регистров, адресуемых сигналами от хост-адаптера (CS0#, CS1#, DA2, DA1, DA0, DIOR# и DIOW#). Набор регистров (табл. 9.6) состоит из двух блоков, выбираемых сигналами CS0# и CS1#, из которых активным (низкий уровень, «0») может быть только один. В таблице приведены адреса регистров в пространстве ввода-вывода IBM PC-совместимого ПК для первого и второго каналов ATA. При обращении к регистрам сигнал DMACK# должен быть неактивным. Блок командных регистров служит для посылки команд устройству и чтения информации о его состоянии. Блок управляющих регистров используется для управления устройством и получения более подробной информации о его состоянии. На действительность содержимого регистров командного блока и альтернативного регистра состояния указывает нулевое значение бита BSY регистра состояния. Запись в регистры должна производиться лишь при BSY=0 и DRQ=0, кроме особо оговоренных случаев. Если устройство поддерживает управление энергопотреблением, в «спящем» режиме содержимое этих регистров недействительно и запись игнорируется, кроме особо оговоренных случаев.

Таблица 9.6. Регистры контроллеров устройств ATA

Адрес Сигналы адресации канала № (0 — низкий уровень, 1 — высокий) Назначение (R — чтение, W — запись)
1 2 CS0# CS1# DA2 DA1 DA0 
    1 1 x x x Нет обращения (шина данных в третьем состоянии)
    0 0 x x x Недопустимый адрес (шина данных в третьем состоянии)
3FX 37Х Control Block Registers — блок управляющих регистров
    1 0 0 X x Не используется (шина данных в третьем состоянии)
    1 0 1 0 x Не используется (шина данных в третьем состоянии)
3F6 376 1 0 1 1 0 R: Alternate Status (AS) — альтернативный регистр состояния
3F6 376 1 0 1 1 0 W: Device Control (DC) — регистр управления устройством
3F7 377 1 0 1 1 1 R: Drive Address (DA) — регистр адреса (не используется)¹
1FX 17Х Command Block Registers — блок командных регистров
1F0 170 0 1 0 0 0 R/W: Data (DR) — регистр данных
1F1 171 0 1 0 0 1 R: Error (ER) — регистр ошибок
1F1 171 0 1 0 0 1 W: Features (FR) — регистр свойств
1F2 172 0 1 0 1 0 R/W: Sector Count (SC) — регистр счетчика секторов
1F3 173 0 1 0 1 1 R/W: Sector Number (SN) — регистр номера сектора/LBA[7:0]²
1F4 174 0 1 1 0 0 R/W: Cylinder Low (CL) — регистр младшего байта номера цилиндра LBA[15:8]²
1F5 175 0 1 1 0 1 R/W: Cylinder High (CH) — регистр старшего байта номера цилиндра/LBA[23:16]²
1F6 176 0 1 1 1 0 R/W: Device/Head (D/H) — регистр номера устройства и головки/LBA[27:24]²
1F7 177 0 1 1 1 1 R: Status (SR) — регистр состояния
1F7 177 0 1 1 1 1 W: Command (CR) — регистр команд

¹ Рекомендуется, чтобы на сигнал чтения по этому адресу устройство не отвечало.

² Регистры сектора, цилиндра и головки в режиме LBA содержат указанные биты логического адреса.

Альтернативный регистр состояния AS (для первого канала адрес 3F6h, для второго — 376h) имеет те же биты, что и основной (см. ниже), но его чтение не приводит ни к каким изменениям состояния устройства.

Регистр управления устройством DC (3F6h, 376h) служит для программного сброса обоих устройств одновременно и управления разрешением прерывания выбранного устройства. Запись в этот регистр возможна в любой момент. Программный сброс через регистр DC должен отрабатываться ив состоянии Sleep.

Назначение битов регистра DC:

♦ биты [7:3] зарезервированы;

♦ бит 2 — SRST (Software Reset) — программный сброс, действует все время, пока бит не будет снят (оба устройства на шине воспринимают программный сброс одновременно);

♦ бит 1 — nIEN (Interrupt Enable) — инверсный бит разрешения прерывания (при нулевом значении бита выбранное устройство может вырабатывать сигнал INTRQ через тристабильный выход);

♦ бит 0–0.

Регистр адреса устройства DA (3F7h, 377h) использовался только в первой версии ATA для совместимости со старыми контроллерами, чтением этого регистра можно было определить адресованный привод и головку. Регистр выпадает из блока (он совпадает с диагностическим регистром состояния контроллера НГМД) и рекомендуется, чтобы устройство ATA не отвечало на чтение этого регистра. Если устройство отвечает на чтение, то оно не должно управлять битом DD7 во избежание конфликта с контроллером НГМД, у которого по этой линии передается бит смены носителя. Из-за несоблюдения этого требования могут возникать проблемы, когда контроллер (адаптер) ATA и контроллер НГМД находятся на разных платах.

Назначение битов регистра DA:

♦ бит 7 — (HiZ) — высокоимпедансный, при считывании не выдается на шину;

♦ бит 6 — nWTG — инверсный признак записи (во время физического выполнения записи на носитель бит нулевой);

♦ биты [5:2] — nHS[3:0] — номер головки (инверсные биты);

♦ биты [1:0] — nDS[1:0] — выбор устройства (инверсные биты): 10 — выбрано устройство 0, 01 — выбрано устройство 1.

Регистр данных DR (1F0h, 170h) может использоваться как 8-битный или 16-битный в зависимости от типа данных, передаваемых в текущей команде. Обращение к этому регистру происходит в режиме обмена PIO (когда сигнал DMACK# неактивен), при выполнении передач протокола PIO (PIO Out) хост производит запись в этот регистр, при PI (PIO In) — чтение. В режиме DMA обмен данными происходит через порт данных, при этом активны сигналы DMARQ и DMACK#, а сигналы CS0# и CS1# неактивны.

Регистр ошибок ER (1F1h, 171h) хранит состояние выполнения последней операции или диагностический код. После завершения операции на наличие ошибки указывает бит ERR регистра состояния.

Назначение битов регистра ER:

♦ бит 7 — зарезервирован;

♦ бит 6 — UNC (Uncorrectable Data Error) — неисправимая ошибка данных;

♦ бит 5 — МС (Media Changed) — смена носителя (после смены носителя первая команда обращения отвергается и устанавливается данный бит, после сброса бита следующие команды будут выполняться нормальным образом);

♦ бит 4 — IDNF (ID Not Found) — указывает на ненайденный идентификатор сектора;

♦ бит 3 — MCR (Media Change Requested) — индикатор запроса смены носителя (после обнаружения запроса смены носителя команды Door Lock будут возвращать бит ошибки ERR и бит MCR, бит MCR сбрасывается командами Door Unlock, Media Eject или сигналом аппаратного сброса);

♦ бит 2 — ABRT (Aborted Command) — устанавливается, если команда отвергнута как недействительная или в случае возникновения иной ошибки;

♦ бит 1 — TK0NF (Track 0 Not Found) — указывает на то, что по команде Recalibrate не удалось найти нулевой трек;

♦ бит 0 — AMNF (Address Mark Not Found) — не найден адресный маркер данных в заголовке сектора.

После выполнения любого сброса или команды Execute Device Diagnostic регистр ошибок содержит диагностический код. Трактовка битов, за исключением бита 2 (ABRT), может меняться в зависимости от исполненной команды.

Регистр свойств FR (1F1h, 171h) используется в зависимости от команды. В команде Set Features через него задается код подкоманды. Некоторые старые устройства могут игнорировать запись в этот регистр. До принятия спецификации ATA-2 в этот регистр помещали значение рекомендуемого номера цилиндра для предкомпенсации записи.

Регистр счетчика секторов SC (1F2h, 172h) содержит число секторов, участвующих в обмене. Хост инициализирует этот регистр до подачи команды (нулевое значение соответствует 256 секторам). По успешному завершению операции доступа к данным регистр должен обнулиться. Если команда завершилась с ошибкой, в регистре будет число секторов, которые должны быть переданы для успешного завершения предыдущего запроса. Команды Initialize Device Parameters или Write Same могут переопределить значение этого регистра. В некоторых командах регистр используется для передачи иных параметров.

Регистры номера сектора SN (1F3h, 173h) и номера цилиндра — младшего СL (1F4h, 174h) и старшего байта СН (1F5h, 175h) — имеют двоякое назначение в зависимости от выбранной системы адресации (CHS или LEA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при выполнении операции устройство поместит в них адрес, по которому встретилась ошибка.

Регистр номера устройства и головки D/H (1F6h, 176h) кроме хранения части адресной информации служит для выбора ведущего или ведомого устройства и метода адресации.

Назначение битов регистра D/H:

♦ биты 7 и 5 вплоть до ATA-3 должны были быть единичными, в ATA/ATAPI-4 их объявили устаревшими;

♦ бит 6 — L — единичным значением указывает на применение режима адресации LBA, при нулевом значении бита используется режим CHS;

♦ бит 4 — DEV (Device) — выбор устройства, при DEV=0 выбрано ведущее, при DEV=1 — ведомое;

♦ биты [3:0] имеют двоякое назначение в зависимости от выбранной системы адресации, в режиме CHS они содержат номер головки, в режиме LBA — старшие биты логического адреса.

Как и предыдущие (SN, CH и CL), адресный регистр D/H инициализируется хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. До принятия спецификации ATA-2 считалось, что адресные регистры должны модифицироваться и после успешного выполнения операции, отражая текущее значение адреса в носителе.

Регистр состояния SR (1F7h, 177h) отражает текущее состояние устройства в процессе выполнения команд: занятость, готовность, наличие ошибок и др. Чтение регистра состояния разрешает дальнейшее изменение его битов и сбрасывает запрос аппаратного прерывания.

Назначение битов регистра SR описано ниже.

♦ Бит 7 — BSY (Busy) указывает на занятость устройства, значение этого бита действительно всегда. При BSY=1 устройство игнорирует попытки записи в командный блок регистров, а чтение этих регистров дает неопределенный результат. При BSY=0 регистры командного блока доступны, в это время устройство не может устанавливать бит DRQ, изменять значение битов ЕRR и содержимое остальных командных регистров (могут меняться только значения битов IDX, DRDY, DF, DSC и CORR). Бит может устанавливаться на кратковременный интервал, так что хост может этого не заметить. Бит устанавливается:

 • при сбросе устройства;

 • по получении команды, если не устанавливается DRQ;

 • между передачами блоков данных в режиме PIO и после них, пока не обнулился DRQ;

 • во время передач данных в режиме DMA.

♦ Бит 6 — DRDY (Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Если состояние бита изменилось, оно не может вернуться обратно до чтения регистра состояния. При DRDY=0 устройство воспринимает только команды Execute Device Diagnostic и Initialize Device Parameters, прекращая выполнение текущей команды и сообщая об этом флагом ABRT в регистре ошибок и флагом ERR в регистре состояния. Другие команды приводят к непредсказуемым результатам. Устройства ATAPI сбрасывают бит по любому сбросу и команде Execute Device Diagnostic. Бит устанавливается устройством ATA, когда оно готово к выполнению всех команд. Устройство ATAPI устанавливает бит до завершения выполнения команд, за исключением команд Device Reset и Execute Device Diagnostic.

♦ Бит 5 — DF (Device Fault) — индикатор отказа устройства.

♦ Бит 4 — DSC (Device Seek Complete) — индикатор завершения поиска трека. В командах, допускающих перекрытие, бит называется SERV (Service Required) — устройство требует обслуживания.

♦ Бит 3 — DRQ (Data Request) — индикатор готовности к обмену словом или байтом данных.

♦ Бит 2 — CORR (Corrected Data) — индикатор исправленной ошибки данных.

♦ Бит 1 — IDX (Index) — индекс, трактуется особо каждым производителем.

♦ Бит 0 — ERR (Error) — индикатор ошибки выполнения предыдущей операции.

Дополнительная информация содержится в регистре ошибок. Если установлен бит ERR, до приема следующей команды, программного или аппаратного сброса устройство не изменит состояние этого бита, а также регистра ошибок, регистра количества секторов и регистров цилиндра, головки и номера сектора. Для команд Packet и Service бит называется CHK и служит признаком исключительной ситуации.

В стандарте ATA/ATAPI-4 для некоторых команд биты 4 и 5 могут иметь иное назначение, а биты 1 и 2 объявлены устаревшими.

Назначение регистра команд CR (1F7h, 177h) очевидно из названия. Устройство начинает исполнять команду сразу, как только ее код записан в данный регистр. Команда Device Reset выполняется устройством ATAPI независимо от состояния битов BSY и DRQ, и даже в состоянии Sleep.

Полный список команд ATA приведен в литературе [4, 5, 9].

Протоколы и режимы передачи данных

Программа общается с устройствами ATA через регистры, используя инструкции ввода-вывода IN и OUT. Для передачи данных с максимальной скоростью применяют программный доступ PIO к регистру данных инструкциями INSW/OUTSW или по каналу DMA. Тип обмена (PIO или DMA) определяется командой обращения. Программный доступ PIO обязателен для всех устройств, команды режима DMA устройствами могут не поддерживаться. Параметры различных режимов обмена приведены в табл. 9.7.

Таблица 9.7. Параметры режимов передачи

Режим передачи Минимальное время цикла, нс Скорость передачи, Мбайт/с Интерфейс
PIO mode 0 600 3,3 ATA
PIO mode 1 383 5,2 ATA
PIO mode 2 240 8,3 ATA
PIO mode 3 180 11,1 E-IDE, ATA-2 (используется IORDY)
PIO mode 4 120 16,6 E-IDE, Fast ATA-2 (используется IORDY)
Singleword DMA Mode 0 960 2,08 ATA
Singleword DMA Mode 1 480 4,16 ATA
Singleword DMA Mode 2 240 8,33 ATA
Multiword DMA Mode 0 480 4,12 ATA
Multiword DMA Mode 1 150 13,3 ATA-2
Multiword DMA Mode 2 120 16,6 FastАТА-2
Ultra DMA Mode 0 120¹ 16,6 ATA/ATAPI-4
Ultra DMA Mode 1 80¹ 25 ATA/ATAPI-4
Ultra DMA Mode 2 60¹ 33 ATA/ATAPI-4
Ultra DMA Mode 3 45¹ 44,4 ATA/ATAPI-5
Ultra DMA Mode 4 30¹ 66,6 ATA/ATAPI-5
Ultra DMA Mode 5 20¹ 100 ATA/ATAPI-6

¹ В пакете данных режима Ultra DMA за каждый такт передаются два слова данных, один по фронту синхронизирующего сигнала, другой по спаду. Период следования синхросигналов равен удвоенному времени цикла.

Программный доступ PIO (Programmed Input/Output) выполняется в виде следующих друг за другом операций чтения или записи в пространстве ввода-вывода по адресу регистра данных. Готовность устройства проверяется перед началом передачи блока, после чего хост производит серию операций в определенном темпе, который определяется выбранным режимом PIO Mode 0–4. Для каждого режима определены допустимые параметры временной диаграммы цикла обмена. Обмен PIO программно реализуется с помощью процессорных инструкций ввода-вывода строк REP INS или REP OUTS с занесенным в регистр СХ количеством слов (или байтов) в передаваемом блоке. Эти инструкции обеспечивают максимально возможную скорость обмена для данного процессора и системной шины. «Обуздать» процессор в соответствии с выбранным режимом входит в задачу адаптера ATА, который использует для удлинения цикла сигнал готовности шины (для ISA — IOCHRDY). Традиционные режимы 0, 1 и 2 имеют временные параметры, фиксируемые только хост-адаптером. Для прогрессивных режимов ATA-2 (PIO Mode 3 и выше) устройство может затормозить обмен, используя сигнал готовности IORDY. Программный обмен на все время передачи блока занимает и процессор, и системную шину.

Обмен по каналу DMA занимает исключительно шины ввода-вывода и памяти. Процессору требуется выполнить только процедуру инициализации канала, после чего он свободен до прерывания от устройства в конце передачи блока (этим могут воспользоваться многозадачные системы). Стандартные каналы DMA шины ISA для интерфейса ATA не используются из-за низкой пропускной способности. Высокопроизводительные адаптеры ATA имеют собственные более эффективные контроллеры. Режимы обмена по каналу DMA бывают одиночными и множественными. При одиночном режиме — Singleword DMA — устройство для передачи каждого слова вырабатывает сигнал запроса DMARQ и сбрасывает его по сигналу DMACK#, подтверждающему цикл обмена. При множественном режиме — Multiword DMA — на сигнал DMARQ хост отвечает потоком циклов, сопровождаемых сигналами DMACK#. Если устройство не справляется с потоком, оно может приостановить его снятием сигнала DMARQ, а по готовности установить его снова. Множественный режим позволяет развить более высокую скорость передачи.

В спецификации ATA/ATAPI-4 появился новый режим — Ultra DMA, позволяющий перешагнуть барьер в 16,6 Мбайт/с, свойственный традиционным режимам и используемому кабелю. При этом обеспечивается и контроль достоверности передачи данных по шине, чего не делалось ни в PIO, ни в стандартных режимах DMA (а зря!). Стандартом ATA-4 было определено 3 режима Ultra DMA (0, 1 и 2), впоследствии ввели новые; выбор режима осуществляется командой Set Features. В режимах Ultra DMA сигналы DMARQ и DMACK# сохраняют свое назначение, а вот смысл сигналов DIOR#, DIOW# и IORDY на время передачи пакета (Ultra DMA Burst) существенно меняется. В пакете данные на шине сопровождаются стробом, генерируемым источником данных, причем для синхронизации используются оба перепада сигналов. Это позволяет повысить пропускную способность шины до 33 Мбайт/с, не увеличивая частоту переключения сигналов сверх 8,33 с-1 (этот предел для обычного кабеля достигается в режиме PIO Mode 4 и Multiword DMA Mode 2). Каждое переданное слово участвует в подсчете CRC-кода, который передается хост-контроллером в конце пакета. Подсчет ведется и источником данных, и приемником.

При несовпадении принятого устройством кода с ожидаемым кодом фиксируется ошибка передачи, о которой устройство сообщает в конце исполнения команды. Передача в пакете может приостановиться, если приемник снимет сигнал готовности (DDMARDY# или HDMARDY#). Передача пакета может прекращаться по инициативе устройства (снятием сигнала) или хоста (сигналом STOP). Противоположная сторона должна подтвердить окончание цикла сигналом STOP или DMARQ соответственно.

Способ сообщения об ошибке передачи зависит от типа выполнявшейся команды. Для команд READ DMA, WRITE DMA, READ DMA QUEUED или WRITE DMA QUEUED в регистре ошибок ER устанавливается бит 7 (ICRC) и бит 2 (ABRT). Для пакетной команды REQUEST SENSE (уточнить состояние) в случае ошибки в регистре состояния SR устанавливается бит 0 (CHK) и сообщается ключ состояния (Sense key) 0Bh (команда отвергнута). Для всех других пакетных команд в случае ошибки устанавливается бит CHK и сообщается состояние 04h (аппаратная ошибка), а в последующих командах REQUEST SENSE сообщается значение ASC/АSСQ 08h/03h (ошибка CRC при связи с логическим устройством). Получив сообщение об ошибке, хост должен повторить команду. Если ошибки появляются постоянно, хост должен понизить скорость обмена (вплоть до выхода из режима Ultra DMA).

Тип режима обмена определяется возможностями хост-адаптера (и его драйвера), устройств и кабеля, и для каждого устройства он будет ограничен минимумом из максимальных возможностей всех этих компонентов. Как правило, режимы устанавливаются системой автоматически, но пользователю дается возможность при необходимости «подрезать крылья» контроллеру настройками BIOS Setup. Для работы в режимах Ultra DMA Mode 3 и выше требуется 80-проводный кабель, присутствие которого должно быть программно определено до включения этого режима обмена. Правда, в спецификации есть оговорка, что при двухточечном соединении (контроллер — устройство) для режимов 3 и 4 можно использовать 40-проводный кабель (без среднего разъема). Система не должна позволить пользователю применить высокоскоростные режимы на обычном кабеле, при этом желательно, чтобы она сообщала об обнаруженном несоответствии. Для определения типа кабеля есть несколько возможностей [4].

♦ Определение типа кабеля через хост-контроллер, для чего хост-контроллер должен иметь приемник сигнала CBLID#. После включения питания или аппаратного сброса хост ожидает завершения протокола сброса и затем подает команду идентификации Identyfу (Packet) Deviсе устройству 1. Устройство 1 стандарта ATA-3 и выше обязано после сброса снять сигнал PDIAG#/CBLID# не позднее, чем по приходу первой команды. Если обнаружено старое устройство, то протокол идентификации кабеля хостом работать не будет (но со старым устройством на шлейфе включать высокоскоростной режим и не стоит). Современное устройство снимет сигнал, и хост-адаптер сможет определить наличие 80-проводного кабеля по низкому уровню CBLID#. Некорректно работающее устройство может удержать низкий уровень сигнала, и в этом случае 40-проводный кабель будет ошибочно трактоваться как 80-проводный.

♦ Определение типа кабеля через устройство не требует дополнительного приемника в контроллере — линия PDIAG#/CBLID# в хост-контроллере заземляется через конденсатор емкостью 0,047 мкФ±20 %. Приемник сигнала идентификации кабеля располагается в устройстве. Для определения типа кабеля хост посылает команду Identify (Packet) Device устройству 1, чтобы оно освободило линию (сняло сигнал PDIAG#). Затем команда идентификации посылается устройству 0. Примерно через 30 мкс после получения команды устройство кратковременно обнуляет эту линию, затем отпускает и только через 20–30 мкс после этого считывает ее состояние и сообщает его в бите 13 слова 93. Линия подтягивается к +5 В резисторами 10 кОм, установленными в устройствах. Если используется 40-проводный кабель, то конденсатор в хост-адаптере не успеет перезарядиться и устройство сообщит нулевое значение бита. Если кабель 80-проводный, то конденсатор оказывается изолированным от линии PDIAG#/CBLID# в устройстве, и оно сообщит единичное значение бита. Если на хост- контроллере нет конденсатора, то даже 40-проводный кабель будет идентифицироваться как 80-проводный, что опасно при передаче данных. Если некорректно работающее ведомое устройство своевременно не отпустит линию, то даже 80-проводный кабель будет казаться 40-проводным.

♦ Комбинированный метод определения типа кабеля предполагает наличие на хост-контроллере и приемника сигнала CBLID#, и конденсатора (они друг другу не мешают). Решение о наличии 80-проводного кабеля принимается, только если это подтвердят оба метода. Возможная ошибка идентификации будет безопасной — при некорректном устройстве 1 на 80-проводном кабеле не будет включен высокоскоростной режим (наверное, это и к лучшему).

Правильный выбор режима обмена обеспечивает надежность и производительность. Все устройства поддерживают режим PIO Mode 0, в котором считывается блок параметров идентификации. В блоке имеются поля, описывающие режим обмена по умолчанию и более эффективные режимы обмена, поддерживаемые устройством. Командой Set Features можно изменить параметры режима. Иногда накопитель не обеспечивает надежной передачи данных в заявленном высокоскоростном режиме. Если данные начинают пропадать, первым делом следует понизить режим обмена.

BIOS определяет режим обмена с каждым устройством с учетом ограничений, заданных в Setup. Старые диски, не сообщающие своих параметров, могут не работать с новыми режимами PIO. На одном ленточном кабеле (канале ATА) могут присутствовать устройства с разным режимом обмена — спецификация это допускает. Однако реально могут возникать аппаратные или программные ограничения. Некоторые чипсеты не позволяют независимо программировать режим обмена для устройств канала. В таком случае при подключении двух разных устройств (например, PIO Mode 1 и 3) обмен с обоими устройствами будет происходить со скоростью меньшего (PIO Mode 1). Поэтому не рекомендуется к одному каналу ATA (порту IDE) подключать быстрый винчестер и медленный CD-ROM. Иногда завязка режимов обмена двух устройств обусловлена ограниченным набором параметров конфигурации в BIOS. Быстрые режимы множественного обмена по DMA реализуются только драйверами ОС. «Глупый» драйвер может попытаться навязать медленный режим обоим устройствам канала, так что смешивать разные устройства не стоит и по этой причине.

Протокол обмена PIO хорош только для однозадачных ОС. Для многозадачных ОС больший интерес представляет обмен по протоколу DMA, если, конечно, поддерживаемый режим обеспечивает приемлемую скорость обмена. С точки зрения драйвера есть различия лишь между типами режимов (PIO, DMA и UltraDMA); аппаратные нюансы режимов внутри типа влияют только на скорость передачи. Режим UltraDMA значительно отличается от обычного DMA необходимостью обработки возможных ошибок передачи по шине; в случае постоянных ошибок драйвер должен понизить режим UltraDMA (вплоть до перехода на традиционные режимы).

Протокол взаимодействия хоста с устройством выглядит следующим образом.

1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита ВSY. Если присутствуют два устройства, хост обращается к ним «наугад» — состояние будет сообщаться последним выбранным устройством.

2. Дождавшись освобождения устройства, хост записывает в регистр D/H байт, у которого бит DEV указывает на адресуемое устройство. Здесь кроется причина невозможности параллельной работы двух устройств на одной шине ATА: обратиться к устройству можно только после освобождения обоих устройств.

3. Хост читает основной или альтернативный регистр состояния адресованного устройства, дожидаясь признака готовности (DRDY=1).

4. Хост заносит требуемые параметры в блок командных регистров.

5. Хост записывает код команды в регистр команд.

6. Устройство устанавливает бит BSY и переходит к исполнению команды.

Дальнейшие действия зависят от протокола передачи данных, заданного командой.

Для команд, не требующих передачи данных, следующий шаг (шаг 7) — последний. Завершив исполнение команды, устройство сбрасывает бит BSY и устанавливает запрос прерывания (если он не запрещен). К этому моменту в регистрах состояния и ошибок уже имеется информация о результате исполнения. Единичное значение бита BSY может «промелькнуть» между шагами 6 и 7 так быстро, что хост его не зафиксирует, но для фиксации факта выполнения команды или ее части предназначен запрос прерывания.

Для команд, требующих чтения данных в режиме PIO, процедура продолжается следующим образом.

7. Подготовившись к передаче первого блока данных по шине ATA, устройство устанавливает бит DRQ. Если была ошибка, она фиксируется в регистрах состояния и ошибок. Далее устройство сбрасывает бит BSY и устанавливает запрос прерывания (если он не запрещен).

8. Зафиксировав обнуление бита BSY (или по прерыванию), хост считывает регистр состояния, что приводит к сбросу прерывания от устройства.

9. Если хост обнаружил единичное значение бита DRQ, он производит чтение первого блока данных в режиме PIO (адресуясь к регистру данных). Если обнаружена ошибка, считанные данные могут быть недостоверными. После передачи блока данных возможно одно из следующих действий:

 • если на шаге 8 ошибка не обнаружена и требуется передача следующего блока, устройство устанавливает бит BSY и данная последовательность повторяется с шага 7;

 • если есть ошибка или передан последний блок данных, устройство сбрасывает бит DRQ и выполнение команды завершается.

Для операций записи данных после шага 6 для устройства начинается активная фаза записи на носитель, что отмечается установкой бита BSY.

Для команд, требующих записи данных в режиме PIO, процедура после шага 6 продолжается следующим образом.

7. Подготовившись к приему первого блока данных по шине ATА, устройство устанавливает бит DRQ (если нет ошибок) и сбрасывает бит BSY. Если была ошибка, она фиксируется.

8. Зафиксировав обнуление бита BSY, хост считывает регистр состояния.

9. Если хост обнаружил единичное значение бита DRQ, он производит запись первого блока данных в режиме PIO по адресу в регистре данных.

10. После передачи блока данных возможно одно из следующих действий:

 • если обнаружена ошибка, устройство сбрасывает бит DRQ, устанавливает запрос прерывания и выполнение команды завершается, а переданные по шине данные остаются устройством необработанными (не записываются на носитель);

 • если ошибка не обнаружена, устройство устанавливает бит BSY и переходит к следующему шагу.

11. Устройство обрабатывает принятый блок данных, затем:

 • если нет ошибок и обработанный блок — последний, устройство сбрасывает бит BSY и устанавливает запрос прерывания, на чем выполнение команды успешно завершается;

 • если обнаружена ошибка, выполнение команды завершается таким же об разом, но с установкой битов ошибок;

 • если нет ошибок и требуется передача следующего блока, процедура продолжается.

12. По готовности приема следующего блока устройство устанавливает бит DRQ, сбрасывает бит BSY и устанавливает запрос прерывания.

13. По обнулении бита BSY (или по прерыванию) хост считывает регистр состояния.

14. Обнаружив бит DRQ, хост выполняет запись очередного блока в регистр данных, и последовательность повторяется с шага 11.

Команды с передачей данных в режиме DMA выполняются похожим образом, но с некоторыми исключениями.

♦ Вместо PIO используется прямой доступ к памяти. Хост должен инициализировать канал DMA до записи кода в регистр команд, чтобы при появлении сигнала DMARQ начался обмен.

♦ Запрос прерывания даже в многосекторных передачах производится один раз — по выполнении команды.

Адаптеры и контроллеры шины ATA

Простейший адаптер ATA содержит только буферы сигналов шины и дешифратор зоны адресов. Все регистры контроллера и схемы кодирования размещены в самом устройстве IDE. Шина ATA требует выделения системных ресурсов — двух областей портов ввода-вывода и линии прерывания; дополнительно может потребоваться канал DMA. Интерфейсу ATA первого канала выделили ресурсы, ранее использовавшиеся контроллером жестких дисков. Второму каналу назначили ресурсы альтернативного контроллера жестких дисков. Позже определили ресурсы еще для двух каналов (табл. 9.8). Традиционному контроллеру жестких дисков выделялся канал DMA3, но он является 8-битным, в то время как шина ATA требует 16-битного канала DMA. Производительности стандартных каналов DMA для шины ATA явно недостаточно.

Таблица 9.8. Системные ресурсы каналов ATA

Канал CS0 CS1 IRQ
1 1F0h-1F7h 3F6h-3F7h 14
2 170h-177h 376h-377h 15 или 10
3 1E8h-1Efh 3Eeh-3Efh 12 или 11
4 168h-16Fh 36Eh-36Fh 10 или 9

На системных платах с шиной PCI стандартом является установка двухканального адаптера, занимающего ресурсы каналов 1 и 2. В идеальном варианте двухканальные контроллеры имеют шины, полностью изолированные друг от друга буферными и логическими схемами. В самом дешевом варианте они используют общие буферы для линий данных и управляющих сигналов и отдельные только для некоторых сугубо индивидуальных сигналов. С точки зрения логики здесь все в порядке, но следует учитывать нагрузочную способность (влияние паразитных параметров): суммарная длина обоих ленточных кабелей не должна превышать 46 см, а суммарная емкость каждой линии со всеми устройствами не должна превышать 35 пФ. Иначе на высокоскоростных режимах обмена возможны неконтролируемые искажения передаваемых данных. Стандарт ATA/ATAPI-6 предписывает следующее.

♦ В каждом канале должны быть собственные формирователи управляющих сигналов DIOR#, DIOW# и приемник IORDY (рекомендуемый вариант); либо должны быть раздельные формирователи CS0# и CS1# (второй вариант логичнее, но хуже в плане помех). Такая конфигурация позволяет использовать все режимы обмена, кроме Ultra DMA.

♦ Для поддержки Ultra DMA 0, 1 и 2 (до 33 Мбайт/с) к этим требованиям добавляется наличие раздельных формирователей сигнала DMACK#.

♦ Для поддержки Ultra DMA 3 и выше (44-100 Мбайт/с) все линии должны иметь раздельные приемопередатчики. Общими могут быть только сигналы RESET#, INTRQ, DA(2:0), CS0#, CS1# и DASP#, но стандарт этого не рекомендует.

Поскольку скорость программного обмена задается хост-адаптером, интересно индивидуальное программирование режимов PIO Mode для каждого канала/устройства. Ряд чипсетов этого не допускает и при инициализации назначает общий минимальный режим. В результате подключение «тихоходного» устройства замедляет обмен быстрого соседнего устройства.

Современные системные платы оснащаются высокопроизводительными контроллерами шины ATА, обеспечивающими прямое управление шиной PCI (bus mastering) при обмене с устройствами в режимах DMA и Ultra DMA. Прямое управление шиной повышает суммарную производительность компьютера в многозадачных и многопоточных операционных системах. Сами по себе режимы DMA не дают выигрыша в скорости обмена по шине ATA — только режимы UltraDMA Mode 1 и выше превосходят по скорости режим PIO Mode 4 (см. табл. 9.7). Однако обмен в режиме DMA значительно меньше загружает центральный процессор компьютера, и параллельно с дисковым обменом процессор может заниматься обработкой других потоков (задач). В однозадачных (и однопоточных) системах во время дискового обмена процессор все равно ничем другим не занимается, поэтому для них хорош и режим PIO Mode. Для реального использования режима прямого управления в операционной системе должен быть установлен специальный драйвер Bus-Master, соответствующий используемому контроллеру ATA (как правило, чипсету системной платы). Стандартный контроллер PCI IDE описан ниже. Операционная система MS-DOS режимы DMA (и прямое управление) не использует. Для многозадачных ОС (Windows 9x/NT/2000, OS/2, Unix, Linux, NetWare…) драйверы могут входить в комплект поставки ОС или поставляться производителями системных плат (контроллеров ATA). И наконец, режим DMA должны поддерживать подключаемые устройства. Практически все современные устройства поддерживают Ultra DMA (или Multiword DMA), но если в паре с таким устройством к одному контроллеру подключено старое устройство, не поддерживающее этот режим, то прогрессивные режимы могут оказаться недоступными (по вине чипсета или драйвера) и для нового устройства.

ВНИМАНИЕ

Режим UltraDMA привлекателен не только скоростью и разгрузкой процессора, но и контролем достоверности передач по шине ATA (правда, этот контроль корректно работает не со всеми драйверами).

Поскольку контроллеры ATA подключаются к 32-разрядной шине PCI, в них ввели возможность обращения к регистру данных ATA двойными словами. При этом за одну 32-битную операцию процессора и шины PCI по шине ATA последовательно передаются два 16-битных слова. Возможностью 32-разрядного доступа к регистру данных можно управлять через параметр IDE 32-bit Transfer (Enable/Disable) BIOS Setup.

Более сложные контроллеры (отдельные карты расширения) могут иметь собственную кэш-память и управляющий процессор. Они могут аппаратно поддерживать «зеркальные» диски и организовывать RAID-массивы ATA-дисков. Некоторые адаптеры позволяют соединять несколько физических дисков в один логический на уровне вызовов BIOS.

Адаптеры ATA одно время часто размещали на звуковых картах (для подключения CD-ROM). По умолчанию им назначают ресурсы канала 3 или 4. К этим каналам можно подключать винчестеры, но будет ли их там искать BIOS во время теста POST — вопрос. Современные версии BIOS позволяют хранить конфигурационные параметры четырех жестких дисков, более старые версии — двух. Четыре канала ATA физически позволяют подключить до восьми накопителей, но работа с ними лимитирована программными ограничениями.

Существуют гибридные адаптеры для подключения ATA HDD к шинам XT и MCA или, например, к LPT-порту. В последнее время получили распространение переходные адаптеры, позволяющие подключать устройства ATA/ATAPI к шине USB. При использовании USB 2.0 простота подключения внешнего устройства будет сочетаться и с высокой скоростью передачи данных.

Контроллер PCI IDE

Для шины PCI существует стандартный вариант интерфейса контроллера IDE (название «ATA» здесь не очень уместно, поскольку оно ориентировано на ISA-подобную шину). Спецификация «PCI IDE Controller Specification» появилась еще в 1994 году, она описывала реализацию контроллера, совместимого с интерфейсом ATA. По сравнению с обычным контроллером, у данного контроллера в блоке управляющих регистров имеется лишь один адрес (устаревший регистр адреса недоступен). Чуть позже была опубликована спецификация «Programming Interface for Bus Master IDE Controller», описывающая работу с устройствами в режиме DMA с прямым управлением шиной. Двухканальный контроллер является одной функцией PCI; четырехканальный контроллер будет уже многофункциональным устройством PCI. Для контроллера определены два режима распределения ресурсов:

♦ режим совместимости (compatibility), в котором каналам выделяются традиционные области адресов ввода-вывода и линии прерываний;

♦ естественный режим PCI (native-PCI), в котором базовые адреса блоков регистров и линии прерывания задаются в регистрах конфигурационного пространства и могут быть произвольно перемещаемы в любую область.

Распределение ресурсов для контроллера приведено в табл. 9.9. В режиме совместимости контроллер может работать только на первичной шине PCI, поскольку мост PCI-PCI не будет транслировать обращения по стандартным адресам на другую шину. В режиме PCI с перемещаемыми ресурсами контроллер может находиться на любой шине. Конкретный контроллер может поддерживать изменение режима или один из режимов. Если контроллер по умолчанию (или всегда) работает в режиме совместимости, то для ПО он «прозрачен» — работа с ним не отличается от традиционного контроллера ATA. Текущий режим и возможность его смены отражается в байте программного интерфейса, являющегося последним элементом идентификатора класса устройства. Байт интерфейса имеет следующее назначение битов:

♦ бит 7 (bus mastering) — возможность работы в режиме прямого управления;

♦ биты 6:4 — 000 (признак стандартного интерфейса, соответствующего PCI IDE Controller Specification);

♦ бит 3 — индикатор программируемости режима для второго канала (возможности изменения бита 2);

♦ бит 2 — режим второго канала: 0 — совместим со стандартным контроллером ATA IDE, 1 — PCI IDE;

♦ бит 1 — индикатор программируемости режима для первого канала (возможности изменения бита 0);

♦ бит 0 — режим первого канала: 0 — совместим с ATA IDE, 1 — PCI IDE.

Таблица 9.9. Ресурсы контроллера PCI IDE

Ресурс Режим совместимости: ресурсы для каналов Естественный режим PCI: базовый адрес (смещение в конфигурационном пространстве) для канала 
1 2 1 2
Блок командных регистров 1F0h-1F7h 170h-177h 10h 14h
Блок управляющих регистров 3F6h 376h 18h 1Ch
Прерывание 14 15    

Типовой контроллер имеет класс 01:01:80h и реализован в чипсетах большинства современных системных плат. Контроллер выглядит как расширение стандартного ATA-контроллера, обеспечивающего доступ к регистрам устройств ATA/ATAPI по известным адресам. Расширение касается прямого управления шиной PCI (bus mastering), благодаря которому можно реализовать обмен данными с устройствами в режимах DMA. Контроллер позволяет использовать все доступные ему режимы обмена PIO (3,3-16,6 Мбайт/с), режимы DMA в стиле контроллера 8237А (2-16,6 Мбайт/с) и режимы UltraDMA (16,6-100 Мбайт/с). Все настройки временных параметров выполняются через конфигурационные регистры PCI, их состав может быть специфичным. Однако с этими регистрами должна иметь дело только процедура POST, устанавливая для каждого обнаруженного устройства ATA/ATAPI оптимальные режимы PIO и DMA/UltraDMA. В эти настройки может вмешаться пользователь, установив какие-либо ограничивающие параметры в BIOS Setup. В итоге после конфигурирования во время POST при обращении программ к устройствам остается выбор лишь между PIO и DMA (если устройство поддерживает DMA). Для обмена в режиме PIO никаких специальных действий не требуется, программа просто выполняет чтение или запись в регистр данных командами REP INS/OUTS. Для обмена в режиме DMA требуется «зарядить» и запустить контроллер прямого управления, о чем и пойдет речь ниже.

Двухканальный контроллер имеет 16-байтный блок регистров, расположенный в пространстве портов ввода-вывода. Базовый адрес блока хранится в конфигурационном пространстве устройства по смещению 20h (берутся младшие 16 бит двойного слова). Расположение регистров в блоке показано в табл. 9.10, имена регистров имеют префикс BMI (Bus Master IDE) и окончание P (Primary) для первого канала, S (Secondary) — для второго; в описании будем использовать окончание x (любой канал).

Таблица 9.10. Блок регистров контроллера PCI IDE

Смещение для канала Длина, байт Регистр для первого/второго каналов
1 2
0 8 1 BMICP/BMICS (RW) — регистр команд : бит 0: 1 — запуск, 0 — останов; бит 3 — направление: 0 — чтение памяти, 1 — запись в память; биты 1–2, 3–7 — резерв (0)
1 9 1 Резерв (0)
2 0Ah 1 BMISP/BMISS — регистр состояния : бит 0 (R/O) — активность канала; бит 1 (RWC) — ошибка обмена по PCI; бит 2 (RWC) — запрос прерывания от устройства; биты 3–4 — резерв (0); бит 5 (RW) — устройство 0 поддерживает DMA; бит 6 (RW) — устройство 1 поддерживает DMA; бит 7 — признак симплексного режима (1, если каналы не могут работать одновременно)
3 0Bh 1 Резерв (0)
4 0Ch 4 BMIDPTP/BMIDPTS (RW) — адрес таблицы дескрипторов

Регистр команд BMICx, доступный по чтению и записи, используется для запуска контроллера и задания направления передачи. Запуск осуществляется при переходе бита 0 из нуля в единицу, останов для текущего сеанса необратим. Останов контроллера (сброс бита) обычно выполняют по окончании выполнения команды ATA/ATAPI (по прерыванию). Преждевременный останов приведет к ошибке выполнения команды с соответствующим сообщением. Направление должно быть задано до запуска контроллера, изменять его «на ходу» нельзя.

В регистре состояния BMISx биты 1 и 2 устанавливаются аппаратно, а сбрасываются при записи байта с единичным значением в соответствующем бите. После сброса бита запроса прерывания он снова установится только по следующему фронту сигнала прерывания от устройства. Биты 5 и 6 устанавливаются программно, обычно когда POST определяет возможности подключенных устройств и программирует режимы контроллера. Регистр состояния должен быть прочитан после завершения выполнения команды для определения успешности операций на шине PCI.

В регистр BMIDPTx заносят адрес таблицы дескрипторов областей памяти, с которыми производится обмен данными. Контроллер способен при чтении памяти собрать поток данных из произвольного числа областей (gathered read), а при записи «разбросать» поток по этим областям (scatter write). Такая возможность встречалась еще в EISA-системах, она позволяет преодолевать барьеры на границах страниц, свойственные стандартным контроллерам DMA и страничной переадресации процессоров х86. Каждый дескриптор занимает 8 байтов:

♦ байты 0–3 (двойное слово) — физический адрес начала области (четный);

♦ байты 4–5 (слово) — счетчик байтов (четный, 0000 соответствует 65 536);

♦ байты 6–7 (слово) — признак конца таблицы (бит 15), биты 0-14 не используются (0).

Каждая область может быть расположена в произвольном месте памяти (кроме отображаемой на шину ISA) и иметь произвольный размер, но не должна пересекать границы страниц размером 64 Кбайт. Таблица дескрипторов должна быть выровнена по границе двойного слова и не должна пересекать границы страниц, имеющих размер 64 Кбайт. Число дескрипторов в таблице произвольно, последний должен содержать признак конца таблицы. Обмен начинается с области, описанной первым дескриптором; за ней идет область следующего дескриптора и так далее до последнего. Контроллер остановится по исчерпании счетчика в последнем дескрипторе или по инициативе устройства, если в обмене должно участвовать меньшее число данных. Если устройству данных не хватит, оно укажет на ошибку при завершении команды.

После запуска контроллера второй и нулевой биты регистра состояния отражают следующие ситуации:

♦ 0,1 — происходит обмен с памятью, прерывания по концу операции еще нет;

♦ 1,0 — обмен завершен, переданный объем соответствует объему описанных буферов (нормальное завершение);

♦ 1,1 — устройство завершило обмен, но по команде ATA передано меньше данных, чем описано в таблицах (допустимое завершение);

♦ 0,0 — ошибка на шине (бит 1), или в таблицах описано меньше данных, чем в команде ATA.

Конфигурирование устройств

Устройства ATA перед подключением к шине должны быть корректно сконфигурированы. Конфигурирование подразумевает выбор типа интерфейса и определение адреса устройства. Тип интерфейса — XT или AT — определяется моделью накопителя. В изделиях фирмы Seagate, например, тип обозначается последней буквой в шифре модели: А — ATA (16 бит,) X — для XT (8 бит), а сочетание АХ означает возможность выбора AT/XT с помощью джампера.

Существует два способа задания адреса устройства — кабельной выборкой или явным заданием адреса на каждом из устройств. Режим кабельной выборки включается перемычкой CS (Cable Select — кабельная выборка). В этом случае оба устройства на шине конфигурируются одинаково — в режим CS, а адрес устройства определяется его положением на специальном ленточном кабеле (см. рис. 9.3). Кабельная выборка будет работать, если она поддерживается и задана на всех устройствах канала, включая хост-адаптер, который обеспечивает заземление контакта 28. При этом способе задания адресов синхронизация шпинделей накопителей через тот же провод контакта 28 исключается (актуально в RAID-массивах). Кабельная выборка применяется редко. Ее условное преимущество — унификация конфигурирования устройств, а недостатком является привязка физического положения устройств к кабелю — ведущее устройство должно быть ближе к адаптеру, чем ведомое. Возможно подключение адаптера к среднему разъему, а устройств — к крайним, но это не всегда удобно.

Более распространен режим явной адресации, при котором используется обычный «прямой» кабель (см. рис. 9.2). В этом случае перемычка CS не устанавливается, а адрес устройства задается перемычками, состав которых варьируется. В принципе, достаточно лишь указать устройству его номер (0/1), но в устройствах, разработанных до стандарта ATА, ведущему устройству «подсказывали» о наличии ведомого (по интерфейсу ATA оно могло бы определить это само по сигналу DASP#). Ниже перечислены комбинации джамперов, которые можно увидеть на устройствах IDE.

♦ M/S (Master/Slave — ведущее/ведомое) — переключатель адреса. Если на шине присутствует одно устройство, оно должно быть сконфигурировано как ведущее. Если на шине два устройства — одно должно быть ведущим, другое ведомым. Иногда джампер обозначается как C/D (диск C:/диск D:), но для второго канала IDE такое название некорректно. Когда появились первые IDE-диски емкостью 1 Гбайт, для преодоления барьера в 504 Мбайт некоторые модели допускали конфигурирование в виде двух устройств (0 и 1) половинной емкости. В таком режиме на их ленточный кабель IDE второе физическое устройство подключать нельзя.

♦ SP (Slave Present), DSP (Drive Slave Present), Master but Slave is not ATA-compatible или Master but Slave uses only PDIAG-signal — устанавливается на ведущем устройстве для указания на присутствие ведомого. Если переключатель установлен, а ведомое устройство не подключено, POST даст сообщение об ошибке. Джампер применяется для дисков, не использующих сигнал DASP#.

♦ Single Drive — джампер, устанавливаемый на устройстве, если оно единственное на шине (встречается на дисках Western Digital). Устройство будет ведущим.

♦ ACT (Drive Active) — джампер, соединяющий линию DASP# с формирователем сигнала активности устройства. Устанавливается на устройстве 0, встречается редко.

♦ HSP — джампер, заземляющий линию DASP# (положение, взаимоисключающее ACT). Устанавливается на устройстве 1 для сигнализации о его присутствии (встречается редко).

Для полностью ATA-совместимых дисков правильно сконфигурированные устройства определяются автоматически. Современные контроллеры ATA позволяют подключать даже единственное устройство как ведомое — интерфейсные функции ведущего берет на себя контроллер.

Разобраться с джамперами старых устройств трудно, если нет документации, однако обширная база данных по разным моделям встроена в справочный файл утилиты Disk Manager. У современных устройств лишние джамперы упразднили, а существующие комментируются на наклейке (шильдике). Если джамперы устанавливаются рядом с интерфейсным разъемом, вероятно, они расположены в соответствии со стандартом ATA (см. рис. 9.5).

ВНИМАНИЕ

Следует учитывать, что перестановка джамперов часто воспринимается устройством только по включении питания. Кроме того, установка на один ленточный кабель двух разнотипных устройств, если они не являются ATA-устройствами, часто невозможна.

 

9.2.2. Последовательный интерфейс Serial ATA

Параллельный интерфейс ATA исчерпал свои ресурсы пропускной способности, достигшей 100 Мбайт/с в режиме UltraDMA Mode 5. Для дальнейшего повышения пропускной способности интерфейса (но, конечно же, не самих устройств хранения, которые имеют гораздо меньшие внутренние скорости обмена с носителем) было принято решение о переходе на последовательный интерфейс. Цель перехода — улучшение и удешевление кабелей и коннекторов, улучшение условий охлаждения устройств внутри системного блока (избавление от широкого шлейфа), обеспечение возможности разработки компактных устройств, облегчение конфигурирования устройств пользователем. Попутно расширяется адресация блоков (достижение предельной емкости адресации ATA в 137 Гбайт не за горами). Спецификация Serial ATA версии 1.0 опубликована в 2001 г. и доступна в Сети по адресу www.serialata.org. Сейчас уже ведутся работы над новой спецификацией Serial ATA II с большей пропускной способностью и специальными средствами для поддержки сетевых устройств хранения. Приведенная ниже информация относится к версии 1.0.

Интерфейс Serial ATA является хост-центрическим, в нем определяется только взаимодействие хоста с каждым из подключенных устройств, а взаимодействие между ведущим и ведомым устройствами, свойственное традиционному интерфейсу ATA, исключается. Программно хост видит множество устройств, подключенных к контроллеру, как набор каналов ATA, у каждого из которых имеется единственное ведущее устройство. Имеется возможность эмуляции пар устройств (ведущее — ведомое) на одном канале, если такая необходимость возникнет. Программное взаимодействие с устройствами Serial ATA практически совпадает с прежним, набор команд соответствует ATA/ATAPI-5. В то же время аппаратная реализация хост-адаптера Serial ATA сильно отличается от примитивного (в исходном варианте) интерфейса ATA. В параллельном интерфейсе ATA хост-адаптер был простым средством, обеспечивающим программное обращение к регистрам, расположенным в самих подключенных устройствах. В Serial ATA ситуация иная: хост-адаптер имеет блоки так называемых «теневых» регистров (Shadow Registers), совпадающих по назначению с обычными регистрами устройств ATA. Каждому подключенному устройству соответствует свой набор регистров. Обращения к этим теневым регистрам вызывают процессы взаимодействия хост-адаптера с подключенными устройствами и исполнение команд.

В стандарте рассматривается многоуровневая модель взаимодействия хоста и устройства, где прикладным уровнем является обмен командами, информацией о состоянии и хранимыми данными. На физическом уровне для передачи информации между контроллером и устройством используются две пары проводов. Данные передаются кадрами, транспортный уровень формирует и проверяет корректность информационных структур кадров (Frame Information Structure, FIS). Для облегчения высокоскоростной передачи на канальном уровне данные кодируются по схеме 8B/10B (8 бит данных кодируются 10-битным символом) и скремблируются, после чего по физической линии передаются по простейшему методу NRZ (уровень сигнала соответствует передаваемому биту). Между канальным и прикладным уровнем имеется транспортный уровень, отвечающий за доставку кадров. На каждом уровне имеются свои средства контроля достоверности и целостности.

В первом поколении Serial ATA данные по кабелю передаются со скоростью 1500 Мбит/с, что с учетом кодирования 8B/10B обеспечивает скорость 150 Мбайт/с (без учета накладных расходов протоколов верхних уровней). В дальнейшем планируется повышать скорость передачи, и в интерфейсе заложена возможность согласования скоростей обмена по каждому интерфейсу в соответствии с возможностями хоста и устройства, а также качеством связи. Хост-адаптер имеет средства управления соединениями, программно эти средства доступны через специальные регистры Serial ATA.

В стандарте предусматривается управление энергорежимом интерфейсов. Каждый интерфейс кроме активного состояния может находиться в состояниях PARTIAL и SLUMBER с пониженным энергопотреблением, для выхода из которых требуется заметное время (10 мс).

Команды, требующие передачи данных, могут исполняться в различных режимах обмена. Обращение в режиме PIO и традиционный способ обмена по DMA (legacy DMA) выполняется аналогично привычному интерфейсу ATA. Однако внутренний протокол обмена между хост-адаптером и устройствами позволяет передавать между ними разноплановую информацию (структуры FIS определены не только для команд, состояния и собственно хранимых данных). В приложении D к спецификации описывается весьма своеобразный способ обмена по DMA, который предполагается основным (First-party DMA) для устройств Serial ATA. В традиционном контроллере DMA адаптера ATA для каждого канала имеется буфер, в который перед выполнением операции обмена загружают дескрипторы блоков памяти, участвующей в обмене (см. п. 9.2.1). Теперь же предполагается, что адресная информация, относящаяся к оперативной памяти хост компьютера, будет доводиться до устройства хранения, подключенного к адаптеру Serial ATA. Эта информация из устройства хранения при исполнении команд обмена выгружается в контроллер DMA хост-адаптера и используется им для формирования адреса текущей передачи. Мотивы и полезность этого нововведения не совсем понятны; расплатой за некоторое упрощение хост-адаптера (особенно многоканального) является усложнение протокола и расширение функций, выполняемых устройством хранения. Все-таки более привычно традиционное разделение функций, при котором задача устройств внешней памяти — хранить данные, «не интересуясь» тем, в каком месте оперативной памяти компьютера они должны находиться при операциях обмена.

Физический интерфейс Serial ATA

Последовательный интерфейс ATA, как и его параллельный предшественник, предназначен для подключений устройств внутри компьютера. Длина кабелей не превышает 1 м, при этом все соединения радиальные, каждое устройство подключается к хост-адаптеру своим кабелем. В стандарте предусматривается и непосредственное подключение устройств к разъемам кросс-платы с возможностью «горячей» замены. Стандарт определяет новый однорядный двухсегментный разъем с механическими ключами, препятствующими ошибочному подключению. Сигнальный сегмент имеет 7 контактов (S1-S7), питающий — 15 (P1-Р15); все контакты расположены в один ряд с шагом 1,27 мм. Назначение контактов приведено в табл. 9.11. Малые размеры разъема (полная длина — около 36 мм) и малое количество цепей облегчают компоновку системных плат и карт расширения. Питающий сегмент может отсутствовать (устройство может получать питание и от обычного 4-контактного разъема ATA). Вид разъемов приведен на рис. 9.6. Для обеспечения «горячего» подключения контакты разъемов имеют разную длину, в первую очередь соединяются контакты «земли» Р4 и Р12, затем остальные «земли» и контакты предзаряда конденсаторов в цепях питания P3, Р7 и Р13 (для уменьшения броска потребляемого тока), после чего соединяются основные питающие контакты и сигнальные цепи.

Таблица 9.11. Разъем Serial ATA

Контакт Цепь Назначение
S1 GND Экран
S2 А+ Дифференциальная пара сигналов А
S3 А- Дифференциальная пара сигналов А
S4 GND Экран
S5 В- Дифференциальная пара сигналов В
S6 В+ Дифференциальная пара сигналов В
S7 GND Экран
Ключи и свободное пространство
P1 V33 Питание 3,3 В
P2 V33 Питание 3,3 В
P3 V33 Питание 3,3 В, предзаряд
Р4 GND Общий
P5 GND Общий
P6 GND Общий
Р7 V5 Питание 5 В, предзаряд
Р8 V5 Питание 5 В
P9 V5 Питание 5 В
P10 GND Общий
Р11 Резерв  
Р12 GND Общий
Р13 V12 Питание 12В, предзаряд
P14 V12 Питание 12 В
Р15 V12 Питание 12 В

Рис. 9.6. Разъемы Serial ATA: a — полный разъем на устройстве, б — сигнальный сегмент кабельного разъема, в — питающий сегмент кабельного разъема, г — сигнальный сегмент разъема хост-адаптера, д — разъем хоста для непосредственного подключения устройства

Регистры Serial ATA

Каждое устройство, подключенное к адаптеру Serial ATA, представляется тремя блоками регистров, два из которых соответствуют традиционным регистрам ATA (см. п. 9.2.1) и называются «теневыми», третий блок — новый. Привязка адресов блоков к адресному пространству хоста стандартом не регламентируется; для PCI-контроллера блоки задаются регистрами конфигурационного пространства и «теневые» регистры могут располагаться по стандартным адресам ATA.

В блоке управляющих регистров, как и в ATA, используется лишь один (AS для чтения, DC для записи). В блоке командных регистров разрядность регистров SC, SN, CL и СН расширена до 16 бит, назначение младших байтов сохранилось. В режиме LBA старшие байты регистров SN, CL и СН несут биты логического адреса [24:31], [32:39] и [40:47] соответственно. В регистре D/H бит DEV игнорируется (при эмуляции пар устройств на одном канале бит DEV используется для выбора устройства). Из спецификации не совсем ясно, используются ли младшие биты D/H для задания бит LBA[27:24], поскольку эти же биты фигурируют в старшем байте SN.

Новый блок регистров SCR (Serial ATA Status and Control registers) состоит из 16 смежных 32-разрядных регистров SCR0-SCR15, из которых пока определены лишь 3 (остальные зарезервированы).

Регистр SStatus (SCR0) — регистр текущего состояния интерфейса хост адаптера (только чтение).

♦ Биты [3:0] — поле DET, подключение устройств:

 • 0000 — устройство не обнаружено, физической связи нет;

 • 0001 — устройство обнаружено, но физическая связь не установлена;

 • 0011 — устройство обнаружено, физическая связь установлена;

 • 0100 — устройство отключено (запретом интерфейса или запуском внутреннего теста).

♦ Биты [7:4] — SPD, скорость:

 • 0000 — нет согласованной скорости (устройство не подключено или связь не установлена);

 • 0001 — согласована скорость 1-го поколения.

♦ Биты [11:8] — поле IPM, состояние энергопотребления интерфейса:

 • 0000 — устройство не обнаружено, физической связи нет;

 • 0001 — интерфейс в активном состоянии;

 • 0010 — интерфейс в состоянии PARTIAL;

 • 0110 — интерфейс в состоянии SLUMBER.

Остальные биты и значения полей зарезервированы.

Регистр SError (SCR1) — регистр диагностической информации, относящейся к интерфейсу. В регистре представлены ошибки, накапливающиеся с момента последней очистки регистра. Регистр очищается операцией сброса, отдельные биты можно сбрасывать операцией записи в регистр (единицы в позициях сбрасываемых бит).

♦ Биты [15:0] — поле ERR, ошибки, обрабатываемые обычным программным обеспечением:

 • бит 9 — С — устойчивая неисправимая ошибка связи или нарушение целостности данных (может возникать при неправильном подключении, отказе или отключении устройства);

 • бит 11 — Е — внутренняя ошибка, обнаруженная хост-адаптером (если ошибка повторяется после сброса, она может быть признаком несовместимости адаптера и устройства);

 • бит 0 — I — исправленное нарушение целостности данных (не требует действий со стороны ПО, но может учитываться, например, для принятия решения о снижении скорости);

 • бит 1 — М — исправленная ошибка связи (может возникать при временном отключении устройства, потере синхронизации, не требует действий со стороны ПО);

 • бит 10 — P — протокольная ошибка, требует сброса интерфейса и повтора операции (в случае устойчивости может быть признаком несовместимости устройства и адаптера);

 • бит 8 — T — не исправленное нарушение целостности данных, требует повтора операции.

♦ Биты [31:16] — поле DIAG, используемое диагностическим ПО:

 • бит 19 — В — ошибка декодирования 10B/8B;

 • бит 21 — С — ошибка CRC на канальном уровне;

 • бит 20 — D — ошибка паритета блоков данных (Disparity);

 • бит 26 — F — неопознанный тип FIS (ошибка, обнаруженная на транспортном уровне при корректном CRC-коде);

 • бит 17 — I — внутренняя ошибка физического уровня интерфейса;

 • бит 16 — N — сигнал готовности физического уровня менял состояние;

 • бит 22 — H — ошибка подтверждения кадров (может возникать как следствие ошибок В, С, D);

 • бит 23 — S — ошибка последовательности состояний канального уровня;

 • бит 24 — T — ошибка на транспортном уровне;

 • бит 18 — W — обнаружен пробуждающий сигнал Comm Wake.

Остальные биты зарезервированы.

Регистр SControl (SCR2) — регистр управления интерфейсом (запись и чтение).

♦ Биты [3:0] — поле DET, управление обнаружением и инициализацией устройств:

 • 0000 — нет действий;

 • 0001 — инициализация и установление соединения (эквивалентно аппаратному сбросу);

 • 0100 — запрет интерфейса и перевод физического уровня в режим Offline.

♦ Биты [7:4] — поле SPD, задает ограничение на скорость при согласовании соединений:

 • 0000 — нет ограничений;

 • 0001 — скорость не выше 1-го поколения.

♦ Биты [11:8] — поле IPM, управление энергорежимом интерфейса:

 • 0000 — нет ограничений;

 • 0001 — запрет перехода в состояние PARTIAL;

 • 0010 — запрет перехода в состояние SLUMBER;

 • 0011 — запрет перехода в состояние PARTIAL и SLUMBER.

Остальные биты и значения полей зарезервированы.

 

9.3. Интерфейсы и конструктивы твердотельных носителей информации

 

Твердотельные устройства хранения используются в миниатюрных компьютерах, а также компьютеризированных цифровых устройствах бытовой электроники — фотокамерах, плейерах, приемниках глобальной системы позиционирования (GPS), музыкальных инструментах и прочих. В большинстве своем эти устройства основаны на микросхемах флэш-памяти, в наиболее современных используется память со структурой NAND (см. п. 7.3.2). Этому типу флэш-памяти присуще быстрое чтение, запись и стирание небольших блоков (256 или 512 байт), что удобно для записи файлов. Правда, для этой памяти характерны довольно медленное чтение произвольного байта и отсутствие возможности побайтной записи, но приложениям этих карт такая возможность и не требуется, поскольку они ориентированы на блочный обмен. Устройства на флэш-памяти являются энергонезависимыми (в режиме хранения не требуют питания), экономичными в плане потребления, особенно при чтении, достаточно производительными, но, увы, недешевыми. Запись на эти носители специфична: быстрее всего она выполняется в чистый (стертый) блок (сектор диска), а перезапись требует относительно длительного стирания. Кроме того, флэш-память имеет хоть и большое (порядка 105), но ограниченное число циклов стирания-записи — как ни странно, у носителей с подвижным носителем с этим ограничением не сталкиваются. Устройства хранения обычно представляют комбинацию собственно микросхем памяти и микроконтроллера, обеспечивающего внешние интерфейсные функции. Этим они отличаются от карт памяти с линейным доступом, например Miniature Card, на которых располагаются только микросхемы памяти (встроенный контроллер не требуется).

Есть и другие твердотельные хранители — например, ферроэлектрическая память (FRAM), но пока что массового применения они не имеют. Менее чем за десятилетие устройства хранения на флэш-памяти прошли большой путь от электронных «дисков» («винчестеров») размером в 3" до современных, размером с почтовую марку. Интерфейсы твердотельных устройств хранения — карт внешней памяти — тесно связаны с их конструктивами; основные характеристики наиболее распространенных карт приведены в табл. 9.12.

Таблица 9.12. Основные характеристики карт внешней памяти

  CompactFlash SmartMedia Card MultiMedia Card Sequre Digital Miniature Card
Длина 36,0 45,0 32,0 32,0 33,0
Ширина 43,0 37,0 24,0 24,0 38,0
Высота 3,3/5,0 0,76 1,4 2,1 3,5
Коннектор Штырьковый Печатный Печатный Печатный Эластомер
Число контактов 50 22 7 9 60

Вышеперечисленные карты можно подключать и к обычным компьютерам. Для этого существуют различные адаптеры: для слотов PC Card (к блокнотным ПК), для шины USB (для самых разных ПК) и для других внешних интерфейсов. С помощью этих адаптеров компьютер «видит» подключенную карту как обычный сменный носитель информации (диск). Конечно, компьютеры общего назначения в такой внешней памяти не нуждаются — своя и больше, и дешевле. Главная цель подключения карты к ПК — быстрая передача прикладных данных бытового устройства (фотографий, музыки и т. п.) или перенос (хранения) информации (вместо дискет).

В качестве интерфейса твердотельных устройств хранения может использоваться и самый обычный вариант ATА. Существуют устройства DOM (Disk On Module) — небольшие модули, которые вставляются в обычный 40-контактный разъем ATA, имеющийся на любой современной системной плате. Правда, этот «винчестер» не блещет выдающимися параметрами: объем — 4-256 Мбайт, средняя скорость передачи данных — 1,6 Мбайт/с, удельная стоимость хранения — около $1,5 за мегабайт. Внутри модуля находится флэш-память структуры NAND с контроллером, эмулирующим систему команд ATA. Основное применение этих модулей — хранение ПО встраиваемых компьютеров, но можно ими пользоваться и как сменными устройствами хранения.

 

9.3.1. CompactFlash

Карты CompactFlash (рис. 9.7), поддерживаемые ассоциацией CFA (Compact Flash association), широко используются в различных электронных приборах: цифровых фотокамерах, фотопринтерах, MP3-плейерах, цифровых диктофонах, персональных коммуникаторах и, конечно же, компьютерах — настольных, карманных, автомобильных. Карты имеют размер 42,8×36,4×3,3 мм (4 мм с учетом выступа) и 50-контактный разъем (розетка на карте, двухрядный штырьковый разъем с шагом 1,27 мм на слоте). Назначение контактов приведено в табл. 9.13. Через переходник с 50 на 68-контактный разъем карты могут устанавливаться в слот PC Card Type II или III, имеющийся практически во всех блокнотных ПК. Объем памяти выпускаемых в настоящее время карт — от 4 Мбайт до 1 Гбайт, напряжение питания — 5 или 3,3 В. Карты могут работать в одном из трех режимов: карт памяти (Mem), карт ввода-вывода PC Card (I/O), «чистого» режима IDE (ATA). В первых двух режимах карты работают с теми же интерфейсными сигналами, что и PC Card. В режиме IDE электрический интерфейс и система команд полностью совместимы со спецификацией ATA (см. п. 9.2.1), правда, обмен данными возможен только в режиме PIO. Режим IDE выбирается заземлением на стороне хоста сигнала ATA_SEL#. При этом из шины адреса используются только А[2:0] (остальные заземлены хостом); шина данных при обращениях к регистрам ATA имеет разрядность 8 бит, а при передаче данных — 16. Сигналы CS0# и CS1# используются для выбора блока командных и управляющих регистров соответственно. Сигналы PDIAG#, DASP#, CSEL#, RESET# и IORDY соответствуют спецификации ATA. Сигналом CSEL# выбирается роль карты: при заземленном контакте — устройство 0 (master), при разомкнутом — устройство 1 (slave); можно воспользоваться и «кабельной выборкой». Сигналы REG# и WE# должны подключаться к шине питания (Vcc). Сигналы CD1# и CD2# являются индикаторами установки карты (их контакты замыкаются последними, на карте они заземлены). В табл. 9.14 описан чисто пассивный переходник, позволяющий подключить карту Compact Flash к обычному порту ATA (IDE), имеющемуся на любой современной системной плате.

Рис. 9.7. Карты CompactFlash

Таблица 9.13. Назначение контактов карт CompactFlash

Mem I/O IDE Mem I/O IDE
1 GND GND GND 26 CD1# CD1# CD1#
2 D03 D03 D03 27 D11 D11 D11
3 D04 D04 D04 28 D12 D12 D12
4 DOS DOS DOS 29 D13 D13 D13
5 D06 D06 D06 30 D14 D14 D14
6 D07 D07 D07 31 D15 D15 D15
7 CE1# CE1# CS0# 32 CE2# CE2# CS1#
8 A10 A10 A10 33 VS1# VS1# VS1#
9 OE# OE# ATA_SEL# 34 IORD# IORD# IORD#
10 A09 A09 A09 35 IOWR# IOWR# IOWR#
11 A08 A08 A08 36 WE# WE# WE#
12 A07 A07 A07 37 RDY/BSY IREQ INTRQ
13. VCC VCC VCC 38 VCC VCC VCC
14 A06 A06 A06 39 CSEL# CSEL# CSEL#
15 A05 A05 A05 40 VS2# VS2# VS2#
16 A04 A04 A04 41 RESET RESET RESET#
17 A03 A03 A03 42 WAIT# WAIT# IORDY
18 A02 A02 A02 43 INPACK# INPACK# INPACK#
19 A01 A01 A01 44 REG# REG# REG#
20 A00 A00 A00 45 BVD2 SPKR# DASP#
21 D00 D00 D00 46 BVD1 STSCHG# PDIAG#
22 D01 D01 D01 47 D08 DOS DOS
23 D02 D02 D02 48 D09 D09 D09
24 WP IOIS16# IOCS16# 49 D10 D10 D10
25 CD2# CD2# CD2# 50 GND GND GND

Таблица 9.14. Переходник CompactFlash Card — ATA

ATA, конт. № Цепь CFC, конт. № CFC, конт. № Цепь ATA, конт. №
2 GND 1 26 CD1# -
11 D03 2 27 D11 10
9 D04 3 28 D12 12
7 D05 4 29 D13 14
5 D06 5 30 D14 16
3 D07 6 31 D15 18
37 CS0# 7 32 CS1# 38
GND¹ A10 8 33 VS1# -
GND¹ ATA_SEL# 9 34 IORD# 25
GND¹ A09 10 35 IOWR# 23
GND¹ A08 11 36 WE# +5V²
GND¹ A07 12 37 INTRQ 31
+5V² VCC 13 38 VCC +5V²
GND¹ A06 14 39 CSEL# 28³
GND¹ А05 15 40 VS2# -
GND¹ А04 16 41 RESET# 1
GND¹ A03 17 42 IORDY 27
36 А02 18 43 INPACK# -
33 А01 19 44 REG# +5V²
35 A00 20 45 DASP# 39
17 D00 21 46 PDIAG# 34
15 D01 22 47 D08 4
13 D02 23 48 D09 6
32 IOCS16# 24 49 D10 8
- CD2# 25 50 GND GND¹

¹ С шиной GND должны быть соединены контакты 2, 19, 22, 24, 26, 30 и 40 разъема ATA, а также контакт разъема питания.

² Питание +5V на переходник подается от дополнительного разъема.

³ Возможно подключение не к разъему ATA, а к шине GND через джампер: замкнут — ведущее устройство, разомкнут — ведомое.

 

9.3.2. SmartMedia Card

Карты SmartMedia Card, поддерживаемые ассоциацией PCMCIA, предназначены примерно для того же круга приложений, что и CompactFlash. Они совсем тонкие, имеют менее «нежный» печатный разъем с малым числом контактов (всего 22) и не боятся не только повышенной влажности, но и воды. Карты основаны на микросхемах флэш-памяти с организацией запоминающих ячеек NAND. Средняя скорость передачи данных — 2 Мбайт/с, пиковая — до 10. Вид карт приведен на рис. 9.8, назначение контактов — в табл. 9.15. Карты на 5 В выпускаются объемом 16 и 32 Мбит (2 и 4 Мбайт). Карты на 3,3 В выпускаются объемом 16, 32 или 64 Мбит (2, 4, 8 Мбайт); у них контакт 17 соединен с Vcc. Для карт SmartMedia выпускают простые переходные адаптеры на слот PC Card Type II. Появились даже устройства FlashPath™ для считывания этих карт в обычном дисководе(!) 1,44 Мбайт.

Рис. 9.8. Карты SmartMedia: а — питание 5 В, б — питание 3,3 В

Таблица 9.15. Назначение контактов SmartMedia Card

Цепь Цепь
22 V CC (5 B) 1 V SS
21 СЕ# 2 CLE
20 RE# 3 ALE
19 R/B 4 WE#
18 GND 5 WP#
17 Power Detect 6 I/O1
16 I/O8 7 I/O2
15 I/O7 8 I/O3
14 I/O6 9 I/O4
13 I/O5 10 V SS
12 V CC 11 V SS

 

9.3.3. MultiMediaCard и Sequre Digital

Карты MultiMediaCard (MMC) и Secure Digital (SD) еще компактнее — их размер в плане всего 32×24 мм при толщине 1,4 мм у MMC и 2,1 мм у SD. Эти карты имеют краевой печатный разъем, 7-контактный у MMC и 9-контактный у SD. У карт MMC на разъем выводятся питание, управляющий сигнал, сигнал синхронизации и двухразрядная шина данных. У карт SD за счет пары дополнительных контактов шина данных расширена до 4 бит, что позволяет повысить скорость обмена. Конструктивно карты SD сделаны так, что устройства, работающие с ними, физически могут работать и с картами MMC, но не наоборот (в тонкий слот MMC более толстую карту SD и не вставить). Логическая совместимость должна обеспечиваться программным обеспечением хоста (устройства, в которое вставляют карту). Карты MMC и SD предназначены примерно для того же спектра устройств, что и CompactFlash; к ним стоит добавить и электронные книги (eBook). Однако назначение этих карт различно: MMC предназначены для широкого распространения данных — музыки, игр, электронных книг, — и они являются довольно дешевыми носителями информации. Карты SD предназначены для безопасного (в смысле конфиденциальности) распространения информации, и они гораздо дороже.

Карты SD разработаны альянсом трех компаний — Toshiba, Matsushita (более известная по торговой марке Panasonic) и SanDisk, которые организовали ассоциацию SDA (Secure Digital Association), выпускающую спецификации, принятые уже сотнями фирм во всем мире. Членство в ассоциации платное и дорогостоящее; по вполне понятным причинам технические детали SD широко не освещаются (иначе грош цена провозглашаемой безопасности).

Карты SD (рис. 9.9) имеют размер 32×24×2,1 мм; справа на рисунке виден переключатель защиты записи (WP), предохраняющий от случайного стирания. На печатной плате карты SD смонтирована флэш-память структуры NAND, SD-контроллер и вспомогательные компоненты. 9-контактный разъем карт SD (табл. 9.16) по выводам 1–7 совпадает с картами MMC. Карты SD допускают «горячее» подключение/отключение. Конструкция коннектора рассчитана на 10 000 циклов вставки-изъятия. Карты выдерживают до 200 000–300 000 циклов записи в каждый блок флэш-памяти и падение на пол с высоты 3 м. Они устойчивы и к жаре, и к морозу. Скорость передачи данных у первых карт SD — 2 Мбайт/с, объем — 8-512 Мбайт; в 2002 г. планируется подъем скорость до 10 Мбайт/с и объем до 1 Гбайт, а в 2004 — до 20 Мбайт/с и 4 Гбайт. Начальная удельная цена хранения высока — $3 за 1 Мбайт, но постепенно она должна снизиться до уровня $1 за 1 Мбайт (что тоже немало!) и ниже.

Рис. 9.9. Карта памяти SD (вид сзади)

Таблица 9.16. Назначение контактов карт MMC и SD

Контакт Цепь Контакт Цепь
1 Command 6 Data 0
2 Vss 7 Data 1
3 Vdd 8 Data 2
4 Clock 9 Data 3
5 Vss    

Для карт SD разработаны (и разрабатываются) спецификации форматов данных на трех уровнях:

♦ физический уровень описывает перезаписываемые карты (SD-Rewritable) и постоянную память (SD-Read Only);

♦ уровень файловой системы использует стандарт ISO 9293;

♦ прикладной уровень учитывает специфику атрибутов различных типов содержимого — музыки (SD-Audio), изображений (SD-Picture), речи (SD-Voice), видео (SD-Video) и других.

На всех уровнях действуют средства безопасности (Security), являющиеся основным «коньком» SD. В SD используются технологии обеспечения безопасности CPRM (Content Protection for Recordable Media — защита содержимого записываемых носителей) — стандарта шифрования и сертификации/аутентификации, разработанного и лицензируемого фирмами IBM, Intel, Matsushita (Panasonic) и Toshiba. Карты SD-Audio отвечают требованиям SDMI (Secure Digital Music Initiative) к портативным устройствам.

Карта SD имеет три области хранения с разными возможностями доступа: область хранения ключей шифрования и аутентификации, область секретных данных и область данных общего назначения. Секретные данные хранятся и передаются в зашифрованном виде, их кодирование-декодирование выполняется хостом (устройством, в которое устанавливается карта). Для того чтобы установить канал обмена секретными данными, требуется взаимная аутентификация хоста и карты: хост должен «признать» карту, а карта — хост. Таким образом, обмен данными с защищенной областью карты возможен только на «фирменных» устройствах (до тех пор пока алгоритмы и ключи шифрования не попадут в руки хакеров).

Карты SD продаются в форматированном виде; при необходимости они могут быть переформатированы на специальном устройстве или хосте SD, имеющем функции форматирования. Нештатное форматирование (например, на компьютере) может привести карту в состояние, негодное для дальнейшего применения, — защита может сработать как дверь, захлопнувшаяся на замок, единственный ключ от которого остался внутри.

Совместимость SD и MMC весьма ограничена. Хосты SD-карт совместимы с картами MMC на физическом уровне; в картах MMC и SD используется одна и та же структура таблицы размещения файлов (FAT), чем обеспечивается совместимость и на уровне записи/чтения файлов. Однако на прикладном уровне программные спецификации «начинки» этих карт могут и различаться. Так, например, в SD MP3-плейеры нельзя вставлять карты MMC — они используют различные форматы данных. Данные общего назначения (не секретные) могут быть перенесены с MMC на SD, но перенос секретных данных хосты не допустят (если хост — не компьютер со взломанным ПО). Хосты MMC-карт с SD-картами несовместимы даже чисто физически (эти карты в слот для MMC не влезут по толщине).

Кроме карт SD-памяти, планируется выпуск и карт ввода-вывода (SD I/O card). В первую очередь рассматривается интерфейс Bluetooth, позволяющий быстро и без проводов синхронизировать данные устройств, имеющих слот SD, друг с другом и с устройствами, уже имеющими этот интерфейс.

 

9.3.4. Miniature Card

Карты Miniature Card предназначены для использования в недорогих устройствах бытовой электроники в качестве сменной флэш-памяти, а также расширения динамической памяти (рис. 9.10). В интерфейсе карт используется линейный доступ к произвольной ячейке памяти с адресуемым объемом до 64 Мбайт. Карты имеют немультиплексированную 16-разрядную шину данных и могут работать в пакетном режиме передачи данных. Также имеется возможность работы с 8-разрядным хостом (старший и младший байты шины запараллеливаются, линия BS8# заземляется). Интерфейс хоста для этих карт конфигурируется на работу в режиме DRAM или флэш-памяти; карты снабжаются микросхемой энергонезависимой памяти идентификации с интерфейсом I²C. Карты имеют прорези для правильного позиционирования и коннектор, обеспечивающий «горячее» (даже для DRAM!) подключение. При установке передний край карты вводят в слот, при этом подключаются контакты «первой очереди»: GND, VCC и CINS# (контакт, замыкающийся на «землю»). Затем карта опускается вниз, прижимаются контакты основного эластомерного разъема и замыкается контакт обнаружения CD#. Карты могут работать с питанием 5 и 3,3 В; для идентификации питания служат сигналы VS1#, VS2#. Карта Miniature Card через переходный адаптер может устанавливаться в слот PC Card типа 2.

Рис. 9.10. Карта Miniature Card: а — общий вид, б — вид снизу

При работе по интерфейсу DRAM используются линии адреса А[12:0] и управляющие сигналы RAS#, CASH# и CASL# (стробы для старшего и младшего байтов), а также WE#. Карты имеют отдельную линию питания Vccr для регенерации при отключенном основном питании.

При работе по интерфейсу флэш-памяти используются линии адреса А[24:0] и управляющие сигналы ОЕ# (чтение), WE# (запись), СЕН# и CEL# (выборка для старшего и младшего байтов).

 

9.4. Системная поддержка устройств хранения

Дисковая память имеет стандартную поддержку на уровне BIOS и операционной системы. Поддержка дисков со стороны BIOS заключается в предоставлении вышестоящим уровням программного обеспечения возможности чтения и записи секторов диска, форматирования трека и выполнения вспомогательных функций. Эти возможности предоставляются программным вызовом прерывания BIOS Int 13h — дискового сервиса. Дисковый сервис BIOS предназначен для изоляции вышестоящего ПО (ОС и приложений) от подробностей реализации дисковой системы.

Дисковый сервис Int 13h работает на уровне физических устройств, называемых также физическими приводами (physical drive). Традиционный дисковый сервис имеет программный интерфейс, сохранившийся еще со времен IBM PC/XT. Он позволяет оперировать с дисками размером до 528 Мбайт (см. [1, 4, 9]). Когда появились диски большего размера, в традиционный дисковый сервис ввели расширение (алгоритмы преобразования), позволяющее преодолеть этот барьер и, теоретически, работать с дисками объемом до 8,4 Гбайт. Для работы с большими дисками введены новые функции BIOS Int 13h c интерфейсом, совершенно не похожим на традиционный.

Операционная система предоставляет прикладным программам сервисы более сложные, чем функции BIOS, обеспечивая доступ к файловой системе диска. Самый низкий уровень обращения, допускаемый операционной системой, оперирует с секторами логических дисков, или приводов (logical drive), ассоциированными с именем устройства (А:, В:, С:, …, Z:). Один физический диск (жесткий) может содержать несколько логических дисков. На физическом диске могут присутствовать системные области (MBR и резервированные секторы), доступ к которым операционная система не предоставляет.

Для работы утилит и приложений с дисковой памятью имеется несколько уровней сервиса.

♦ Возможно обращение к контроллеру дисков на уровне регистров путем задания адреса блока и количества секторов, требуемых для передачи. Это самый производительный способ обмена данными, но он требует знания как организации разделов диска и файловой системы, так и контроллера диска (его системы команд). Доступ обеспечивается ко всем элементам, кроме блоков, за крытых командой Set Max Address (для дисков ATA). При этом обходится фаза трансляции геометрии, выполняемая, в общем, по усмотрению BIOS.

♦ Сервисы BIOS Int 13h также позволяют получить неограниченный доступ к диску, но если используются традиционные вызовы (функции с номерами ниже 40h), то доступны лишь диски объемом до 8,4 Гбайт (при трансляции геометрии) или до 528 Мбайт (без трансляции). За абстрагирование от системы команд контроллера приходится расплачиваться некоторым снижением производительности, связанным с накладными расходами программного интерфейса.

♦ Используя интерфейс функций DOS, можно получить доступ к любому сектору логического диска, указав лишь его логическое имя, по функциям чтения/записи абсолютных секторов. Но при этом первым доступным сектором (логический адрес 0) является загрузочный сектор логического диска, а секторы с таблицами разделов и те, что не попадают в разделы логических дисков, оказываются недоступными. Для осмысленного доступа к данным необходимо знать структуры FAT и каталогов, а риск «наломать дров», вплоть до полной потери данных, довольно велик.

♦ И наконец, интерфейс файловой системы ОС позволяет довольно легко создавать, искать и удалять файлы и каталоги, выполнять чтение и запись файлов целиком или частично, а также некоторые другие вспомогательные функции. При этом от пользователя данного интерфейса скрываются все тонкости работы с FAT и элементами каталогов (и конечно же, все премудрости нижних уровней).

Прикладные программы и утилиты изолируют пользователя от всех этих тонкостей, что позволяет ему сконцентрировать внимание на решении своих смысловых задач. Уровень, на котором программа обращается к дискам, выбирается программистом из соображений минимальной достаточности: чем выше уровень сервиса, тем легче достичь совместимости с остальным ПО (предоставляется меньше возможностей для совершения ошибок). Чем ниже уровень сервиса, тем больше знаний нужно вложить в программу, чтобы она общалась с диском не наперекор общим правилам.

Поскольку CD-ROM по организации данных (файловой системе) существенно отличается от традиционных дисков (гибких и жестких), для обеспечения «прозрачного» доступа приложений к файлам на CD-ROM требуются специальные программные средства. Несмотря на возможность загрузки ОС с CD-ROM, реализованную в современных версиях BIOS, полной поддержки доступа к CD-ROM (такой, как к обычным дискам) BIOS не предоставляет. Приложениям доступ к CD-ROM обеспечивают только сервисы операционной системы, встроенные в ОС или загружаемые.

Для обеспечения загрузки ОС с CD-ROM фирмы Phoenix и IBM выпустили спецификацию «El Torito Bootable CD-ROM Format Specification», версия 1.0 была опубликована в январе 1995 г. Цель спецификации — обеспечить возможность загрузки ОС и приложений с CD-ROM средствами BIOS (на «голой» машине). При этом имеются следующие возможности:

♦ загрузка ОС по выбору из загрузочного каталога (Boot Catalog), находящегося на CD-ROM;

♦ предоставление выбора конфигурирования CD-ROM в виде жесткого диска или дискеты;

♦ переименование существующих приводов (если необходимо);

♦ использование существующей технологии BIOS (доступ в режиме LBA) для обращения к кодам и данным;

♦ совместимость с приложениями DOS и Windows, использующими функции Int 13h.

Спецификация расширяет традиционный набор функций BIOS, она ориентирована на приводы с интерфейсом ATAPI и SCSI.