Перейти к содержанию
    

Попробовал побаловаться с 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подвожу итог вчерашним размышлениям (старый посто не удаляю, вдруг кто то еще решит пойти по этому пути).

Главный вывод - IDE это просто скоростной двунаправленный 16 разрядный порт с 5 разрядной адресацией внешних устройств с некоторыми дополнительными сигналами, которые в данном контексте можно вообще не рассматривать. Если вы не делаете аналог жесткого диска, то этой информации достаточно. Все регистры и все команды относятся уже к устройству, подключенному к шине.

Но в этом режиме добиться времени цикла менее 1 мкс невозможно, так как контроллер IDE, не обнаружив диска и информации о нем, оставляет режим обмена по умолчанию - PIO0 с временем цикла 600 нс. Для более скоростной работы надо ставить активное внешнее устройство, практически эмулировать HDD. Тогда можно загнать контроллер в режим более скоростной, или вообще обеспечить режим DMA. Но тут уже нужны ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 altmer, прошу вас описать что у вас заработало и как после того, как вы все ноги данных подтянули. Особенно интересует: какие минимальные "телодвижения" со стороны IDE устройства необходимо выполнить, чтоб IDE-Host вошел в режим, хотябы PIO4; возможно ли после инициализации хоста БИОСом его программное переконфигурирование; если IDE устройства отсутствуют на шлейфе, то в какой режим входит хост...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частично ответ в моем предыдущем посте, а минимально надо дать ответ хосту на запрос информации о диске, что он поддерживает DMA или PIO4(5), даже если самого диска нет, но ответ такой надо сформировать. В настоящий момент над этим работаю.

Еще наверно можно грубо влезть в регистры контроллера IDE, но у меня пока нет такой информации.

Altmer, похоже, сюда уже не заглядывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обнаружился еще один, достаточно простой вариант - между шиной IDE и внешними устройствами подключается двунаправленный шинный формирователь на два устройства. По умолчанию при включении питания подключается к одному каналу любой (даже запиленный и рассыпающийся диск), система опознает устройство и устанавливает режим PIO5. Далее переключаете формирователь на свое устройство и работаете с быстродействующим каналом. Реальное время опроса внешнего у-ва составило уже всего 700 нс. (Для DMA этот номер не пройдет, внешний контроллер придется все равно городить, если надо еще быстрее)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оперируя терминами книги:

В. Кулаков Программирование на аппаратном уровне.

(хттп://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 - еще рабочая ссылка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И Где можно найти временные диаграммы этих служебных сигналов в совокупности с другими.

 

В совокупности со ВСЕМИ другими можно найти тут: 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как то до регистров контроллера IDE можно добраться, как например до регистров USB контроллеров?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Насчет "может "заподозрить" " можно подробнее....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 устройства. Если устройство не отвечает на эти комманды или отвечает неправильно, то хост, вероятнее всего, сделает вывод, что устройство неисправно со всеми вытекающими.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В принципе, я тут посидел, подумал, имитировать наличие устройства с PIO > 0 можно и не на ПЛИС, а микроконтроллере. Он должен отследить прием обязательных команд и ответить на них заранее заданным способом. В этом случае большого быстродействия не требуется, в крайнем случае по протоколу можно попризадержать IORDY. А сама прога работает на пределе с быстродействующим буфером. (Это я для своего случая - быстрый опрос 8 внешних линий для снятия протоколов).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Coryphae: Вы пишите программу для работы с ATA устройством или Вы разрабатываете ATA устройство?

Я разрабатываю устройство IDE, точнее пытаюсь задействовать IDE согласно САБЖу, ибо, IDE пока везде есть и имеет достаточную для меня скорость.

 

Задаю так много вопросов, т.к. пока нет возможности проверить на практике (железо в прожекте), ну, и конечно, сужаю область поиска.

 

IDENTIFY DEVICE (ECh) не является единственной служебной командой. Есть ещё команды с признаком ND. Их в таблице 6.43 пять штук.

 

За это спасибо, как то не досмотрел.

 

В принципе, я тут посидел, подумал, имитировать наличие устройства с PIO > 0 можно и не на ПЛИС, а микроконтроллере.

В принципе можно, но если делать на ПЛИС, то можно, вероятно, привинтить ПЗУ через ПЛИС для передачи "МЕГА пачки". Все остальные комманды придется по-любому отрабатывать в быстрых режимах на ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто-нибудь рассматривал возможность начальной "насильственной" конфигурации хоста IDE при помощи настроек BIOS'а?

Может и не надо передавать эту "МЕГА пачку"?

ЗЫ

Сомневаюсь в современных мат. платах. Они могут "передумать" еще много раз во время загрузки системы, и сбросить host. Хотя с платами 1ых пентиумов, где уже встречаются UDMA33, возможно, что-то может получиться =\

Изменено пользователем Coryphae

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На БИОС современные операционки частенько просто плюют и пожменяют его функции своими. Когда с клавой разбирался, оказалось, что ее один раз инициализирует БИОС, а потом еще раз операционка. Так что с ИДЕ тоже так скорей всего не пройдет и дело тут не в матери, а в операционке. А вот доступ к регистрам ИДЕ-контроллера, который на материнке, тут шанс реальнее. Только описания нигде найти не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был проведен следующий эксперимент: в BIOSе мат. платы для PIII (точно не знаю какой) принудительно менялись режимы Secondary Master канала, в отсутствие каких либо устройств на шлейфе. Даже устанавливался режим (disable Secondary Master). Производилась запись двубайтного слова в порт 0х170. Контроль записи производился осциллографом по линии d[7] (3 нога разъема IDE уст-ва).

Результаты: В любом режиме, установленном в BIOSe, в отсутствие устройств, IDE-host переходил в режим PIO-0. Вывод об установленном режиме делался на основе длительности бита, установленного на линии, которая, почему-то, составляла 1 мкс.

Изменено пользователем Coryphae

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...