@ Карта сайта News Автора!

Bog BOS: hardware:  Интерфейс ATA (IDE)

Последнее изменение файла: 2016.02.26
Скопировано с www.bog.pp.ru: 2024.03.29

Bog BOS: hardware: Интерфейс ATA (IDE)

ATA (Advanced Technology Attachment), также называемый IDE (Integrated Drive Electronics) - стандарт на интерфейс между компьютером (контроллером) и накопителем на жестких магнитных дисках (дисководом, HDD), включая физический уровень (разъёмы, кабели), электрические и логические характеристики сигналов, регистры устройства, команды и протоколы. Включает ATAPI (AT Attachment interface with Packet Interface). Для описания ATAPI команд предлагается обращаться к стандартам SCSI.

Имеет также множество маркетинговых названий: EIDE (ATA-2 и Enhanced BIOS), FASTATA (урезанный ATA-2), FASTATA-2 (просто ATA-2), UltraDMA (ATA-4 в режиме UDMA mode 3), UltraATA/33 (ATA-4), UltraATA/66 (ATA-5), UltraATA/100 (ATA-6) и др.

Первоначально представлял собой AT-совместимый дисковый контроллер, встроенный в дисковод и подсоединённый упрощённой 16-битной шиной ISA (в девичестве AT bus). Простейший контроллер представлял дешифратор адреса, остальные сигналы передавались "как есть", причём на оба устройства сразу. По мере развития всё больше и больше напоминает SCSI (терминаторы, очередь команд, ATAPI).

Поддерживается 2 дисковода (master - 0, slave - 1) на канал (host adapter). Номер дисковода определяется джамперами на дисководе и/или специальным кабелем. Современные чипсеты поддерживают 2 канала (primary, secondary), можно также использовать дополнительные контроллеры. В старых чипсетах оба канала разделяли некоторые сигналы (от одного пина в микросхеме шли 2 проводка на 2 канала :). Каждый канал может обрабатывать только одну команду одномоментно. Следующая команда (даже к другому устройству) будет ждать (в ATA-4 появились наложения - overlap - команд и очереди в устройстве, должны поддерживаться обоими устройствами). В некоторых ситуациях хост должен переключаться в режим более медленного устройства даже при обращении к быстрому (например, при записи в регистры). Поэтому желательно ставить на каждый канал только одно устройство, причём в крайний разъём (иначе не будет работать UDMA) и конфигурировать как master, т.к. slave не может определить наличие master устройства, а команда диагностики не сгенерирует прерывания.

Стандарты

Стандарты принимаются Technical Committee T13 National Committee on Information Technology Standards (NCITS), уполномоченным ANSI. Ранее назывался ASC (Accredited Standards Committee) X3T10.

Физический уровень (разъёмы, кабели)

