GeorgeV 0 24 октября, 2006 Опубликовано 24 октября, 2006 · Жалоба Попробовал побаловаться с IDE портом. Пробовал записывать считывать что-нибудь в регистр данных, на шлейфе на осциллографе никаких сигналов. (Шлейф вторым концом никуда не подключен). Означает ли это, что если устройство физически не обнаружено в каком то канале, то регистры этого канала отключаются? Считывание регистра ошибок на таком шлейфе дало 8E (или E8, точно уже не помню), когда подключил к сидюку, ошибка 18 в регистре. Чтение данных всегда давало слово 0x0000FFFF. И присоединяюсь к предыдущему посту, может кто-то кинет кусок живой схемы. Еще вопросы по ходу разбирательства: 1. Откуда ни шине берутся сигналы DIOR-, DIOW-, Reset, т.е. по какому алгоритму они формируются при записи команды в регистр команд? 2. Откуда берутся сигналы BSY, DRDY, DRQ готовности устройства, если на шине вроде присутствует один сигнал IORDY? 3. Если подключен не жесткий диск, а что то другое, все равно надо считывать с устройства 512 байт, как с сектора или необязательно? Я понимаю, чтто все это как то описано в стандарте, но пока я в двух томах не разобрался, особенно с графами состояний, может кто на пальцах объяснит простейший PIO обмен. Очередное добавление (пока разговор самого с собой). Я видимо заблуждаюсь в корне и все эти регистры находятся непосредственно на устройстве. Комп предоставляет только адресное пространство и транслирует адреса 1F0-1F7 (170-177) в сигналы CS0, CS1, DA0-DA2 шины IDE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 25 октября, 2006 Опубликовано 25 октября, 2006 · Жалоба Подвожу итог вчерашним размышлениям (старый посто не удаляю, вдруг кто то еще решит пойти по этому пути). Главный вывод - IDE это просто скоростной двунаправленный 16 разрядный порт с 5 разрядной адресацией внешних устройств с некоторыми дополнительными сигналами, которые в данном контексте можно вообще не рассматривать. Если вы не делаете аналог жесткого диска, то этой информации достаточно. Все регистры и все команды относятся уже к устройству, подключенному к шине. Но в этом режиме добиться времени цикла менее 1 мкс невозможно, так как контроллер IDE, не обнаружив диска и информации о нем, оставляет режим обмена по умолчанию - PIO0 с временем цикла 600 нс. Для более скоростной работы надо ставить активное внешнее устройство, практически эмулировать HDD. Тогда можно загнать контроллер в режим более скоростной, или вообще обеспечить режим DMA. Но тут уже нужны ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 27 октября, 2006 Опубликовано 27 октября, 2006 · Жалоба 2 altmer, прошу вас описать что у вас заработало и как после того, как вы все ноги данных подтянули. Особенно интересует: какие минимальные "телодвижения" со стороны IDE устройства необходимо выполнить, чтоб IDE-Host вошел в режим, хотябы PIO4; возможно ли после инициализации хоста БИОСом его программное переконфигурирование; если IDE устройства отсутствуют на шлейфе, то в какой режим входит хост... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Частично ответ в моем предыдущем посте, а минимально надо дать ответ хосту на запрос информации о диске, что он поддерживает DMA или PIO4(5), даже если самого диска нет, но ответ такой надо сформировать. В настоящий момент над этим работаю. Еще наверно можно грубо влезть в регистры контроллера IDE, но у меня пока нет такой информации. Altmer, похоже, сюда уже не заглядывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 30 октября, 2006 Опубликовано 30 октября, 2006 · Жалоба Обнаружился еще один, достаточно простой вариант - между шиной IDE и внешними устройствами подключается двунаправленный шинный формирователь на два устройства. По умолчанию при включении питания подключается к одному каналу любой (даже запиленный и рассыпающийся диск), система опознает устройство и устанавливает режим PIO5. Далее переключаете формирователь на свое устройство и работаете с быстродействующим каналом. Реальное время опроса внешнего у-ва составило уже всего 700 нс. (Для DMA этот номер не пройдет, внешний контроллер придется все равно городить, если надо еще быстрее) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 31 октября, 2006 Опубликовано 31 октября, 2006 · Жалоба Оперируя терминами книги: В. Кулаков Программирование на аппаратном уровне. (хттп://rapidshare.de/files/4565817/kulakov.rar.html - еще рабочая ссылка), следует чтобы IDE-устройство корректно отвечало на ОБЯЗАТЕЛЬНУЮ комманду IDENTIFY_DEVICE Таблица 6.43 (единственная служебная команда в режиме PIO (ввод данных PI)). По этой команде устройство должно передать МЕГА пачку данных аж из 256 2х байтных слов (Таблица 6.44). Так ли я понимаю? И еще вопросик? Номер комманды IDE-устройство принимает по шине данных при состоянии служебных проволок CS0#=0 CS1#=1 DA2=1 DA1=1 DA0=1 (Уже в терминах книги Гука)? И Где можно найти временные диаграммы этих служебных сигналов в совокупности с другими. З.Ы. Книгу Гука (толстенную такую, 2006 г.) можно нарыть тут: хттп://rapidshare.de/files/34181115/apparatnie_sretstva_ibm_warezteam.ws.rar - еще рабочая ссылка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexB 0 31 октября, 2006 Опубликовано 31 октября, 2006 · Жалоба И Где можно найти временные диаграммы этих служебных сигналов в совокупности с другими. В совокупности со ВСЕМИ другими можно найти тут: www.t13.org Например: http://www.t13.org/project/d1410r3b-ATA-ATAPI-6.pdf страница 374 в документе (388 по Акробату) и дальше. следует чтобы IDE-устройство корректно отвечало на ОБЯЗАТЕЛЬНУЮ комманду IDENTIFY_DEVICE Таблица 6.43 (единственная служебная команда в режиме PIO (ввод данных PI)). По этой команде устройство должно передать МЕГА пачку данных аж из 256 2х байтных слов (Таблица 6.44). Так ли я понимаю? Совершенно верно. Именно на основании информации из этой "МЕГА пачки" хост может применить к устройству режим интерфейса отличный от PIO MODE 0. Команда IDENTIFY DEVICE (ECh) является далеко не единственной служебной и обязательной для режима PIO. В этом Вы можете легко убедиться в упомянутом выше документе на странице 476 (490 по Акробату), где расположена сводная таблица кодов комманд. Команды M = Mandatory обязательны к исполнению (по крайней мере - необходимо рапортовать хосту об их успешном выполнении). В противном случае хост может "заподозрить" Ваше устройство в "странном" поведении и :twak: опять PIO MODE 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 1 ноября, 2006 Опубликовано 1 ноября, 2006 · Жалоба А как то до регистров контроллера IDE можно добраться, как например до регистров USB контроллеров? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 1 ноября, 2006 Опубликовано 1 ноября, 2006 · Жалоба 2 AlexB, У меня была простая логика (может я ошибаюсь - вы поправите): Раз изначально хост контроллер работает в режиме PIO, то для инициализации он может оперировать только коммандами с признаками PI, PO (по таблице 6.43). Единственной обязательной СЛУЖЕБНОЙ коммандой (не относящейся, непосредственно, к чтению/записи) является IDENTIFY DEVICE (ECh). И если необходимо инициализировать IDE-устройство в любом из PIO режимов, то оно должно корректно обработать эту комманду. А далее (возможно, что это лишь мечта) можно производить чтение/запись (не блочно) программно при помощи комманд REP OUTS/REP INS по соответствующему порту регистра данных. Конечно же чтении/записи IDE-устройство должно правильно отрабатывать сигналы по линиям CS0# CS1# DA2 DA1 DA0, и DIOR# DIOW# IORDY Насчет "может "заподозрить" " можно подробнее.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexB 0 1 ноября, 2006 Опубликовано 1 ноября, 2006 · Жалоба 2 Coryphae: Вы пишите программу для работы с ATA устройством или Вы разрабатываете ATA устройство? В первом случае творение гражданина Кулакова, вероятно, является достаточным источником информации (если закрыть глаза на "рядовых пользователей", коими он видит своих читателей). Применяете IDENTIFY DEVICE (ECh) "при запуске программы", определяете наличие устройства и его параметры, а дальше с чистой совестью читаете или пишите данные понравившимся способом. Если же Вы разрабатываете ATA устройство, то изучение http://www.t13.org/project/d1410r3b-ATA-ATAPI-6.pdf Вам просто необходимо на начальном этапе. Насчет "может "заподозрить" " можно подробнее.... IDENTIFY DEVICE (ECh) не является единственной служебной командой. Есть ещё команды с признаком ND. Их в таблице 6.43 пять штук. И каждая из них имеет свой набор данных, обмен которыми происходит при помощи регистров ATA устройства. Если устройство не отвечает на эти комманды или отвечает неправильно, то хост, вероятнее всего, сделает вывод, что устройство неисправно со всеми вытекающими. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 2 ноября, 2006 Опубликовано 2 ноября, 2006 · Жалоба В принципе, я тут посидел, подумал, имитировать наличие устройства с PIO > 0 можно и не на ПЛИС, а микроконтроллере. Он должен отследить прием обязательных команд и ответить на них заранее заданным способом. В этом случае большого быстродействия не требуется, в крайнем случае по протоколу можно попризадержать IORDY. А сама прога работает на пределе с быстродействующим буфером. (Это я для своего случая - быстрый опрос 8 внешних линий для снятия протоколов). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 2 ноября, 2006 Опубликовано 2 ноября, 2006 · Жалоба 2 Coryphae: Вы пишите программу для работы с ATA устройством или Вы разрабатываете ATA устройство? Я разрабатываю устройство IDE, точнее пытаюсь задействовать IDE согласно САБЖу, ибо, IDE пока везде есть и имеет достаточную для меня скорость. Задаю так много вопросов, т.к. пока нет возможности проверить на практике (железо в прожекте), ну, и конечно, сужаю область поиска. IDENTIFY DEVICE (ECh) не является единственной служебной командой. Есть ещё команды с признаком ND. Их в таблице 6.43 пять штук. За это спасибо, как то не досмотрел. В принципе, я тут посидел, подумал, имитировать наличие устройства с PIO > 0 можно и не на ПЛИС, а микроконтроллере. В принципе можно, но если делать на ПЛИС, то можно, вероятно, привинтить ПЗУ через ПЛИС для передачи "МЕГА пачки". Все остальные комманды придется по-любому отрабатывать в быстрых режимах на ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 (изменено) · Жалоба Кто-нибудь рассматривал возможность начальной "насильственной" конфигурации хоста IDE при помощи настроек BIOS'а? Может и не надо передавать эту "МЕГА пачку"? ЗЫ Сомневаюсь в современных мат. платах. Они могут "передумать" еще много раз во время загрузки системы, и сбросить host. Хотя с платами 1ых пентиумов, где уже встречаются UDMA33, возможно, что-то может получиться =\ Изменено 10 ноября, 2006 пользователем Coryphae Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgeV 0 13 ноября, 2006 Опубликовано 13 ноября, 2006 · Жалоба На БИОС современные операционки частенько просто плюют и пожменяют его функции своими. Когда с клавой разбирался, оказалось, что ее один раз инициализирует БИОС, а потом еще раз операционка. Так что с ИДЕ тоже так скорей всего не пройдет и дело тут не в матери, а в операционке. А вот доступ к регистрам ИДЕ-контроллера, который на материнке, тут шанс реальнее. Только описания нигде найти не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Coryphae 0 19 ноября, 2006 Опубликовано 19 ноября, 2006 (изменено) · Жалоба Был проведен следующий эксперимент: в BIOSе мат. платы для PIII (точно не знаю какой) принудительно менялись режимы Secondary Master канала, в отсутствие каких либо устройств на шлейфе. Даже устанавливался режим (disable Secondary Master). Производилась запись двубайтного слова в порт 0х170. Контроль записи производился осциллографом по линии d[7] (3 нога разъема IDE уст-ва). Результаты: В любом режиме, установленном в BIOSe, в отсутствие устройств, IDE-host переходил в режим PIO-0. Вывод об установленном режиме делался на основе длительности бита, установленного на линии, которая, почему-то, составляла 1 мкс. Изменено 19 ноября, 2006 пользователем Coryphae Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться