
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.15] |
![]() |
|
Страницы: (51) « Первая ... 6 7 [8] 9 10 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#106
,
|
|
|
О, это уже лучше ![]() Как я понял она не повисла? Теперь вопрос только один - а устройство подключено было? Потому что судя по состоянию портов устройства нет - установлен только бит PPS (Port Power Set). Правда она дескрипторы и так бы не прочитала. Предположительно рабочую сделаю к понедельнику... |
Сообщ.
#107
,
|
|
|
Цитата cppasm @ а устройство подключено было? Сдаётся мне, что тут ещё EHCI может своё влияние оказывать. Если почитать его спецификацию, то при включенном EHCI физические порты отключаются от UHCI/OHCI и подключаются к EHCI. При выключенном (по умолчанию) - сидят на старом контроллере. Если в данном компьютере BIOS или драйвер включают EHCI, то на UHCI/OHCI не будут обнаруживаться устройства. |
Сообщ.
#108
,
|
|
|
Устроиство конечно было подключено, а EHCI здесь и не пахнет. Прикол в том, что программа выдет дескрипторы только при загружженном usbaspi.sys.
А у меня возникла новая проблема: во время любой ошибки (STALL, NAK ...) комп виснет!!! |
Сообщ.
#109
,
|
|
|
Цитата PRT @ Устроиство конечно было подключено, а EHCI здесь и не пахнет. Прикол в том, что программа выдет дескрипторы только при загружженном usbaspi.sys. Ну это мне ясно... Там просто у порта enable не ставится почему-то. Но вот почему у порта не стоит бит что устройство подключено мне не ясно... Я проверяю так: ресет контроллера читаю количество портов потом для каждого порта если установлен бит CurrentConnectStatus работаю с устройством. а тут он почему-то не установлен ![]() а у тебя как детект подключённого устройства происходит7 |
Сообщ.
#110
,
|
|
|
Детект подключённого устройства происходит также, может дело в ресете контроллера?
|
Сообщ.
#111
,
|
|
|
Может и с ресетом проблемы...
Блин, вообще ерунда какая-то ![]() Стал со своим NEC OHCI шаманить - выяснил что у него вообще SetPortEnable не работает. %) PortEnable выставляется только совместно с Reset'ом... Попробуй ещё эту плз, может я хоть что-то в логах увижу... Мне вообще не понятно почему состояние порта показывает что устройства нету. Добавлено Вот мой ресет: ![]() ![]() // Reset HC, enter UsbReset state. writed(hc[i].base+0x04,0x00); delay(10); // Reset HC, HC enters UsbSuspend state. writed(hc[i].base+0x08,0x01); // Wait for reset completition. for(k=0;k<50 && (readd(hc[i].base+0x08) & 0x01);k++) delay(1); // Set HCCA physical address. writed(hc[i].base+0x18,hcca); hcca+=0x100; // Set Control head ED. writed(hc[i].base+0x20,ED); // Set Bulk head ED. writed(hc[i].base+0x28,ED); // Disable all HC interrupts. writed(hc[i].base+0x14,0xFFFFFFFF); // Clear all interrupt status bits. writed(hc[i].base+0x0C,0xFFFFFFFF); // Enable interrupt (SMI) on ownership change. writed(hc[i].base+0x10,0xC0000000); // Start Host Controller. // Set UsbOperational state. // Disable Periodic List, Isochronous List, // Control List and Bulk List processing. writed(hc[i].base+0x04,0x80); // Set Frame Interval. writed(hc[i].base+0x34,0x27792EDF); // Set Periodic Start (90%). writed(hc[i].base+0x40,0x00002A2F); // Root Hub ports are power switched. // All ports are powered at the same time. writed(hc[i].base+0x48,readd(hc[i].base+0x48) & 0xFFFFFCFF); // Turn on power to all ports. writed(hc[i].base+0x50,0x10000); // Wait Power On to Power Good time. delay((readd(hc[i].base+0x48)>>23) & 0x1FE); Добавлено Думаю может в последней задержке проблема. Там регистр странный какой-то: RW для драйвера и ReadOnly для контроллера. И я пробовал - туда ноль успешно пишется... Хотя у меня после сброса там 30 мс. Прикреплённый файл ![]() |
Сообщ.
#112
,
|
|
|
Кстати вот лог от моей флэшки.
Команды 23h там нет, есть 25h... WinXP SP2 OEM RU, флэшка Transcend 1Gb, драйвера штатные. Прикреплённый файл ![]() |
Сообщ.
#113
,
|
|
|
Последняя версия работает!!! но после создания логов опять виснет.
Спасибо за лог от флэшки, буду смотреть. Прикреплённый файл ![]() |
Сообщ.
#114
,
|
|
|
Это радует.
Как я и думал в регистре HcRhDescriptorA в поле PowerOnToPowerGoodTime задержка прописана была всего 2мс... Попробуй эту, может не повиснет... Только запусти сначала с выводом на экран, если не повиснет, то потом уже логи сделаеш. Спасибо что помогаеш. Прикреплённый файл ![]() |
Сообщ.
#115
,
|
|
|
Если повиснет то сделай ещё логи с этой версией.
Я тут добавил запись в лог деконфигурирование контроллера... Прикреплённый файл ![]() |
Сообщ.
#116
,
|
|
|
Обе не зависли, но производительность компа после выхода падает катастрофически.
Вторая программа не обноружила деваис. Прикреплённый файл ![]() |
Сообщ.
#117
,
|
|
|
Цитата PRT @ Вторая программа не обноружила деваис. Та блин пофиксить забыл ![]() Цитата PRT @ но производительность компа после выхода падает катастрофически А в чём это выражается? В смысле как ты определил что в DOS производительность упала. Может связано с тем что я FlatRealMode использую, хотя врядли... А как ты доступ к регистрам OHCI получаеш? PM, DPMI, или как у меня Flat Real Mode? Ещё в принципе может быть связано с тем что я дескрипторы передачи размещаю после 16Мб, ну ясное дело у Himem.sys разрешения не спрашиваю. Может ему или smartdrv что-то не нравится... Ради эксперимента попробуй ещё эту... Прикреплённый файл ![]() |
Сообщ.
#118
,
|
|
|
заработало!!!
А в чем был прикол когда комп замедлился (реакция на клавишы была с секундным опозданием, вход/выход в NortonComander длился 5-10 секунд, но зато на Ctrl-Alt-Del реагировало мгновенно). Можно вернутся к изначальной проблеме? Сделаешь к этой программе Read Capacity? Докажем всему миру что 23h это не 25h!!! |
Сообщ.
#119
,
|
|
|
Цитата PRT @ А в чем был прикол когда комп замедлился Прикол был в прерываниях... Я при деконфигурировании возвращал управление SMM. Делал UsbReset, потом разрешал прерывания и вызывал OwnershipChange. Это чтобы снова включить в BIOS функции работы с USB для USB флэшек и мышей если BIOS это поддерживает. Но как видно из логов SMM не отвечает - может нет поддержки, или она выключена. А я потом просто выходил из программы. Но в статусе прерываний бит OwnershipChangeInterrupt так и оставался установленным - BIOS ведь его не обработала. И начинали сыпаться прерывания - заглушка которую BIOS поставил их в контроллере прерываний глушит, а в OHCI нет. В последнем варианте я просто отключил возврат управления SMM, но это меня не устраивает (это ради эксперимента было). Попробуй эту - здесь если в течении 50мс SMM не отвечает я прерывания запрещаю и статус сбрасываю. Цитата PRT @ Можно вернутся к изначальной проблеме? Сделаешь к этой программе Read Capacity? Докажем всему миру что 23h это не 25h!!! К этому всё шло ![]() Если всё заработает как надо завтра будет ReadCapacity - у меня с собой исходников нету просто... PS: а устройство в логах это кардридер? Просто у него питание не по шине стоит, а я таких флэшек не видел ![]() Прикреплённый файл ![]() |
Сообщ.
#120
,
|
|
|
Да, логика вразумительная, а программа работает корректо. Устроиство - кардридер.
|