Мое почтение всем. Читаю сейчас про АТА, не могу понять несколько вещей. Инструкции 'insw', 'outsw'. Получается, что эти команды должны работать на частоте PCI? Поясню: как я понял, адаптеры АТА-1 и АТА-2 работают на частоте шины ISA(EISA) и PCI соотвественно. И подчиненные им устройства должны работать на этой же частоте. Т.е. процессор учитывает скорость шины при выполнении 'ins'/'outs'? Разрядность. Не совсем ясно, в чем польза более высокой разрядности адаптера -- регистр данных так и остается 16 бит. Писать в него, как я понимаю, можно только словами. А чем смысл повышения разрядности? Или же это сделано только для того, чтобы повесить адаптер на PCI? Заранее благодарен .
конкретное время выполнения одной итерации 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 и работает всегда на максимальной возможной скорости обмена, независимо от макс.скорости выбранного режима.
не, регистр данных при 32-bit PIO там как раз таки 32-битный, как и обещали. Хз какой смысл в 32-битном датапорте для IDE, если в самом IDE-шлейфе шина данных шириной всего 16 бит. Предполагается, что контроллер будет каким-либо образом буферизовать данные ч/з 16-битный обмен с девайсом, а с host-стороны будет их отдавать/принимать уже по 32-битному каналу, что-то типа этого.
имеется ввиду контроллер на самом винчестере, или же Host Adapter? Ага, т.е. я могу спокойно общаться с винчестером 32битными значениями? М.б. это для совместиомсти с АТА-1?..
контроллер = IDE контроллер = хост адаптер. Со стороны же самого девайса настройка выполняется ч/з SET FEATURES. да, можно передавать данные 32-битными командами (типа rep insd). Ессно не далее контроллера -- 16 дорожек DDx в шлейфе никто не отменял. вряд ли. "Хз" -- имелось ввиду непонятно почему они именно за возможность 32-разрядности обеспокоились, а не взялись за реально узкие места по скорости -- типа пропускной способности интерфейса или особливо скорости чтения c самого винта. Cогласно интеловским чипсетным докам на их встроенных ide-контроллерах этот псевдо-32-битный PIO на самом деле просто генерит 2 16-битных цикла, т.е. по крайней мере на них особого смысла в PIO 32 нет.
Читаю сейчас стандарт, появилось еще несколько вопросов. Прошу прощения, они немного наивны, я просто плох в электронике... В основном не все ясно с 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. Или же это требование из разряда де-юро? Заранее благодарен .
Mika0x65 Я не углублялся. В такии дебри. Я так понимаю эту фразу, что синхронизация идет не только по выстоввленному напряжению, но и по его отсутствию. Получается что передается два 16битных слова. Обычно стробирующий сигнал служит для синхронизации шин данных. Он гарантирует что на всех выводах DD0-DD15 будет верно установлен сигнал. Как только установился стробирующий сигнал, это значит что и установились все сигналы на других шинах. Код (Text): П образный сигнал имеет в идеале следующую форму ____|----|____|----|____ Но на деле строго прямых участков нет. Тоесть существует переходный момент. Он короткий но в сеже есть. Более реально сигнал изоброжают так. ____/-----\____/----\____ STROB сигнализирует что сигнал на DD0-DD15 уже установился тоесть момент подъема или спуска прошел.
Не обещаю вспомнить точно, но разница между MultywordDMA и UDMA в количестве байт за разовую порцию. Сейчас трудно найти не UDMA-контроллеры. Я работал только с UDMA или в PIO. Тебе вообще для чего это нужно - изучить или прогу состряпать?
Mika0x65 Дело в том, что все ответы можно найти в серии книг М.Гука и в частности в так нелюбимой товарищем _BC_ энциклопедии "Аппаратные средства IBM PC" 2 издание. http://wasm.ru/comment.php?docid=84. Ну да оставим детский максимализм в покое и вернемся к нашим баранам... На странице 775 вышеупомянутой книги есть прямой ответ на один из Ваших вопросов. Книгу уже нельзя купить, но можно скачать. Если не ошибаюсь, видел на какой-то из интернет-библиотек. 3 дня назад приобрел книгу "Интерфейсы устройств хранения АТА, SCSI и другие" - тоже рекомендую. Удачи всем.
из экспериментов и редких упоминаний в некоторых доках -- 32-битный PIO как-то особо не освещался в передовых источниках информации типа книг Гука, но тем не менее работает. Притом не только на живом железе -- даже вмваре это эмулирует. add: наверняка такая же как и все остальные -- куча левого текста и никакой конкретики.
vino, изучаю для себя. univac, спасибо, нашел третье издание. Данные действительно передаются "по обоим перепадам сигнала *STROBE", что, по-видимому обеспечивает более высокую скорость. _BC_, как я понимаю, 32 бита в PIO, заслуга сугубо хост адаптера, который, видимо, осуществляет буферизацию? Если я правильно понял, это позволит разгрузить PCI?
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 битным.
Вместо того, чтобы деликатно кидать в меня калом (детский максимализм, "экспериментатор"), предъявил бы что ли в чем конкретно я тут (по твоему мнению) неправ -- это куда лучше твоих постов в стиле 'не-слушай-его-он-не-в-теме-слушай-меня-читай-гука'. Итак, в чем же я неправ? В том, что dataport (legacy 1F0h/170h) -- исключительно 16-битный и что PIO32 -- не более чем плод моего больного воображения? Возьми тогда и проверь -- (rep) insd/in eax,dx/outsd/итп в/из датапорт(а). Обозревание результатов опыта своими собственными глазами куда более убедительнее любых слов. И пускай Гук пишет только про 8/16, ни разу не упомянув 32-битные I/O команды (применительно к датапорту) -- доверяй только себе. И вот только не надо тут говорить что ты подразумевал 16-битность регистров самих девайсов по ту сторону контроллера, а вовсе не интерфейса со стороны Проц<-->контроллер, напомню: Обрати внимание -- речь шла исключительно о хост-стороне. Так бы внимательно читал, что я написал, как гуковские книжки. Не так уж и сложно понять, что я имел ввиду дата порт контроллера, а не регистр внутри IDE-девайса.
_BC_ Ну вот и разобрались. А раз я Вас неправильно понял, значит и другие могут неправильно понять. А теперь все разложено по полочкам. Ну о таком Вам еще задумываться рановато. Изложение материала еще не доведено до проф уровня. Ну не надо, так не буду
Mika0x65 Вас прошу внимательно анализировать информацию. Надеюсь Вам понятно, что некоторые люди могут придумывать новые названия стандартов на основе своего опыта, что может ввести Вас в глубокое заблуждение. Стандарта (передачи данных) PIO32 не существует. Если-бы это была недокументированная функция то на сегодняшний день в рунете было бы легко найти информацию по ней. То что мой оппонент называет PIO32 ни что иное, как обращение к регистру АТА двойными словами. За 1 32бит операцию процессора и шины PCI по шине ATA последовательно передаются два 16бит слова. Опция в BIOS Setup (IDE 32 bit transfer). Ну и понятно, что со стороны программиста не надо описывать 2 передачи, достаточно указать одну 32битную. Читайте литературу. RFC. И никогда не "держите" ни один форум в интернете за основной источник знаний. Только за вспомогательный. Удачи
а кто сказал что это стандарт? 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
Немного итогов: Основные режимы: 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 сообщает об окончании операции. Собственно, это не вопрос даже, просто для самоконтроля . Если не прав -- поправьте.