OHCI USB
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.113] |
|
|
Перед отправкой сообщения внимательно прочтите правила раздела!!!

| Страницы: (14) « Первая ... 6 7 [8] 9 10 ... 13 14 все ( Перейти к последнему сообщению ) |
OHCI USB
|
Сообщ.
#106
,
|
|
|
|
Слушай, у меня тут страннось образовалась... с твоей прогой от "от 13.10.05 все работает отлично, а с прогой от 14.10.05 Kingstone опять виснет на Detecting Devices... в чем у них разница???
Я, просто, нарвался на странный глюк: мой драйвер со всеми флешками работает нормально, а с Kingstone не хочет! При SET_ADDRESS говорит, что устройство не отвечает никак не могу понять, в чем дело Ресет порта делаю точно, как ты писал! Вот он на асме: ![]() ![]() ;в AX - номер порта для ресета UHC_PortReset PROC push EAX push EDX mov USB_TransErr, 0 mov DX, UHC_Address add DX, UHC_Port0Reg shl AX, 1 ;AX = AX*2 - смещение на регистр порта add DX, AX mov AX, 200h ;устанавливаем ресет out DX, AX mov AX, 20 call PTDelay ;за PTDelay спасибо Jin X'у mov AX, 0 out DX, AX ;снимаем ресет mov CX, 50 ;ждем установки флага подключенного устройства wait_res_end: mov AX, 1 call PTDelay ;1ms delay in AX, DX and AX, 1 cmp AX, 1 ;флаг установился, выходми je res_done loop wait_res_end jmp res_err res_done: mov AX, 0Eh ;включаем порт out DX, AX ;ждем 20ms для уверенности, что порт включился mov AX, 20 call PTDelay in AX, DX and AX, 4 cmp AX, 0 ;точно включился? je res_err ;нет - выходим с ошибкой jmp res_finish ;да - выходим без ошибки res_err: mov USB_TransErr, 1 res_finish: pop EDX pop EAX ret UHC_PortReset ENDP может быть я совсем уже глючу...? |
|
Сообщ.
#107
,
|
|
|
|
А разницы там никакой...
Только во второй дескриптор 0 строки не получается. Ресет у тебя вроди нормальный... Странно это всё как-то. Я сейчас буду разбираться - новый вариант часа через полтора думаю выложу. Вот покопался немного... В архиве три варианта. Если какой вдруг заработает, проверь на всех устройствах. Если обнаружится рабочий - потом сообщу в чём косяк был. Ну а если нет - буду искать дальше. Да, по поводу твоего вопроса - если дело всё-же дойдёт до стека, то скорее всего буду делать резидентом. Прикреплённый файл uhci.rar (9.06 Кбайт, скачиваний: 188)
|
|
Сообщ.
#108
,
|
|
|
|
Мдя..... все 3 варианта работают на всех флешках! Что бы это значило?
|
|
Сообщ.
#109
,
|
|
|
|
Ну это мне вообще не понятно...
Я ради прикола в ohci_v1 оставил всё как было - только откомпилировал заново. Видать прикол получился... В остальных двух поувеличивал время ожидания кругом с 20мс до 50мс. Скорее всего проблеммы у тебя с транзакцией. Я создаю транзакцию с0 счётчиком ошибок = 3, и выхожу из цикла ожидания либо если всё Ок, либо при STALL. Плюс при конфигурировании устройства все транзакции повторяю по три раза. Т.е. например делаю SET_ADDRESS, если ошибка - попробовать ещё раз. И так три раза. Может устройство тормозит немного... |
|
Сообщ.
#110
,
|
|
|
|
cppasm спасай!!!
Я уже запарился с этим контроллером (на сколько все было проще с OHC)! Сейчас у меня 2-е глобальные проблемы: 1. SETUP посылки для Kingston'а не проходят (устройство не отвечает). SET_ADDRESS пробовал делать 10(!) раз подряд с проверкой на ошибки... нифига! Каждый раз устройство не отвечает. 2. Работаем с той флешкой от которой получили все нужные дескрипторы. Надо на Bulk OUT точку послать структуру CBW (Bulk Only Transport) с командой Inquie (опишу дальше). За тем с Bulk IN точки первым TD принимаем 36 байт информации, а следующим TD принимаем структуру CSW (см. Bulk Only Transport). Так у меня работало при OHC контроллере... В этом же получается какая-то фигня, в ответ на первый TD для Bulk IN точки мне приходит сразу CSW!!! Хотя должно быть 36 байт данных... Так вот, по поводу первой траблы, можешь поделится исходником функции, которая транзакцию осуществляет? А по поводу второго, если не влом, попробуй ты проделать выше описаные действия вот в hex'е вид CBW, который надо послать на Bulk OUT точку (длина CBW - 31 байт): ![]() ![]() 00000000: 55 53 42 43 01 00 00 00 24 00 00 00 80 00 06 12 00000001: 01 00 00 24 00 00 00 00 00 00 00 00 00 00 00 а ответный CSW выглядит вот так (его длина 13 байт): ![]() ![]() 00000000: 55 53 42 53 01 00 00 00 00 00 00 00 00 Попробуй плиз, а то я совсем уже потерялся... |
|
Сообщ.
#111
,
|
|
|
|
Исходники мылом.
Насчёт второй проблеммы - я такое делал, всё было Ок. Проверь код возврата после транзакции, может проясниться чего. По-моему OHCI NAK не так обрабатывает. Т.е. его в UHCI тоже ошибкой считать не надо - это достаточно легко достигается установкой счётчика ошибок в 3. При NAK он не уменьшается и транзакция остаётся активной, а при других ошибках уменьшается. Когда он падает в ноль - устанавливается STALL. Вот по нему и надо делать выход. Короче почитай исходники. Может что прояснится. Я может потом код чтения инфы с флэшки выложу. Просто после модификации дров я его не пробовал. А насчёт команд флэшки - можешь не описывать, у меня дока есть |
|
Сообщ.
#112
,
|
|
|
|
За исходник, еще раз спасибо!
А с чтением флешки, я нашел в чем трабла, но пока не понял как ее исправить После посылки CBW он почему-то пропускает первый входящий пакет! Я читал сектор с флешки, 512 байт - 8 дескрипторов на 64 байта + 9-й дескриптор - запрос CSW. Так он исполнял 7 дескрипторов и на 8-м получал CSW. Когда я посмотрел, что считалось, там не хватало первых 64 байтов...Цитата cppasm @ А насчёт команд флэшки - можешь не описывать, у меня дока есть А у тебя какая дока? Случайно не описание SCSI 2 протокола? Если нет, то кинь ссылочку ПЛЗ. |
|
Сообщ.
#113
,
|
|
|
|
Цитата Gerret @ Случайно не описание SCSI 2 протокола? Случайно именно она ![]() Насчёт пропуска пакета - ты делаешь ресет флэшки перед использованием? Надо сделать общий ресет, а потом CLEAR_FEATURE для bulk in и bulk out. И тригер данных при первом использовании должен быть 0, а потом меняется. Причём сохраняется между транзакциями. Т.е. если ты скажем считал n байт и последний дескриптор имел тригер 0, то при следующей транзакции он должен быть 1. |
|
Сообщ.
#114
,
|
|
|
|
Цитата cppasm @ Причём сохраняется между транзакциями. Т.е. если ты скажем считал n байт и последний дескриптор имел тригер 0, то при следующей транзакции он должен быть 1. АААА!!! Спасибо!!! А где сие написано? Первый раз слышу. А то, даже в OHC драйвере мне приходилось перед каждой транзакцией делать CLEAR_FEATURE для обоих точек. Я еще думал, почему так получается?.. |
|
Сообщ.
#115
,
|
|
|
|
Цитата Gerret @ А где сие написано? Ну в стандарте где гаписано я не скажу... потому что сам не знаю Лично я это видел в книге Кулакова. Ну и по личному опыту - просто так работает, а если не сохранять тригер то нет. Но первоисточник в принципе книга Кулакова. |
|
Сообщ.
#116
,
|
|
|
|
Тоесть, надо сохранять триггеры для каждой точки? Для Bulk IN свой и для Bulk OUT сыой, правилбно я понял?
В понедельник на работу приеду, попробую... если с этой штукой у меня заработает кардридер, с меня бутылка Как у тебя дела с OHCI? |
|
Сообщ.
#117
,
|
|
|
|
Цитата Gerret @ Тоесть, надо сохранять триггеры для каждой точки? Для Bulk IN свой и для Bulk OUT сыой, правилбно я понял? Да, именно так. Цитата Gerret @ Как у тебя дела с OHCI? Да нормально всё... Я потестировал на USB мыши и на флэшке - всё работает. Сейчас занимаюсь написанием bulk_read и bulk_write запросов. Ну и с флэшкой хочу немного пообщаться. На UHCI уже Inquiry попробовал - всё работает. У меня только прога не универсальная пока - без автодетекта. Ну типа параметры конечных точек руками забиваю в коде. Но это пока. А так всё Ок. И такой ещё вопрос: ты не знаешь где можно найти документацию на SCSI transparent command set. А то я команды беру из спецификации ATAPI и usbmass-ufi10 спецификации. А хотелось бы документа по чистому SCSI так сказать |
|
Сообщ.
#118
,
|
|
|
|
SCSI могу выслать на мыло, но там pdf'ка на 6 мегов и она без закладок по темам
Работать с ней одно мучение... а вообще документы по любым сакзям можно найти тут: T10. Если надо, я опять вернулся к OHCI (буду проверять сохранение траггера), так что могу потестить тебе, если что надо |
|
Сообщ.
#119
,
|
|
|
|
ОГРОМНОЕ ТЕБЕ СПАСИБО!!! За подсказку про триггер!!! Кардридер заработал |
|
Сообщ.
#120
,
|
|
|
|
Цитата Gerret @ Кардридер заработал Прикольно Цитата Gerret @ SCSI могу выслать на мыло, но там pdf'ка на 6 мегов и она без закладок по темам Та не, 6 метров не надо. На T10 я был, документов там дофига, но мне ничего не понравилось ![]() Прога в архиве. Приду домой может чего ещё по флэшкам доделаю... Прикреплённый файл OHCI.rar (9.56 Кбайт, скачиваний: 220)
|