Loading ehci driver searching on hosts зависает

Обновлено: 07.07.2024

Во время установки Windows XP c флешки, кстати как создать загрузочную флешку с Windows XP описано тут, у меня возникали следующие проблемы:

При начальной установке, во время загрузки драйверов, появлялся синий экран с примерно следующим содержанием:

Заходим в Bios, нажатием F2 или Del на вашем компьютере и находим пункт Sata Mode (возможно он будет располагаться в меню Main). И выставляем значение IDE Mode вместо AHCI Mode. Сохраняем настройки, перезагружаемся.

Если у вас нет данного пункта, значит у вас другая версия BIOS и для вас возможно подойдут следующие настройки:

Вкладка Advanced -> параметр OnChip SATA Type меняем с IDE AHCI на Native IDE

или еще вариант Вкладка Advanced -> параметр IDE Configuration -> параметр SATA Operation Mode меняем с Enhanced на Compatible

Следующая проблема, которая возникла это перезагрузка компьютера на втором этапе установки, когда загрузка шла уже с жесткого диска, появлялось окно с загрузкой Windows XP и компьютер перезагружался.

Бред какой-то и мистика, но все же опишу, мало ли кому то поспособствует. Заходим в биос, меняем значение Sata Mode обратно в Ahci mode, грузимся видим синий экран смерти, затем опять заходим в биос и меняем уже обратно на ide mode, после чего перезагружаемся и вуаля. Во всяком случае к моему глубокому удивлению у меня было именно так:)

Следующее что произошло, это запросило при установке у меня файл asms

Решилось так:

В этот раз весь процесс прошел без ошибок и до конца.

189 комментариев

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

У меня в биосе нет таких разделов. Sata Mode (возможно он будет располагаться в меню Main). И выставляем значение IDE Mode вместо AHCI Mode. Может кто подскажет как быть?

@Серж
Значит у тебя другая версия биоса, ищи похожие пункты

После первой перезагрузки пишет Missing Operations system и черный экран и не туд ани сюда. и больше не реагирует..

Всё получилось,искал долго но нашел. Спасибо автору, класс.

нихрена не получилось! все равно синий экран.

ноут асус, раздела в выборе между Sata, Ide, ACHI нет.

установка идёт до инициализации харда, потом помирает в синем цвете. xDEADx

мне западло за диском в магаз бежать чтобы установить ХР(ень) на ноут. больно задело за живое что проблема так и не решается.

@Александр
Не расстраивайтесь, для вас сделал добавление к статье:

Если у вас нет данного пункта, значит у вас другая версия BIOS и для вас возможно подойдут следующие настройки:

Вкладка Advanced -> параметр OnChip SATA Type меняем с IDE AHCI на Native IDE

или еще вариант Вкладка Advanced -> параметр IDE Configuration -> параметр SATA Operation Mode меняем с Enhanced на Compatible

@Сергей
Возможно проблема в том, что не определяет жесткий диск, попробуйте покопать в эту сторону

эдисон У тебя возможно проблема с перегревом процессора, смени термопасту!

Спасибо! Статья очень помогла, все прошло на УРА!)

кстати, в биосе на иде не менял, т.к. полагаю драйверы интегрировал именно для этого

@Тимур
Нужно попробовать все, чтобы точно оценить ситуацию:) а вообще попробуй проделать все это с чистым дистрибутивом винды, возможно дело в нем гдето слышал что асусы могут плохо реагировать на различного вида сборки.
И да, если драйвера интегрировал, то режим менять не надо. Но все же попробуй:)

Такая же проблема, как и у Алины, устанавливаю винду с флэшки при начальной загрузке появляется досовский курсор, немного мигает и появляется черный экран, который может висеть часами. Перепробовал много вариантов, но проблема не исчезает. Подскажите кто нибудь.

Всё отлично сработало! В итоге потратил времени 1,5 часа, благо сразу нашел данную статью. Спасибо автору.

У кого на Lenova S10-3C зависает на черном экране КАЧАЙТЕ С ОФФСАЙТА драйвер на AHCI (Управление хранением), exe файл распакуйте RARом и вставьте в дистрибутив с помощью nLite

ОГРОМНОЕ, ЧЕЛОВЕЧЕСКОЕ СПАСИБО.

У меня в биосе можно выбрать только AHCI и больше ничего. При попытке поставить любую ОС Linux Windows(кроме семерки) ничего не удается Linux наглухо виснет ХРшка зависает синим экраном еще на этапе доса. А вот семерка установилась нормально. Ктонить подскажите что делать плиииииииииииииз. Не люблю я семерку неудобная.

Хотите смейтесь хотите нет но я поставил ХР на lenovo ideaPad s10-3.
Но получился такой вариант я сделал загрузочную флешку попался на все описаные ошибки:) проделал все описаное первый этап завершился но на втором установка оборвалась на подготовке к установке я решил переделать флешку(решил что исо плохой) и залил на нее зверь (у меня был). В итоге я установил флешку и загрузился нет бук сразу с недоустановленой винды на харде, я не стал мешать и винда доустановилась себе сама:)

Спасибо автору очень помог страдаю довольно долго вот под вечер тока нашол его статью целый день были танци с бубном

@Иван
Значит скорее всего вас сможет спасти только интеграция драйверов под ваше оборудование в сборку (скорее всего драйвера на жесткие диски)

Александр :
А у меня такая вот проблема, когда все загрузилось и там где выбирать диск С или Д их нет просто вижу флешку и все. Что делать ? Помогите. За рание спасибо…

та же фигня Иван подскажите почему диски не видит только флешку

@kiara
Посмотрите определяются ли диски в BIOS. Если да, то возможно ваша сборка не имеет драйверов на эти диски. Видят ли другие дистрибутивы эти диски? Например Windows7. Попробуйте загрузиться с диска с установочной Win7 к примеру и посмотреть будет ли там определяться ваш жесткий диск. Если да, смотрите в сторону интеграции драйверов в вашу сборку

не могу поставить на нетбук выдает что-то не понятное по типу

Здравствуйте у меня нетбук Viev Sonic VNB107 я поставила windows xp но при загрузке он выдает синий экран и когда я захожу в bios я многого не могу найти помогите пожалуйста версия биоса 1.05_(2010.03.06) помогите плиз очень срочно!!(((((((((((

требует файл ASMS, делал все как написано выше бесполезно, msi u210

@лол
попробуйте грузиться сразу с жесткого диска, вынув флешку из компьютера

@георгий
попробуйте еще раз 🙂 а вдруг:)

У меня все получилось все установилось,но почему то при следующей перегрузке и убраной флешке не грузится жесткий , хотя повторюсь установка прошла идеально и все поставилось как надо.

@Елена
Поменяйте настройки в bios чтобы начинало грузиться с жесткого диска

Спасибо.Маялся с ноутом Тошиба Сателлайт С660

Все сделал но при установке зависает !

Да этот способ действительно работает! бывает если первый раз не пошло просто пробойте 2 раз и оно пойдет устанавливаться ну а семерка и через iso может загружатся на флешку и без проблем устанавливаться в iso просто быстрей!!

Алина :
при начальной загрузке перед выбором разделов появляется досовский курсор, немного мигает и появляется черный экран, который может висеть часами. что делать?

Ребята, ВАС ТАКИХ МНОГО УЖЕ. И я присоединяюсь. Тоже черный экран после курсора. На форуме решения проблемы не нашел. Автор отмалчивается(

Спасибо большое, все получилось.

@Дмитрий
Попробуйте во время установки (с флешки или диска) когда появляется выбор разделов, удалить все разделы а затем создать заново, после чего отформатировать в NTFS там же. Разделы же видны в установщике?

Жму руку! всё доходчиво и очень понятно!

коверяйтесь и розберетесь )))

У меня такая проблема все сделал правильно сделал флешку загрузочной винда ставиться но требует серийный номер а в сборке образа его нет. Что делать?

Огромное спасибо. Выручил. Все предельно ясно и четко изъяснил. респект автору cool

@Михаил
Используйте другой образ, либо покупайте лицензионный windows 🙂

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

@Нурди
клаву с юсб поменяй на обычную

короче я записал уже 2 виндозы на флешку вашим способом.всё идет до копирования файлов и после выбивает ошибку.что делать помогите

Огромное СПАСИБО. Все получилось.

Может нужен какой то особый дистрибутив с дополнительными драйверами? Хотя в моих уже какие то добавлены. Может кто посоветует дистрибутив?

@Илья7
Пробовали перед установкой форматировать диск в NTFS?

на серый экран ответа не нашёл. ни AHCI ни Compatible не помогают

форматнул да же мигоу

@Михаил
Насколько я понял, все стопорится на начальном этапе. Возможно чтото с железом, если есть возможность попробуйте проверить жесткий диск в другом компьютере. Материнскую плату на предмет вздувшихся кондеров.

Compatible не помогает,так и остался синий экран.Жду вашего ответа

спасибо большое. быстро наткнулся на вашу статью и помогло)) а можно ли после установки поменять настройки биоса обратно на AHCI Mode?

Спасибо, спасибо, спасибо. Автор молодец.

спасибо мне помогло))

@Сергей
Скачайте утилиту от майкрософта и запишите образ 7 старпера. И все пойдет.

@Илья7
Как вариант попробуйте сделать образ текущей системы через тот же акронис например и записать его на диск…

Спасибо Админ, если бы у меня была сестра, я бы на за тебя ее выдал замуж)))

Спасибо!
Sata Mode поменял и все получилось

Повторюсь конечно, но ПРОСТО ОГРОМНЫЙ РЕСПКТ АВТОРУ СТАТЬИ.
У меня был вынос мозга в кубе и логорифмической прогресии ))) Пока не встретил эту статью )

