· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› OHCI UHCI EHCI - USB

Посл.отвђт Сообщенiе


Дата: Июл 28, 2004 21:35:51

Люди добрые, помогите
Подскажите чем эти штуки отличаются, если ли разница в низкоуровневом программировании (на уровне ядра ОС) этих чудо спецификаций. И вообще как программно определить что за контроллер у меня (разумеется не используя всякие Device manager в Форточках, а например через Функции PCI BIOS....)

Вобщем смысл такой - По книжке Кулакова - Программирование на аппаратном уровне, разбирался и писал программку работы с USB в DOS`е, но как и его пример мой тоже работать не захотел, вот и решил разобраться в чем дело, на пути столько документации попалось, спецификаций по этому USB - что даже не знаю что есть что, и для чего оно нужно. Начал читать одно, потом посмотрел в другую спецификацию - а они вроде отличается (немного другая структура дискрипторов...) - вот и возник вопрос - как определить что у меня за контроллер что бы программить его по нужной спецификации.

Сочту за честь увидить не только ответы, но и ссылки на документацию по этому вопросу (определения "типа" контроллера)

Заранее благодарю


Дата: Авг 1, 2004 14:58:36

Видать очень нужно если на нескольких форумах абсалютно одинаковые темы
Сначала определяеш хост котроллер - по класскоду - пом инецилизируеш - настраиваеш - буфер кадров - и готовиш дескрипторы - примеры кулакова работают - только там есть пара ошибок
Вот тебе таблица клас кодов - маленькая правда, если перебарю лень то напишу о всём с чем я разобрался - удачи

_1561871049__Class_Code_Tables.zip


Дата: Авг 3, 2004 18:58:54

Спасибо тебе Same, хоть ты откликнулся
Но дело в том что изучая Спецификации USB и PCI - я сам определил какие классы устройств надо искать, как организована работа с УСБ - смысл (просто оно никак не хочет работать)
Но у меня ощущение такое что уже скоро заработает

(Я нашел УСБ контроллер (у меня он Intel, значит UHCI), начинаю нумеровать, создавая TD на который указывает QH (для Setup-пакета) и на QH указывает FrameBufferAddr. Но здесь я пока точно не разобрался как отслеживать что мой ТД обработан, и что нумерация прошла....
Короче разбираюсь потехонечку, пока все молчали - смирился с мыслью что придется все самому делать, и делаю :)...

PS: в спецификации pci22.pdf - больше классов описано :) (стр.257)
(хотя по УСБ - всего лишь 6)

Буду рад с тобой побеседовать на эту тему когда разберусь. Интересно всякие штуковины узнать которые пропустил....


Дата: Авг 10, 2004 18:11:13

Same
Где же ты :*) не мог бы поделиться примерчиком (работающем)
А то у меня что то не получается
1. Инициализировал FrameList, записал туда адрес QH (со сброшенным битом T)
2. Инициализировал QH установив бит T в заголовке указателя на следующий QH и указав адрес первого TD (и сброшенный бит T) (указатель по вертикали)
3. Инициализировал 4-е штуки TD
-- указав TD1 адрес дискриптора SetAddress, размер передаваемых байт - 7 (8-1), PID=2Dh (Setup), Установленным битом 23 регистра состояния и управления (Active), и указав следующим дискриптор TD2
-- TD2 - буфер приема (ответа), размер 7FFh (ноль), PID=69 (IN), и указывает на буфер, указывает на следующий TD3
-- TD3 - конфигурирование, указывает на дискпритор SetConfigure, размер 7 (8-1), PID=2Dh (Setup), указывает на следующий TD4
-- TD4 - буфер (ждемс ответ), установлен бит T, размер 7FFh, PID=69h, указывает на буфер

Так вот после включения RS (бит в регистре USBCMD), номер фрейма увеличивается, но в дискрипторах бит 23 регистра состояния не изменен (то есть он все еще Activate)

Вот не знаю что я делаю не так, пробовал создавать Изохронную передачу, без QH, указывая только каждой записи в фрейм листе свой TD, тогда вроде бит 23 - Activate сбрасывался, но по спецификации я понял что для Нумерации устройств (то есть для Конфигурирования) использовать изохронную передачу нельзя.

Поможите люди добрые. Время поджимает а с этой какой уже долго вожусь, хотябы намекните как надо правильно делать, или уж если в лом писать - поделитесь каким нибудь примерчиком который точно работает.

(Кстате нашел в ядре Линуха исходники с описанием всех классов PCI, и хозяинов DeviceID и названиями - дохрена всего....)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.059