
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (51) « Первая ... 34 35 [36] 37 38 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#526
,
|
|
|
Контроллер USB определенного типа, видимо, тоже можно рассматривать как объект?
|
Сообщ.
#527
,
|
|
|
Контроллер это устройство, находя которое создаётся объект устройство со своим типом, если этот тип EHCI то в объект устройство добавляется функционал и данные для работы именно с этим устройством, а потом он сам создаёт объекты устройства которые сам владеет, у меня так. Попутно мои объекты выводятся на экран со своим текстом шрифтом цветом размером картинкой имеют обработчик событий и много чего. На самом деле система очень не плоха, там много интересного получается.
Кстати после создании нормального объекта отвечающего за прерывания стало легко работать с прерываниями, в нём есть функционал APICa |
Сообщ.
#528
,
|
|
|
Коды ошибок Additional Sense Code в Request Sense = Not Ready To Ready Transition – Media Changed 28h,
В примерах был такой код, но после него у них всё рыботало. |
Сообщ.
#529
,
|
|
|
После такого кода надо просто еще раз переспросить. Только я еще делаю небольшие паузы перед перезапросами.
|
Сообщ.
#530
,
|
|
|
Я ставил 5 раз
TEST UNIT READY REQUEST SENSE и непомогло, попробую купить разные флешки. |
Сообщ.
#531
,
|
|
|
И что, каждый раз отвечает одно и то же?
|
Сообщ.
#532
,
|
|
|
Цитата shm @ StasNewOs, с точки зрения архитектуры ядра ОС работу с устройствами USB лучше абстрагировать от конкретного хост-контроллера, а именно путь будет функция наподобие SendBulkPacket(DEVICE_INFO *Info, const void *Data, size_t Size), которая дальше сама переправит вызов в нужный драйвер и он уже будет заниматься qTD и прочими вещами. В противном случае, если возникнет желание сделать поддержку другого контроллера, то возникнет огромный геморрой с переписывание драйверов всех устройств USB. Цитата StasNewOs @ Цитата делать многоуровневую систему Это не самый удачный вариант, у меня поудачнее, почитайте о нём в прошлой ссылке, там инфа о моей ОС, ваше мнение о ней будет интересно. Цитата StasNewOs @ Ещё раз тебе говорю, у меня объектная система на которыю я нарабатываю функционал и объекты Я посмотрел ее, в ней есть некое рациональное зерно, но... (потом в аське расскажу, чтобы не флудить) Я надеюсь, что в ближайшем будущем ты поменяешь свое отношение и к другим вещам. Добавлено zakharo, а с какой целью разрабатывал драйвер, если не секрет? Чисто для себя? Я вот 3 года назад сделал поддержку UHCI, USB HDD, USB мыши и забросил т.к. USB не было моей основной целью, вот не так давно тут тоже драйвер ehci начал дописывать, но времени мало стало... Ты намного глубже меня копанул, читаю твои посты и узнаю много новых моментов. |
Сообщ.
#533
,
|
|
|
Не, не для себя. У нас на фирме есть девайс, который работает в ДОСе. По условиям. Строго. Ни Линукс, ни тем более Винда не допускается. MS-DOS, конечно, давно не поддерживается, мы сейчас берем PTS-DOS и freeDOS. ДИОНИС называется - это универсальный интернет-хост с функцией криптомаршрутизатора. Может, слышал краем уха? Вот для него и делал подсистему. ДОС же внешних носителей кроме флоппиков не знает, а дискеты уже почти никто не производит. Так что вообще практически стоял вопрос жизни и смерти устройства. Вот и пришлось почти всю поддержку делать, включая флешки, картридеры, CDROM, и даже клавиатуру. Но это не драйвер, а просто подсистема работы с USB. Поэтому и файловая система тоже там внутри - ДОСовую не удалось использовать..
|
Сообщ.
#534
,
|
|
|
Цитата zakharo @ слышал краем уха? Вроде бы где-то слышал, но в руках точно не держал. Цитата zakharo @ поэтому и файловая система тоже там внутри - ДОСовую не удалось использовать.. Где-то читал, что какими-то шаманствами люди прикручивали, но в любом случае DOS работает с современными носителями очень неэффективно. |
Сообщ.
#535
,
|
|
|
Цитата zakharo @ Не, не для себя. У нас на фирме есть девайс, который работает в ДОСе. По условиям. Строго. Ни Линукс, ни тем более Винда не допускается. MS-DOS, конечно, давно не поддерживается, мы сейчас берем PTS-DOS и freeDOS. ДИОНИС называется - это универсальный интернет-хост с функцией криптомаршрутизатора. Может, слышал краем уха? Вот для него и делал подсистему. ДОС же внешних носителей кроме флоппиков не знает, а дискеты уже почти никто не производит. Так что вообще практически стоял вопрос жизни и смерти устройства. Вот и пришлось почти всю поддержку делать, включая флешки, картридеры, CDROM, и даже клавиатуру. Но это не драйвер, а просто подсистема работы с USB. Поэтому и файловая система тоже там внутри - ДОСовую не удалось использовать.. Вы хоть понимаете, что вы полностью написаль свою систему и вам оставалось только убрать дос и сделать свой загрузчик, т.к. в ДОСе кроме системы ввода вывода ничего больше нету. А если бы убрали дос, то ваша система бы выиграла только. Вообще можно сделать драйвер ЮСБ устройствам, драйвер дисков, звука, сети, кодеки, протоколы, многопроцессорность, у меня уже большая часть сделана и есть ГУИ и шикарная объектная система с помощью которой управлять системой легко и писать её. Добавлено У меня у Status Transport 13байт для TEST UNIT READY со второго раза 0, а у READ(10) вообще 80h или просто данные не пришли |
Сообщ.
#536
,
|
|
|
Цитата StasNewOs @ т.к. в ДОСе кроме системы ввода вывода ничего больше нету. Это только на первый взгляд... Я пытался эмулировать DOS посредством V86 - таки не получилось должным образом. На самом деле там много всего помимо прерываний (отнюдь не только работа с диском), есть специальные области памяти, тот же командный интерпретатор... В DOS множество абстракций, т.е. работу с COM или даже консолью можно производить через файл. И этим всем активно пользуются компиляторы ЯВУ, так что переписывания много получится и вытекающих багов тоже. Цитата StasNewOs @ Вообще можно сделать драйвер ЮСБ устройствам, драйвер дисков, звука, сети, кодеки, протоколы, многопроцессорность, у меня уже большая часть сделана и есть ГУИ и шикарная объектная система с помощью которой управлять системой легко и писать её. Для девайса zakharo необходимость в доброй половине элементов этого списка весьма сомнительна. Добавлено Цитата StasNewOs @ У меня у Status Transport 13байт для TEST UNIT READY со второго раза 0, а у READ(10) вообще 80h или просто данные не пришли Про триггер данных не забыл? Очень похожие симптомы. |
Сообщ.
#537
,
|
|
|
Цитата StasNewOs @ а у READ(10) вообще 80h или просто данные не пришли Что такое 80h? Где это? |
Сообщ.
#538
,
|
|
|
у READ(10) вообще 80h или просто данные не пришли, всмысле не пришёл Status Transport (80h - 13 байт Status Transport)
Добавлено shm Что такое тригер? |
Сообщ.
#539
,
|
|
|
Не бывает 80h. Скорее всего, транзакции просто не было. Попробуй перед транзакцией обнулить это поле и посмотреть, что будет.
А если данные не приходят - смотри причину в qTD, там контроллер выставляет биты. Если стоит бит 6 (Halted), значит, скорее всего, устройство выставило STALL, т.е. была неправильная команда. В CBW есть поле для количества ожидаемых байт. В блоке команды SCSI (CBWCB) есть поле для номера сектора - оно заполняется старшими байтами вперед, т.е. big-endian. Проверь, все ли правильно заполнено. Фишка в том, что состояние STALL для bulk-endpoint не снимается само, его надо снимать доп.командой, как написано в спецификации Bulk-Only Mass-Storage. Пора уже ее сделать. Это необходимая и часто употребляемая операция. Причем делается просто - пакет SETUP с реквестом типа CLEAR_FEATURE, только не забудь, что номер enpoint туда пишется полный, 8-битный, т.е. для точки типа IN старший разряд будет 1. При этом надо у себя обнулить текущее значение DT для этой точки - последующие транзакции начнутся с DT=0. После этого конечная точка снова становится работоспособной, и тогда уже можно нормально принять CSW, а потом и выяснить причину ошибки через REQUEST SENSE. |
Сообщ.
#540
,
|
|
|
Да стоит бит 6 (Halted), но почему? Номер сектора был 0(как не забивай), может простая какаянить ошибка, а я не вижу. Вообще упаковка в QH таже, что и все другие вызывают, а данные
![]() ![]() Read10: mov edx,edi mov ebx,def44 ;В команды заполним пакет из 31 байт mov dword[ebx],'USBC' ;Signature mov dword[ebx+4],ebp ;Tag mov eax,ecx shl eax,9 mov dword[ebx+8],eax ; mov byte[ebx+12],128 ;bmRequestType Device-to-host mov byte[ebx+13],0 ;Logical Unit Number mov byte[ebx+14],10 ;Command Block Length mov byte[ebx+15],28h ;Operation Code READ(10) mov byte[ebx+16],0 mov dword[ebx+17],esi mov byte[ebx+21],0 mov word[ebx+22],cx mov dword[ebx+24],0 mov dword[ebx+28],0 ;mov dword[ebx],'USBS' ;Signature ;mov dword[ebx+4],ebp ;Tag ;mov dword[ebx+8],0 ; ;mov byte[ebx+12],0 call CTq call DTq jmp STq Хотя здесь негде ошибиться |