У меня вот такая проблема заходит в раздел флешки,далее выбираем винду, а потом вылетает вот такая хрень:
Error 15:File not found
Press any key to continue

очень большое спасибо. ноуту асус 53svсутки сразу накрылась 7ка.при установке хр синий экран.сата помог хп зверьсборка11.2010 встала без допольнительных проблем.кстати виста и так ставилась но без дров.спасли деньги.время и нервы.

Была такая проблема с буком Aser Aspire 5750G (стояла седьмая виндна, ХР не ставилась)..спс автору все работает

Привет всем! У меня такая проблема. Не могу установить Windows XP на ноутбук Асеr Аspеrе 7650G. Когда начинается загрузка с загрузочного диска через 5 или 8 минут появляется синий экран с ошибкой Sтоp: 0x0000007В. Пробовал много способов. Поменял в ВIОS SАТА на IDЕ контроллер. Но толка никакого. Прошу кто, чем можете помогите. Месяц как оно меня мучает. Зарание огромное спасибо.

Большое человеческое спасибо. вот наконец теперь я нормально могу установить ОС 😀

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

ОГРОМНЕЙШЕЕ СПАСИБО. ПОМОГЛО. Правда у мня ноутбук lenovo g570, я для него драйвер хранение скачал и интегрировал энлайтом в винду и потом записал на диск, всё пошло))

@igor
тоже нет бук и тоже ничего не помогает просит аsms

Следующая проблема, которая возникла это перезагрузка компьютера на втором этапе установки, когда загрузка шла уже с жесткого диска, появлялось окно с загрузкой Windows XP и компьютер перезагружался.

Бред какой-то и мистика, но все же опишу, мало ли кому то поспособствует. Заходим в биос, меняем значение Sata Mode обратно в Ahci mode, грузимся видим синий экран смерти, затем опять заходим в биос и меняем уже обратно на ide mode, после чего перезагружаемся и вуаля. Во всяком случае к моему глубокому удивлению у меня было именно так:)

У меня видимо старая версия биоса . Не могу найти даже похожих пунктов .. Подскажите плз как мне быть