Сигнальный разъём - 40 контактов в 2 ряда (чётный и нечетный. 20й контакт - ключ (контакт на разъёме устройства удаляется, отверстие на разъёме кабеля затыкается). Кабель - 40 проводов. Требуется 80 проводной кабель для режима UDMA3 и выше (провода заземления между сигнальными). Наличие улучшенного кабеля определяется автоматически. Точнее, должно определяться автоматически, но описание таково, что в это не верится, особенно при наличии старого устройства на том же канале в режиме slave. 1й провод - красный. Длина кабеля - от 25 до 46 см (крайний разъём для хоста голубого цвета и два разъёма для дисководов чёрного и серого цветов). Режим UDMA требует терминаторов с обеих сторон кабеля.

Стандарт определяет также разъём питания - 4 контакта (+12V, возврат +12V, возврат +5V, +5V).

Экзотические разъёмы: прямое соединение (без кабеля); сборки сигнального разъёма с джамперами и разъёмами питания; 50-контактный (совместимый со старыми 44-контактными) разъём для устройств 2 1/2 дюйма, совмещающий сигнальные проводники с кабелем питания и выбором устройства; 68-контактный разъём, совместимый с PCMCIA устройствами; разъём CompactFlash.

Протоколы обмена данными

Данные пишутся/читаются секторами (512 байт, 256 слов) или блоками. Базовый протокол обмена данными - PIO (Programmed I/O), включая блочный режим (только одно прерывание на весь блок). Блок может состоять из нескольких секторов. Процессор лично "пропихивает" каждый байт/слово через регистр данных.

Более "щадящий" для процессора режим - DMA (Direct Memory Access). В сочетании с перехватом управления шиной (bus mastering, должна быть поддержка в BIOS и чипсете) позволяет дисководу обмениваться с памятью напрямую, что разгружает процессор, но требует специального драйвера для каждого чипсета. Может быть однословный (single word) - упразднён в ATA-3, многословный (multiword) и Ultra DMA (double edge clocking, стробирование, CRC-16). Для режима UDMA 3 и выше требуется кабель с 80 проводами.

Под 32-битным доступом к диску имеется ввиду блокирование 2 16-битных слов при передаче от процессора к дисководу по шине PCI (шина ATA в любом случае имеет ширину 16 бит).

Наборы команд

Адресация секторов и геометрия диска

Реальная геометрия диска известна только его производителю. Любая информация, которую диск предоставляет о своей геометрии, виртуальна и может оказаться другой при следующем обращении (кстати, есть команда ATA, устанавливающая текущую геометрию). Для современного дисковода, имеющего различное количество секторов на дорожку в разных зонах диска, её в принципе невозможно задать в понятиях - число цилиндров, число головок и число секторов на дорожке. Все эти понятия виртуальны и оставлены для совместимости со старыми программами/устройствами. Виртуальная геометрия используется для трансляции виртуального CHS-адреса в реальное местоположение сектора на диске (а может во флэш памяти, где нет ни головок, ни секторов).

Адресация CHS (cylinder, head, sector). Удалена из стандарта ATA-6. Номер цилиндра - 16 бит (от 0 до 65535). Номер головки - 4 бита (от 0 до 15). Номер сектора - 8 бит (от 1 до 255). Максимально возможная емкость - 136.9 GB. Диск предоставляет по команде "IDENTIFY DEVICE" две CHS-геометрии (и, соответственно, две схемы трансляции адресов): начальную (defaultCHS, physical в /proc/ide/hda/geometry, RawCHS в hdparm -i) и текущую (CurCHS и CurSects в hdparm -i). Хотя надежнее посмотреть самому в /proc/ide/hdX/identify. Текущая геометрия устанавливается командой ATA "Initialize device parameters" (только число головок и число секторов на дорожку, число цилиндров вычисляется дисководом) и используется для пересчета в реальный адрес. Устройство может отказаться устанавливать указанную геометрию. Число текущих цилиндров определяется как результат деления min (числа LBA-блоков, 16514064) на число заявленных головок и секторов, но не более 65535. В ATA-3 вместо 16514064 используется 16515072. Ни одна из них не отражает реальную геометрию диска. Для дисков больших 8.4 GB начальная геометрия выдается как 16383/16/63, соответственно, размер диска не может быть вычислен из его геометрии (ATA-3). Для меньших дисков начальная геометрия не должна превышать 16383/16/63. Согласно ATA-4, диск более 8.4 ГБ не обязан поддерживать CHS-трансляцию. Желательно, чтобы число секторов на дорожке в текущей трансляции не превышало 63 (иначе могут быть проблемы со старым BIOS). Также для совместимости со старым BIOS, если число цилиндров начальной геометрии более 8192, то число головок желательно устанавливать равным 15 (ATA-5). На число цилиндров начальной геометрии может повлиять команда SET MAX ADDRESS CHS (число головок и секторов не изменяется), но не более 16383. После чего пересчитывается число текущих цилиндров и число текущих блоков (число головок и секторов не изменяется) и блоков LBA. Команда SET MAX ADDRESS LBA устанавливает число блоков LBA, не меняет число начальных/текущих головок и секторов. Число начальных цилиндров устанавливается в 16383 (если число блоков LBA больше 16514064) или в min( 65535, число блоков LBA/число начальных секторов/число начальных головок) (если больше). Аналогично вычисляется число текущих цилиндров. Число текущих блоков в режиме CHS определяется как произведение C*H*S. Команда READ NATIVE MAX ADDRESS выдает начальную геометрию (емкость диска может отличаться в CHS и LBA режимах).

Некоторые модели дисков имеют специальные джампера или программы (Maxtor), позволяющие задать или ограничить defaultCHS геометрию. Например, установить число цилиндров равным 4092 или число головок равным 15, чтобы обойти ошибки в старых BIOS. Соответственно, BIOS будет видеть только часть диска. Полную ёмкость диска надо будет получать другими способами.

Адресация LBA (Linear Block Addressing). Задаётся номер сектора, начиная с нуля - 28 бит. Максимально возможная емкость - 137.4 GB. LBA-адрес можно рассчитать как c*H*S + h*S + (s-1). Firmware старых дисков (все диски до 500 MB и некоторые большей ёмкости) не умеет использовать адресацию LBA. Является обязательным режимом начиная с ATA-3 и режимом по умолчанию, если число секторов превышает 16515072. Команда "IDENTIFY DEVICE" возвращает возможность LBA-адресации и общее число секторов в режиме LBA (/sbin/hdparm -i: LBAcapacity). Для дисков больших 137.4 GB возвращается 2^28-1 сектор. С помощью команды SET MAX ADDRESS можно установить максимальный номер блока. С помощью команды READ NATIVE MAX ADDRESS можно узнать настоящий размер диска. Используется для резервирования верхней части диска и обхода проблемы со старым BIOS.

Адресация LBA 48 бит. Используется отдельный набор команд ATA. Команда "IDENTIFY DEVICE" возвращает возможность 48-битной LBA-адресации и общее число секторов в режиме LBA48. Аналогично старому LBA-режиму имеются команды SET MAX ADDRESS EXT и READ NATIVE MAX ADDRESS EXT.

Получение информации о характеристиках дисковода

Команда "Identify drive" позволяет получить разнообразную информацию об устройстве (256 слов):

ATAPI-устройства имеют аналогичную команду "IDENTIFY PACKET DEVICE", которая позволяет получить примерно такую же информацию об устройстве с учетом особенностей ATAPI:

Личное мнение

История развития истандарта ATA производит тяжелое впечатление (мягко говоря). Просто интересно: почему в интерфейсе SCSI (принятом гораздо раньше первого ATA) сразу додумались до 32-битной LBA адресации (и 15 лет с этим живут), а разработчики ATA уже 10 лет издеваются надо всеми ежегодно преодолевая очередной барьер емкости HDD - 528 MB, 2 GB, 4 GB, 8 GB, 33 GB, теперь вот 134 GB? Одно слово "developed by the ad hoc working group" (сляпано из подручных материалов). Остальные изменения делаются аналогично. Например, сначала из стандарта удаляется 8-битный обмен, а потом он опять вводится, но только для "хороших парней" из CFA. В результате, получился не стандарт, а полный бардак.

P.S. А сигналы замечательно описаны :)

Ссылки

@ Карта сайта News Автора!

Bog BOS: hardware:  Интерфейс ATA (IDE)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru