Вопросы про АТА

Тема в разделе "WASM.BEGINNERS", создана пользователем Mika0x65, 10 янв 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Читаю сейчас про АТА, не могу понять несколько вещей.

    Инструкции 'insw', 'outsw'.
    Получается, что эти команды должны работать на частоте PCI? Поясню: как я понял, адаптеры АТА-1 и АТА-2 работают на частоте шины ISA(EISA) и PCI соотвественно. И подчиненные им устройства должны работать на этой же частоте. Т.е. процессор учитывает скорость шины при выполнении 'ins'/'outs'?

    Разрядность.
    Не совсем ясно, в чем польза более высокой разрядности адаптера -- регистр данных так и остается 16 бит. Писать в него, как я понимаю, можно только словами. А чем смысл повышения разрядности? Или же это сделано только для того, чтобы повесить адаптер на PCI?

    Заранее благодарен :).
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    конкретное время выполнения одной итерации I/O при строчном обмене в PIO (для (U)DMA впрочем всё аналогично) с *ATA-контроллером зависит от ряда факторов (вплоть до power state'ов) и вообще-то hardware-dependent. В первую очередь это время зависит от текущего режима обмена -- PIO-0, 1, 2, etc. -- чем выше номер режима, тем меньше время цикла и соответственно выше скорость передачи. ;) Разброс большой -- от порядка мкс до порядка десятка нс.
    Настройка скорости выглядит примерно так -- ATA-устройство репортует свои скоростные возможности по IDENTIFY ATA DEVICE, принимается решение в каком режиме оно будет работать, устройство настраивается на выбранный режим, контроллер программируется на нужный режим работы PIO/DMA и программируются тайминги в соответствии с режимом. Что классно -- эта работа делается BIOS'ом или драйверами (плюс прогами типа IAA) и самому ее делать (как правило) не надо. ;)
    SATA вроде так вообще по интеловским даташитам игнорирует тайминги в pci conf и работает всегда на максимальной возможной скорости обмена, независимо от макс.скорости выбранного режима.
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    не, регистр данных при 32-bit PIO там как раз таки 32-битный, как и обещали. ;) Хз какой смысл в 32-битном датапорте для IDE, если в самом IDE-шлейфе шина данных шириной всего 16 бит. Предполагается, что контроллер будет каким-либо образом буферизовать данные ч/з 16-битный обмен с девайсом, а с host-стороны будет их отдавать/принимать уже по 32-битному каналу, что-то типа этого.
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    имеется ввиду контроллер на самом винчестере, или же Host Adapter?
    Ага, т.е. я могу спокойно общаться с винчестером 32битными значениями?
    М.б. это для совместиомсти с АТА-1?..
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    контроллер = IDE контроллер = хост адаптер. Со стороны же самого девайса настройка выполняется ч/з SET FEATURES.
    да, можно передавать данные 32-битными командами (типа rep insd). Ессно не далее контроллера -- 16 дорожек DDx в шлейфе никто не отменял.
    вряд ли. ;) "Хз" -- имелось ввиду непонятно почему они именно за возможность 32-разрядности обеспокоились, а не взялись за реально узкие места по скорости -- типа пропускной способности интерфейса или особливо скорости чтения c самого винта. Cогласно интеловским чипсетным докам на их встроенных ide-контроллерах этот псевдо-32-битный PIO на самом деле просто генерит 2 16-битных цикла, т.е. по крайней мере на них особого смысла в PIO 32 нет. ;)
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Читаю сейчас стандарт, появилось еще несколько вопросов. Прошу прощения, они немного наивны, я просто плох в электронике...

    В основном не все ясно с DMA:
    1. Multiword DMA: протокол, вроде, выглядит так:
    1. Устройство подает сигнал DMARQ.
    2. Хост отвечает DMACK-.
    3. Начинается передача данных -- хост кладет данные в DD0-DD15 и выставляет сигнал DIOW-, действие повторяется. В случае чтения хост читает DD0-DD15 и выставляет DIOR-, действие повторяется.
    4. Передача завершается когда устройство снимает DMARQ (передача м.б. приостановлена в случае, если хост не генерирует WIOD-/RIOD-, либо если хост снимает DMACK-, в этом случае DMARQ остается выставленным).
    Передача осуществляется 16битными словами.
    Вопрос, собтвенно, в том, насколько я верно понял протокол?

    2. Не уловил разницы между MultiwordDMA & UDMA. Последний, как я понял, быстрее, но не понятно почему. Т.е. в UDMA есть понятие владельца шины -- тот, кому нужны данные должен позаботиться о генерации сигналов STROBE. STROBE -- корень непонимания. Что он собой предствляет и как с его помощью передаются данные? Тем более, что стандарт загадочно вещает:
    Такое впечатление, что за один STROBE передаются два 16битных слова...

    И еще не ясно: UDMA быстрее MultiwordDMA по электрическим характеристикам, или же по логике транспортного протокола?

    Помимо этого удивление вызвало требование размещать устройств она противоположном конце шлейфа если оно одно на канале -- иначе из-за шумов не будет DMA. Я давно не копался внутри компьютера (сейчас есть только бук), но мне кажется, что винчестеры вешают куда попало и они все равно работают в DMA. Или же это требование из разряда де-юро?

    Заранее благодарен :).
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Mika0x65
    Я не углублялся. В такии дебри.
    Я так понимаю эту фразу, что синхронизация идет не только по выстоввленному напряжению, но и по его отсутствию. Получается что передается два 16битных слова.
    Обычно стробирующий сигнал служит для синхронизации шин данных. Он гарантирует что на всех выводах DD0-DD15 будет верно установлен сигнал. Как только установился стробирующий сигнал, это значит что и установились все сигналы на других шинах.
    Код (Text):
    1. П образный сигнал имеет в идеале следующую форму
    2. ____|----|____|----|____
    3. Но на деле строго прямых участков нет. Тоесть существует переходный момент. Он короткий но в сеже есть.
    4. Более реально сигнал изоброжают так.
    5. ____/-----\____/----\____
    6. STROB сигнализирует что сигнал на DD0-DD15 уже установился тоесть момент подъема или спуска прошел.
     
  8. vino

    vino New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2007
    Сообщения:
    19
    Не обещаю вспомнить точно, но разница между MultywordDMA и UDMA в количестве байт за разовую порцию. Сейчас трудно найти не UDMA-контроллеры. Я работал только с UDMA или в PIO.
    Тебе вообще для чего это нужно - изучить или прогу состряпать?
     
  9. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    _BC_
    Прошу прощения, можно ссылку, или хотя бы объясните, откуда у Вас такие данные?
     
  10. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    Mika0x65
    Дело в том, что все ответы можно найти в серии книг М.Гука и в частности в так нелюбимой товарищем _BC_
    энциклопедии "Аппаратные средства IBM PC" 2 издание.
    http://wasm.ru/comment.php?docid=84.
    Ну да оставим детский максимализм в покое и вернемся к нашим баранам...
    На странице 775 вышеупомянутой книги есть прямой ответ на один из Ваших вопросов.
    Книгу уже нельзя купить, но можно скачать. Если не ошибаюсь, видел на какой-то из интернет-библиотек.
    3 дня назад приобрел книгу "Интерфейсы устройств хранения АТА, SCSI и другие" - тоже рекомендую.
    Удачи всем.
     
  11. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    из экспериментов и редких упоминаний в некоторых доках -- 32-битный PIO как-то особо не освещался в передовых источниках информации типа книг Гука, но тем не менее работает. ;) Притом не только на живом железе -- даже вмваре это эмулирует.

    add:
    наверняка такая же как и все остальные -- куча левого текста и никакой конкретики.
     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    vino, изучаю для себя.

    univac, спасибо, нашел третье издание. Данные действительно передаются "по обоим перепадам сигнала *STROBE", что, по-видимому обеспечивает более высокую скорость.

    _BC_, как я понимаю, 32 бита в PIO, заслуга сугубо хост адаптера, который, видимо, осуществляет буферизацию? Если я правильно понял, это позволит разгрузить PCI?
     
  13. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    Mika0x65
    стр. 951 (3-го издания) по поводу подключения к шине 32 PCI

    По поводу 32 разрядного регистра данных - это заблуждение.
    Возможна 32bit передача данных (по 2х16bit, но регистр данных ВСЕГДА 16 bit...)

    По поводу режимов PIO можно почитать еще в книге Владимира Кулакова "Программирование на аппаратном уровне"

    Я думаю, что из-за таких "Экспериментаторов" как _BC_ в рунете в конце 90-х годов появилось миллион статей о том, что звуковая карта SB AWE32 - это первая 32bit карта. На деле это 32 голосная таблица MIDI.

    Книга М.Гука называется "Аппаратные средства IBM PC", и если там будет рассматриваться все варианты обращений к шинам на уровне "логики" - в ней будет не менее 3000 страниц, да и цена возрастет.
    Так и с регистром данных. Он 16 битный для ATA. И если вы решили заложить в него новый (недокументированный) режим, к примеру PIO64бит, (16х4) то к стандарту железа, это никак не относится. Контроллер остался 16 битным.
     
  14. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    Mika0x65
    Если владеете английским, то можно зайти сюда http://t13.org/
     
  15. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Вместо того, чтобы деликатно кидать в меня калом (детский максимализм, "экспериментатор"), предъявил бы что ли в чем конкретно я тут (по твоему мнению) неправ -- это куда лучше твоих постов в стиле 'не-слушай-его-он-не-в-теме-слушай-меня-читай-гука'.
    Итак, в чем же я неправ? В том, что dataport (legacy 1F0h/170h) -- исключительно 16-битный и что PIO32 -- не более чем плод моего больного воображения? Возьми тогда и проверь -- (rep) insd/in eax,dx/outsd/итп в/из датапорт(а). Обозревание результатов опыта своими собственными глазами куда более убедительнее любых слов. И пускай Гук пишет только про 8/16, ни разу не упомянув 32-битные I/O команды (применительно к датапорту) -- доверяй только себе. ;)
    И вот только не надо тут говорить что ты подразумевал 16-битность регистров самих девайсов по ту сторону контроллера, а вовсе не интерфейса со стороны Проц<-->контроллер, напомню:
    Обрати внимание -- речь шла исключительно о хост-стороне. Так бы внимательно читал, что я написал, как гуковские книжки. Не так уж и сложно понять, что я имел ввиду дата порт контроллера, а не регистр внутри IDE-девайса.
     
  16. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    _BC_
    Ну вот и разобрались. А раз я Вас неправильно понял, значит и другие могут неправильно понять.
    А теперь все разложено по полочкам.

    Ну о таком Вам еще задумываться рановато. Изложение материала еще не доведено до проф уровня.

    Ну не надо, так не буду :)
     
  17. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    Mika0x65
    Вас прошу внимательно анализировать информацию. Надеюсь Вам понятно, что некоторые люди могут придумывать новые названия стандартов на основе своего опыта, что может ввести Вас в глубокое заблуждение.
    Стандарта (передачи данных) PIO32 не существует. Если-бы это была недокументированная функция то на сегодняшний день в рунете было бы легко найти информацию по ней.
    То что мой оппонент называет PIO32 ни что иное, как обращение к регистру АТА двойными словами. За 1 32бит операцию процессора и шины PCI по шине ATA последовательно передаются два 16бит слова. Опция в BIOS Setup (IDE 32 bit transfer). Ну и понятно, что со стороны программиста не надо описывать 2 передачи, достаточно указать одну 32битную.

    Читайте литературу. RFC. И никогда не "держите" ни один форум в интернете за основной источник знаний. Только за вспомогательный.
    Удачи
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    а кто сказал что это стандарт? PIO 32 -- это не более чем сокращенная запись выражения "PIO-обмен с портом данных 32-битными значениями". 32-битные I/O-команды, вызывающие 32-битные PCI I/O-циклы 'до' IDE-контроллера (на примере обычных PCI IDE контроллеров даже проще рассматривать, чем с чипсетными). Ну а уж как он там будет с этими данными распоряжаться -- это дело разработчиков контроллера. Может элементарно делить на 16-битные половинки и передавать дальше куда надо, может и как-нибудь там "интеллектуально" кэшировать данные, и тд и тп -- это всё в руках контроллера.
    А инфы и так ничтожно мало почему-то по этой фенечке --
    http://www.google.com/search?hl=ru&ie=UTF-8&oe=UTF-8&q=1F0h%20rep%20insd
    http://www.google.com/search?hl=ru&ie=UTF-8&oe=UTF-8&q=1F0h%20rep%20outsd
     
  19. univac

    univac New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    7
    _BC_
    Удовлетворен. :)
    мир
     
  20. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Немного итогов:

    Основные режимы:

    PIO: Single & Multiple. Single позволяет передавать один сектор за одно прерывание, Multi до 255 секторов за одно прерывание.

    DMA:
    Singleword, Multiword, Ultra. Протоколы, как я понял, выглядят так:

    Singleword (D -- device, H -- Host):
    D: DMARQ установлен.
    H: DMACK установлен.
    H: DIOW -- устройству передается слово, DIOR -- от устройства принимается слово.
    H: DMACK погашен.
    D: DMARQ погашен.
    D: INTRQ сообщает об окончании операции.

    Multiword:
    D: DMARQ установлен.
    H: DMACK установлен.
    H: DIOW, при этом устройству передается слово, DIOR -- от устройства передается слово. Повторяется до тех пор, пока не будет погашен DMARQ либо DMACK.
    D: INTRQ сообщает об окончании операции.

    Ultra:
    D: DMARQ.
    H: DMACK.
    Вот тут я не очень понял: судя по всему, в зависимости от команды READ/WRITE либо хост, либо устройство должны подать сигнал H/DDMARDY после чего "противоположная сторона" начнет генерировать H/DSTROBE и передавать данные. Передача данных приостанавливается снятием H/DMARDY и завершается когда хост генерирует STOP, либо устройство снимает DMARQ.
    D: INTRQ сообщает об окончании операции.

    Собственно, это не вопрос даже, просто для самоконтроля :). Если не прав -- поправьте.