нетбук.на меего ставлю вин хр через флэшку.но не могу форматнуть диск с.удалить тоже пробовал,безполезно.говорит либо диск поврежден и еще что то.в чем может быть проблема?

Переустанавливаю винду с флэшки.переставил в биосе на 1 место флэшку,а на второе винт.начинаю устанавливать.не видит разделы,только флэшку,диска с нету.куда устанавливать и форматировать непонятно.что за фигня?

Спасибо! Помогла ваша статейка со сменой на иде.

У меня планшет Odeon tpc 10. Устанавливаю 8ку с флешки. Появляется надпись Windows белым по черному, а дальше ничего не происходит.. так и висит

Пооставил загрузку с флэшки , но после перезагрузки выпрыгивает окно синего цвета Unetbootin , а в нутри написано Defaults ! внизу пишут што то типо нажмите Tab для изменения какойто хрени !(точно не помню што ) и отсчитывают 10 секунд до загрузки ! но прождал 2 часа и ни чего ! плиз помогите ! это всё происходит на нетбуке eMachines E350!

выбрал First Part и вылезла ошибка
Error 15: файл нот фаунд

здрасте у меня такая проблема токо установил виндовс чорний екран пишет много тру трутур и патом такое
press spacebar to hold the screen , any other key to boot previous
дальше загрузка стоит что делать .

@Александр
в настройках биоса поменял ACHI на compontable и вуаля всё видит)))

Огромное спасибо , помог ваш способ , без проблем установил на асер аспире оне

Алина :
при начальной загрузке перед выбором разделов появляется досовский курсор, немного мигает и появляется черный экран, который может висеть часами. что делать?

ОГРОМНАЯ БЛАГОДАРНОСТЬ АВТОРУ! Все установилось! Работает!

у меня при запуске компьютера выйдет надпись Booting HD1/2 что мне сделать чтоб компьютер далше включился

такая же проблема на Тошибе нубуке у меня что делать не знаю( :

bsodeg :
первый этап проходит, перезагружается, запускается grub и при выборе Second part вылетает в первое меню… успеваю увидеть что то вроде starting cmain()…. No PXE stack.
причем неважно указывать флэшку или сам винт на который ставлю, запускается все равно grub. а если выдернуть флэшку и грузить с жёсткого – мигающий курсор на черном экране

круто это работает

Помогите.сделал все как надо.Первая часть установилась но потом вискакивает ошибка
STOP: 0x0000007B (0xF78D2524, 0xC0000034, 0×00000000, 0×00000000)

меняю на IDe Но непомогает также вискакивет таже ошибка.

у меня меню в биосе такое

start easy flash
Cpu Configuration
Ide configuration
Onboard Devies Configuration

ide configuratoins
в нем

SATA Controller (enabled/disabled)
ConfigureSata as (Ide/AHCI)

если вибираю ACHI то появляетса (enabled/disabled)

CPU configuration должно бить (enabled или disabled).

Тоже была проблема с установкой и XP и 7-ки. Дня 2-3 бился ни чего не помогало.Потом вспомнил что до этого разблокировал ядра на своем проце (Athlon II X3 460), что стало их аж 4 вместо 3-х.Обратно заблокировал и винда сразуже залетела с ходу.

5 баллов тому кто создал тему и потратил своё время от души тебе спасибо)изначально даже ещё Создать загрузочную флешку c Windows XP или txtsetup.sif поврежден эта тема помогла спасибо большое)

у меня проблема возникла с загрузкой винды форматнул диск с дважды а щас немогу загрузить винду доходит до определения жосткого диска а их ненаходит ниодного из трех щас копаются в сервисе винчестер говорят новый пробывали тоже самое думают что материнская плата но я токо месяц как поменял может подскажите что может быть это персональный комп 2 ух ядер заранее благодарен

Помогите у меня проблема виндовс 7, 2 раза установлена. Поэтому запрашивает выбор операционной системы. Идет загрузка и когда должно включится снова предлагает выбор операционной системы. Как бы по гругу идет. Пробовала установить поверху виндовс хр, так когда доходит до выбора раздела (диска) на котором устанавливать, то пишет чтодиск отстутствует. Что делать?

устанавливаю винду с флэшки так он мне предлагает установить как раз на флэшку, диски он не видит. что делать? мне так то на С надо установить.

Народ привет всем! нужна помощь, такая проблема :
Решил сменить винду на нетбуке, хард диск отформатирован, стояла винда 7 до этого.
Решил сделать хп sp 3 , качал кучу разных виндоус, делал загрузочные флешки, даже переносной дисковод USB пробовал, всегда на середине установки после момента где отсчет минут идет, все зависает на омг какое время.
Что делать? читал где то перегривается проц, отключал через BIOS устройства типа wlan audio и тп, всеравно чтоле мощности ему мало) останавливается и все! Что делать, помогите срочно плиз) 4 винды не пошли и кучей способов образы, загруз. флехи не канает нечего.

@Кристи
не видит хард диск вот решение :
1. заходишь на сайт производителя материнской платы, или производителя SATA/RAID контроллера. Качаешь оттуда драйвер (SATA/RAID). Потом этот драйвер записываешь на дискету (1,44 Мб). На CD диск писать не нужно, иначе при установке система просто не сможет взять оттуда драйвер.

Так вот. Потом при установке системы windows нажимаем F6 и установка сама находит на дискете драйвер и устанавливает.
Все. Потом установка windows будет видеть жесткий диск без всяких проблем.

2. Второй вариант. заходи в BIOS (клавиша F2, F1 или Del, на каждой материнской плате по-разному. Там находим настройку для отключения AHCI. После этого действия установка windows будет видеть жесткий диск и Вы сможете нормально продолжить устанавливать систему). Параметр отключения AHCI может иметь несколько названий. Все зависит от производителя материнской платы. Например.

Configure SATA as: IDE
AHCI Mode: Disabled
SATA Controller Mode: Compatibility
SATA Operation: ATA
SATA Native Mode: Disable
зависит от твоей материнки меняй Sata mode с AHCI на IDE

помогите пожалуйста!у меня нэтбук емашинес 350 intel atom/сделал загрузочную флэшку.как с биосом быть?какой пункт выбрать?флэшку не находит. ((

Добавлено (16.03.2012, 11:30)
---------------------------------------------
Блин, plop не причём! Как только я подгружаю 2 образа в память (1 firadisk и 2 iso-образ винды) после этого HDD становиться нивидим! Т.е. ситуация следующая: если я сначала переназначаю диски, т.е. делаю чтоб HDD был как (hd0,0), а флэшка как (hd1,0), затем загружаю образы fira и xp в память, то на начальном этапе графического режима установки xp не находит свой дистрибутив. Если же я сначала загружаю образы fira и xp в память (как все и делают), то потом я теряю HDD и не могу сделать его как (hd0,0), т.к. map (hd1,0) (hd0,0) дает ошибку, что диск не существует. поиск ntldr, тоже не находит файла, я бы сказал, что диск вообще теряется, но команда rootnoverify (hd1,0) не пишет ошибки, значит виден всё таки. Как выпутываться из этой карусели. ничё уже не понимаю. буду дальше экспериментировать и сообщать, если у кого какие мысли по этому поводу есть, поделитесь.

Добавлено (16.03.2012, 11:34)
---------------------------------------------
rootnoverify (hd1,0) - это команда ниче не значит - пустая собака! я для прикола сделал rootnoverify (hd7,4) - тоже проглотилась на ура. Хотя никакого диска в системе под номером 8 конечно нету


Ошибка:
DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option < useUnifiedTopology: true >to the MongoClient constructor.

  • Вопрос задан более года назад
  • 2853 просмотра

2chevskii

lazalu68

If there's something weird
And it don't look good
Who you gonna call?
Ghostbusters!

image

Всех приветствую. Сегодня хочу поделиться опытом и всё-таки по-моему внятно объяснить про такой, на первый взгляд, простой стандарт для USB 2.0 хост-контроллера.

Изначально можно представить себе что USB 2.0 порт — это всего лишь 4 пина, по двум из которых просто передаются данные(Как, к примеру, COM-порт), но самом деле всё не так, и даже совсем наоборот. USB-контроллер в принципе не даёт нам возможности передавать данные как через обычный COM-порт. EHCI — довольно замысловатый стандарт, который позволяет обеспечить надежную и быструю передачу данных от софта до самого девайса, и в обратную сторону.

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

Что такое EHCI

Что же, давайте начнем. EHCI — Enhanced Host Controller Interface, предназначен для передачи данных и управляющих запросов USB-устройствам, и в другую сторону, а в 99% случаев — является связующим звеном, между каким-либо софтом и физическим устройством. EHCI работает как PCI-устройство, а соответственно использует MMIO(Memory-Mapped-IO) для управления контроллером(да-да, я знаю, что некоторые PCI-девайсы используют порты, но тут я всё обобщил). В документации от Intel описан лишь принцип работы, и никаких намеков на алгоритмы, написанные хотя бы на псевдокоде, нет вовсе. EHCI имеет 2 типа MMIO-регистров: Capability и Operational. Первые служат для получения характеристик контроллера, вторые же — для его управления. Собственно, прикреплю саму суть связи софта и EHCI контроллера:

image

Каждый EHCI контроллер имеет несколько портов, каждому из которых могут быть подключены какие-либо USB-устройства. Так же, прошу заметить, что EHCI является улучшенной версией UHCI, который так же был разработан Intel на несколько годов раньше. Для обратной совместимости любой UHCI/OHCI контроллер, который имеет версию ниже, чем EHCI, будет компаньоном к EHCI. К примеру, у вас есть USB-клавиатура(А большинство клавиатур года так до сих пор были именно такими), которая работает на USB 1.1(заметим, что максимальная скорость работы USB 1.1 — 12 мегабит в секунду, а FullSpeed USB 2.0 имеет пропускную способность аж в 480 мбит/сек), а у Вас имеется компьютер с USB 2.0 портом, при подключении клавиатуры к компьютеру хост-контроллер EHCI как ни как будет работать с USB 1.1. Данная модель показана на следующей схеме:

image

Так же на будущее хочу сразу предупредить, что Ваш драйвер может работать не правильно из-за такой вот нелепой ситуации: вы инициализировали UHCI, а после чего EHCI, при этом добавили два одинаковых устройства, поставили в регистр порта бит Port Owner Control, после чего UHCI перестал работать, из-за того, что EHCI автоматически перетягивает порт на себя, а порт на UHCI перестаёт откликаться, эту ситуацию надо отслеживать.

Так же, давайте рассмотрим схему, показывающую саму архитектуру EHCI:

image

Справа написано про очереди — о них чуть позже.

Структуры передачи данных и запросов

Организация структуры для обработки запросов включает в себя очередь и трансфер дескрипторы(TDs).

На данный момент мы рассмотрим только 3 структуры.

Последовательный список

Последовательный(Периодичный, Pereodic) список устроен следующим образом:

image

Как видно на схеме, обработка начинается с получения нужного фрейма из фрейм листа, каждый его элемент занимает 4 байта и имеет следующую структуру:

image

Как видно на картинке, адрес очереди/трансфер дескриптора выровнен по границе 32 байта, бит 0 означает то, что хост-контроллер не будет обрабатывать данный элемент, биты 3:1 показывают тип того, что будет обрабатывать хост-контроллер: 0 — изосинхронный TD(iTD), 1 — очередь, 2 и 3 в данной статье я рассматривать не буду.

Асинхронная очередь

Хост контроллер обрабатывает данную очередь только тогда, когда фрейм последовательный пустой, либо хост-контроллер обработал весь последовательный список.

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

image

qTD(Queue Element Transfer Descriptor)

Данный TD имеет следующую структуру:

image

Next qTD Pointer — указатель на продолжение очереди для обработки(для Horizontal Execution), бит 0 Next qTD Pointer'а показывает, то, что дальше нет еще одной очереди.
qTD Token — токен TD, показывает параметры передачи данных:

  • Бит 31 — Data Toggle (об этом дальше)
  • Биты 30:16 — количество данных для передачи, после завершения транзакции их значение уменьшается на количество переданных данных.
  • Бит 15 — IOC — Interrupt On Complete — вызвать прерывание после завершения обработки дескриптора.
  • Биты 14:12 показывают номер текущего буфера, в который/из которого производиться обмен данными, об этом далее.
  • Биты 11:10 — допустимое количество ошибок. Данная таблица показывает, когда счетчик количества ошибок уменьшается:

image

Голова очереди

Голова очереди(Queue Head) имеет следующую структуру:

image

Queue Head Horizontal Link Pointer — указатель на следующую очередь, биты 2:1 имеют следующие значения в зависимости от типа очереди:

image

Endpoint Capabilities/Characteristics — характеристики очереди:

image

  • Биты 26:16 содержат максимальный размер пакета для передачи
  • Бит 14: Data Toggle Control — показывает, где хост-контроллер должен брать изначальное значение Data Toggle, 0 — игнорирует бит DT в qTD, сохраняет бит DT для головы очереди.
  • Бит 13:12 — характеристики скорости передачи:
  • Биты 11:8 — номер конечной точки, к которой выполняется запрос
  • Биты 6:0 — адрес устройства
  • Биты 29:23 — номер Хаба
  • Биты 22:16 — адрес Хаба

Переходим к самому интересному.

Драйвер EHCI

Начнем с того, какие запросы может выполнять EHCI. Есть 2 типа запросов: Control — а-ля команд, и Bulk — к конечным точкам, для обмена данными, к примеру, абсолютное большинство флешек(USB MassStorage) использует тип передачи данных Bulk/Bulk/Bulk. Мышь и клавиатура для передачи данных тоже используют Bulk — запросы.

Инициализируем EHCI и настраиваем асинхронную и последовательные очереди:


Собственно, код для сброса порта в изначальное состояние:


Control-запрос к устройству:


Код обработки очереди:


И теперь запрос к конечной точке(Bulk-запрос)


Думаю, что тема достаточно интересная, в интернете на русском документаций, описаний и статей на эту тему почти нет, а если есть — очень размыто. Если интересна тема работы с железом и разработки ОС, то есть много чего рассказать.

Регистры EHCI контроллера

Для начала хочется еще раз уточнить, что через данные регистры вы будете управлять вашим устройством, поэтому они очень важны — да и без них программирование EHCI невозможно.

Для начала вам надо получить адрес MMIO, который выдан данному контроллеру, по смещению +0x10 будет лежать адрес наших долгожданных регистров. Есть одно но: сначала идут Capability регистры, а только после них — Operational, поэтому по смещению 0(от предыдущего адреса, который мы получили по смещению 0x10 относительно начала MMIO нашего EHCI) лежит один байт — длина Capability-регистров.

Capability регистры

По смещению 2 лежит регистр HCIVERSION — номер ревизии данного HC, который занимает 2 байта и содержит BCD версию ревизии (что такое BCD можно узнать из википедии).
По смещению +4 лежит регистр HCSPARAMS, его размер — 2 слова, он содержит структурные параметры устройства и его биты показывают следующее:

  • Бит 16 — Port Indicators — доступные световые индикаторы для подключенных USB-устройств.
  • Биты 15:12 — номер контроллера-компаньона, который присвоен данному контроллеру
  • Биты 11:8 — количество портов у компаньон-контроллера
  • Бит 7 — Port Routing Rules — показывает, как данные порты привязаны к компаньон-портам
  • Бит 4 — Port Power Control — показывает, надо ли включать питание каждому порту, 0 — питание подаётся автоматически
  • Биты 3:0 — количество портов у данного контроллера.
  • По смещению +8 лежит регистр HCCPARAMS — показывает параметры совместимости, его биты значат следующее:
  • Бит 2 — доступность асинхронной очереди,
  • Бит 1 — доступность периодической (последовательной) очереди
  • Бит 0 — 64-битная совместимость

Operation регистры

По смещению 0 лежит регистр USBCMD — командный регистр контроллера, его биты означают следующее:

  • Биты 23:16 — Interrupt Threshold Control — показывает сколько микро-фреймов будет использоваться на один обычный фрейм. Чем больше, тем быстрее, но если больше 8 — то микро-фреймы будут обрабатываться с той же скоростью, что и для 8.
  • Бит 6 — прерывание после каждой транзакции в асинхронной очереди,
  • Бит 5 — используется ли асинхронная очередь,
  • Бит 4 — использование последовательной очереди,
  • Биты 3:2 — размер FrameList'a (о этом — дальше). 0 означает 1024 элемента, 1 — 512, 2 — 256, 3 — зарезервировано
  • Бит 1 — устанавливается для выполнение сброса хост-контроллера.
  • Бит 0 — Run/Stop
  • Бит 15 показывает используется ли асинхронная очередь
  • Бит 14 показывает используется ли последовательная очередь,
  • Бит 13 — показывает, что обнаружена пустая асинхронная очередь,
  • Бит 12 установлен в 1, если при обработке транзакции произошла ошибка, тогда хост-контроллер остановит выполнение всех очередей.
  • Бит 4 установлен в 1, если произошла серьезная ошибка, хост-контроллер останавливает выполнение всех очередей.
  • Бит 3 FrameList (Регистр) Rollover — ставится в 1, когда хост-контроллер обработал весь frameList.
  • Бит 1 — USB Error Interrupt — генерировать ли прерывание при ошибках?
  • Бит 0 — USB Interrupt — выставляется после успешной обработки транзакции, если в TD был установлен IOC

По смещению +8 лежит регистр USBINTR — регистр включения прерываний
Чтобы долго не писать, и тем более, Вам долго не читать, значения битов данного регистра можно посмотреть в спецификации, ссылка на неё будет оставлена внизу. Сюда я просто записываю 0, т.к. абсолютно не имею желания писать обработчики, мапить прерывания и т.п., так что это я считаю почти что абсолютно бессмысленным.

По смещению +12(0x0C) лежит регистр FRINDEX, в котором просто лежит текущий номер фрейма, при чем, хочу заметить, что последние 4 бита показывают номер микро-фрейма, в старшие 28 — номер фрейма (так же значение не обязательно меньше размера frameList'а, если вам нужен индекс — лучше брать его с маской 0x3FF(или же 0x1FF, и т.п.).

Регистр CTRLDSSEGMENT лежит по смещению +0x10, он показывает хост-контроллеру старшие 32 бита адреса листа фреймов.

Регистр PERIODICLISTBASE имеет смещение +0x14, в него вы можете положить младшие 32 бита листа фреймов, заметим, что адрес должен быть выравнен по размеру страницы памяти (4096).

Регистр ASYNCLISTADDR имеет смещение +0x18, в него вы можете положить адрес асинхронной очереди, заметим, что он должен быть выравнен по границе 32 байта, при этом должен находиться в первых четырех гигабайтах физической памяти.

Регистр CONFIGFLAG показывает, настроено ли устройство. Вы должны выставить бит 0 после завершения настройки устройства, он имеет смещение +0x40.

Перейдем к регистрам портов. Каждый порт имеет свой командно-статусный регистр, каждый регистр порта располагается со смещением +0x44 + (PortNumber — 1)*4, его биты значат следующее:

  • Бит 12 — питание порта, 1 — питание подаётся, 0 — нет.
  • Бит 8 — Port Rest — устанавливается для сброса устройства.
  • Бит 3 — Port Enable/Disable Change — выставляется при изменении статуса «включенности» порта.
  • Бит 2 — порт включен/не включен.
  • Бит 1 — Изменение статуса подключения, ставится в 1, к примеру, если вы подключили, или отключили USB устройство.
  • Бит 0 — статус подключения, 1 — подключено, 0 — нет.

Читайте также: