Bios ehci hand off что это

Обновлено: 06.07.2024

Для чего нужны EHCI Hand-Off и XHCI hand off?

Обе данные опции отвечают за включение и отключение функции контроля передачи управления контроллером USB от BIOS к операционной системе.

Разница между ними заключается в том, что EHCI Hand-Off (расшифровывается как Enhanced Host Controller Interface) контролирует передачу управления контроллера USB 2.0, а XHCI Hand Off (eXtensible Host Controller Interface) – контроллера USB 3.0.

Стоит обратить внимание на тот факт, что usb порты работают как в BIOS, так и в операционной системе. Так вот до того, как начнет грузится ОС работой контроллера USB управляет BIOS, а после загрузки ОС передает управление контроллером ей.

Ранее в этот самый момент передачи управления могли возникать проблемы и ошибки. Чтобы ошибки исключить и были придуманы опции EHCI Hand-Off и XHCI Hand Off. Последняя является продолжением первой, так как современные материнские платы имеют на своем борту eXtensible Host Controller Interface – usb контроллер, поддерживающий работу с USB 3.0.

Как установить оперативную память в компьютер

Десять лет назад обычному пользователю компьютера хватало и 2 Гб оперативного запоминающего устройства (ОЗУ). Сегодня, когда электронный мир движется вперёд семимильными шагами, многим пользователям не хватает и 8 гигабайт оперативной памяти. Мощные игры требуют от …


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

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

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

Capability регистры

По смещению 2 лежит регистр

— номер ревизии данного HC, который занимает 2 байта и содержит BCD версию ревизии (что такое BCD можно узнать из википедии).

По смещению +4 лежит регистр

, его размер — 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 лежит регистр

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

Далее, по смещению +4 идет регистр

  • Бит 15 показывает используется ли асинхронная очередь
  • Бит 14 показывает используется ли последовательная очередь,
  • Бит 13 — показывает, что обнаружена пустая асинхронная очередь,
  • Бит 12 установлен в 1, если при обработке транзакции произошла ошибка, тогда хост-контроллер остановит выполнение всех очередей.
  • Бит 4 установлен в 1, если произошла серьезная ошибка, хост-контроллер останавливает выполнение всех очередей.
  • Бит 3 FrameList (Регистр) Rollover — ставится в 1, когда хост-контроллер обработал весь frameList.
  • Бит 1 — USB Error Interrupt — генерировать ли прерывание при ошибках?
  • Бит 0 — USB Interrupt — выставляется после успешной обработки транзакции, если в TD был установлен IOC

Не устали? Можете налить себе крепкого чайку и принести печенок, мы еще в самом начале!

По смещению +8 лежит регистр

— регистр включения прерываний

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

По смещению +12(0x0C) лежит регистр

CTRLDSSEGMENT

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

PERIODICLISTBASE

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

ASYNCLISTADDR

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

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

Перейдем к регистрам портов. Каждый порт имеет свой командно-статусный регистр, каждый регистр порта располагается со смещением

+0x44 + (PortNumber — 1)*4

, его биты значат следующее:

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

Теперь перейдем к самому соку.

Ваш запрос не может быть обработан

Ваш запрос не может быть обработан

С данным запросом возникла проблема. Мы работаем чтобы устранить ее как можно скорее.

Значение xHCI USB host controller xp mode?

Load Setup Defaults — что это в БИОСе

BIOS материнской платы хранит сведения о компьютере, необходимые для его запуска, содержит средства для диагностики и настройки работы оборудования. Эта система представлена набором программ, которые изменяются только путём прошивки. Зато их данные можно редактировать через …


Что такое UEFI и Legacy в биосе

В настройках современной материнской платы с UEFI зачастую есть пункт меню с выбором режима загрузки Legacy (CSM). Не все пользователи знают, для чего он нужен, и включают его без всякой на то причины. Это приводит …


Какие процессоры поддерживает материнская плата

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


Драйвер EHCI

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

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

// Base I/O Address PciBar bar; PciGetBar(&bar, id, 0); EhciController *hc = VMAlloc(sizeof(EhciController)); hc->capRegs = (EhciCapRegs *)(uintptr_t)bar.u.address; hc->opRegs = (EhciOpRegs *)(uintptr_t)(bar.u.address + hc->capRegs->capLength); // Read the Command register // Читаем командный регистр uint cmd = ROR(usbCmdO); // Write it back, setting bit 2 (the Reset bit) // Записываем его обратно, выставляя бит 2(Reset) // and making sure the two schedule Enable bits are clear. // и проверяем, что 2 очереди выключены WOR(usbCmdO, 2 | cmd &

0); // Enable controller // Запускаем контроллер, 8 микро-фреймов, включаем // последовательную и асинхронную очередь //hc->opRegs->usbCmd = (8 << CMD_ITC_SHIFT) | CMD_PSE | CMD_ASE | CMD_RS; WOR(usbCmdO, (8 << CMD_ITC_SHIFT) | CMD_PSE | CMD_ASE | CMD_RS); while (ROR(usbStsO)&STS_HCHALTED); // Configure all devices to be managed by the EHCI // Говорим, что завершили //hc->opRegs->configFlag = 1; WOR(configFlagO, 1); // Probe devices // Пробуем порты EhciProbe(hc);

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

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

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

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

static void EhciDevIntr(UsbDevice *dev, UsbTransfer *t) < EhciController *hc = (EhciController *)dev->hc; // Determine transfer properties // Обговариваем характеристики транзакции uint speed = dev->speed; uint addr = dev->addr; uint maxSize = t->endp->desc->maxPacketSize; uint endp = t->endp->desc->addr & 0xf; EhciTD *td = EhciAllocTD(hc); if (!td) < t->success = false; t->complete = true; return; >EhciTD *head = td; EhciTD *prev = 0; // Data in/out packets uint toggle = t->endp->toggle; uint packetType = t->endp->desc->addr & 0x80 ? USB_PACKET_IN : USB_PACKET_OUT; uint packetSize = t->len; EhciInitTD(td, prev, toggle, packetType, packetSize, t->data); // Initialize queue head // Инициализируем голову очереди EhciQH *qh = EhciAllocQH(hc); EhciInitQH(qh, t, head, dev->parent, true, speed, addr, endp, maxSize); //printQh(qh); // Schedule queue // Добавляем в очередь EhciInsertPeriodicQH(hc->periodicQH, qh);>

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

Xhci hand off что это в БИОСе?

Xhci hand off что это в биосе?

Как театр начинается с вешалки… Ну, в общем, начнем знакомиться с новинкой от ASUS заглянув в CMOS Setup материнской платы J1800I-C.

Благо дело, сейчас доступ к встроенному программному обеспечению возможен как при нажатии привычной клавиши DEL, так и по F2.

Эта маленькая хитрость деталь интерфейса свидетельствует о том, что платформы тайваньского бренда осваиваются, а в некоторых случаях и с успехом конкурируют, в тех нишах IT-бизнеса, где персонал привык к эргономике HP, Dell и иже с ними. Как дети, ей Богу!

Как включить поддержку USB в BIOS на вашем ПК?

Intel xhci в БИОС как отключить?

Эта статья посвящена вопросу о том, как в BIOS включить поддержку USB. Как выясняется, далеко не все пользователи знают, что функции Universal Serial Bus (в русской интерпретации — «Универсальная Последовательная Шина») можно включать и настраивать через BIOS Setup. На обстоятельствах, в силу которых вам может потребоваться данная операция, мы не будем заострять внимание – они могут быть различны. К примеру, вы обнаружили, что устройства USB на вашем компьютере работают медленнее, чем должны, и хотите проверить, поддерживает ли БИОС вашего компьютера стандарт данной шины последней версии.

Как найти опции USB в BIOS

Для начала войдите в BIOS Setup при загрузке компьютера и ноутбука. О том, как это сделать, была посвящена на нашем сайте отдельная статья. Стоит, правда, отметить, что раздел BIOS c функциями USB не всегда бросается пользователю в глаза. К тому же у разных производителей BIOS в разных её версиях функции управления шиной могут быть размещены в различных разделах. Это могут быть разделы Advanced, Integrated Peripherals, Onboard Devices, и т.д.

Может, конечно, случиться и так, что раздела с настройкой функций USB в BIOS вашего ноутбука или настольного компьютера просто нет. Такая ситуация чаще всего может встретиться в ноутбуках, в которых количество доступных пользователю опций вообще не очень-то велико. В BIOS своего нетбука HP, например, я такой опции не нашел, как ни искал. Ну что ж, значит, не судьба…

Установка опций USB в BIOS

Количество и набор функций USB, которые вы можете регулировать в BIOS, также могут сильно различаться в зависимости от версии. Часто в Setup можно установить поддержку USB-мыши и клавиатуры, присоединяемых внешних накопителей. Можно также вообще отключить/включить возможность подключения устройств USB или включить поддержку отдельной версии, например, USB 2.0.

Список наиболее часто встречающихся опций USB (в разных версиях BIOS могут иметь разные названия):

  • USB Function – включение/отключение контроллера Универсальной Последовательной Шины
  • USB 2.0 Controller Mode – переключение контроллера USB 2.0 в режим 1.1 и обратно
  • Assign IRQ For USB – назначение IRQ устройствам USB
  • USB Speed – установка скорости работы шины USB
  • Legacy USB Support – поддержка USB-клавиатуры и мыши
  • USB Storage Support – поддержка внешних накопителей на данной шине
  • Emulation Type – установка режимов эмуляции USB-накопителей

Установив необходимый вам параметр, не забудьте сохранить его, выбрав для перезагрузки компьютера опцию BIOS Setup «Exit and Save Changes» («Выйти, сохранив изменения»).

Устанавливая параметры USB в BIOS, впрочем, следует помнить о том, что их неправильная установка может привести к неработоспособности каких-либо устройств, постоянно подключенных к универсальной последовательной шине, например, клавиатуры или мыши.

Заключение

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

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

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

Регистры 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 — нет.

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

Организация структуры для обработки запросов включает в себя очередь и трансфер дескрипторы(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-запрос)


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

В настройках BIOS присутствует множество непонятных обычному пользователю параметров (в основном, по причине использования аббревиатур). Параметр EHCI Hand-Off — один из таких. Отключив его, вы обнаружите, что некоторые USB-устройства стали работать некорректно или вовсе не реагируют на обращение к ним.

Стоит отметить, что эта статья актуальна для пользователей уже устаревших версий ОС Windows (вышедших до Windows XP SP2), так как в более новых ОС конфигурирование устройств USB с помощью параметра EHCI Hand-Off не требуется.

Что такое параметр EHCI Hand-Off в BIOS?

Для управления шиной USB 2.0 и подключаемыми к ней устройствами на материнской плате предусмотрен специальный контроллер, именуемый EHCI (Enhanced Host Controller Interface или «улучшенный интерфейс хост-контроллера»).

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

Однако в процессе загрузки старых операционных систем (появившихся до Windows XP SP2) имела место одна проблема — BIOS продолжал управлять шиной USB в монопольном режиме. Это приводило иногда к конфликтам и даже полной неработоспособности всех подключаемых USB-устройств, зависаниям и появлению BSOD (синего экрана смерти). Для решения этой проблемы и был разработан механизм передачи управления шиной USB от BIOS операционной системе, называемый EHCI Hand-Off.

EHCI Hand-Off исключает возможность возникновения конфликтов, связанных с контроллером шины USB. В операционных системах, вышедших после Windows XP SP2, эта проблема была исправлена, а сам механизм ECHI Hand-Off перестал быть актуальным.

В редакторе настроек BIOS параметр имеет только два возможных значения: Enabled и Disabled. По умолчанию параметр EHCI Hand-Off всегда включён. Если на компьютере установлена старая ОС (появившаяся до Windows XP SP2), отключать параметр не рекомендуется. Однако если на компьютере установлена более новая ОС, отключить параметр EHCI Hand-Off можно без последствий и риска. Сделать это можно, загрузив редактор настроек BIOS с помощью горячих клавиш (F2 или Del в зависимости от модели материнской платы) сразу после включения компьютера (как только появится на экране появляется логотип производителя материнской платы).

В редакторе настроек BIOS перейдите на вкладку Advanced, найдите параметр EHCI Hand-Off и установите нужное значение с помощью контекстного меню. Завершите работу в редакторе настроек BIOS, сохранив внесённые изменения.


Выводы

Параметр EHCI Hand-Off отвечает за передачу управления шиной USB от BIOS операционной системе. Этот механизм потерял свою актуальность с выходом Windows XP SP2. Во многих современных материнских платах параметр EHCI Hand-Off отсутствует или недоступен для редактирования. В дополнение к нему относительно недавно появился параметр XHCI Hand-Off.

В отличие от EHCI, контроллер XHCI управляет шиной USB 3.0. Часто на материнской плате размещены оба контроллера шины USB — EHCI и XHCI (в связи с наличием портов USB 2.0 и 3.0 для совместимости с моделями очень старого оборудования), а в редакторе настроек BIOS можно также переключать режим работы портов USB с 3.0 на 2.0 при необходимости.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Назначение параметра: Данный параметр определяет, кто будет разрешать конфликт в случае одновременного использования периферийными устройствами шины USB: операционная система, или БИОС.

Возможные варианты значений:
Enabled - Функция включена. Рекомендуется включить, если операционная система не поддерживает EHCI Hand-off (XHCI Hand-off). Решать конфликты при одновременном использовании USB будет БИОС.
Disabled - Функция выключена. Операционная система будет контролировать использование USB несколькими устройствами. Рекомендуется выключить и в том случае, если в БИОС клавиатура и мышь работают, но в операционной системе - нет.

Проявления неисправностей:

- Если ОС не поддерживает данную функцию и она выключена, то возможен крах системы, либо неработоспособность USB-устройств.

КОММЕНТАРИИ к "EHCI Hand-off"

Чтобы оставить комментарий, вам необходимо зарегистрироваться на сайте.

ДРУГИЕ МАТЕРИАЛЫ ПО ТЕМЕ

Проявления неисправностей, связанных с данным параметром (0)

IT-WIKI (0)

Параметры BIOS (29)

Особенности значений параметров и их влияние на работу компьютера XHCI (eXtensible Host Controller Interface) - Интерфейс расширяемого контроллера, который управляет шиной USB 3.0.

Описание значений параметров:

Disabled - отключение параметра дает возможность контролировать работу портов USB 3.X только BIOS (UEFI).
Enabled - при включении параметра, контроль за шиной берет на себя операционная система, при условии, что она поддерживает USB 3.X

Описание значений параметров:

Enabled - Порт включен.
Disabled - Порт выключен.

Параметр позволяет включать/отключать USB-порты в компьютере. - Enable all ports
- Disable all ports
- Disable all rear ports
- Disable all front ports
- Disable all external ports
- Disable unused ports

Описание значений параметров:

Enable all ports - все порты включены,
Disable all ports - все порты отключены,
Disable all rear ports - все задние порты отключены,
Disable all front ports - все передниепорты отключены,
Disable all external ports - все внешние порты отключены,
Disable unused ports - все неиспользуемые порты отключены,

Параметр включает поддержку ASPM для южного моста материнской платы.

ASPM (Active-State Power Management) - Технология активного энергосбережения для шины PCI Express, позволяющая отдельным линиям шины уменьшать мощность в зависимости от нагрузки за счет прекращения подачи пустых, не содержащих данных, сигналов.

Базовая спецификация PCI Express определяет два уровня ASPM, которые предназначены для обеспечения возможности компенсировать повышенное энергосбережение с быстрым восстановлением до состояния L0.

Описание значений параметров:

Disabled - Технология отключена.
Auto - Значение выбирается автоматически.
L0s - В данном режиме прекращается подача пустых сигналов в одном направлении, если отсутствуют какие-либо данные. Времени для перехода от L0s к L0 требуется мало.
L1 - Прекращается подача пустых сигналов в обоих направлениях, но требуется больше времени для перехода от L1 к L0.
L0sL1 - Разрешены оба режима.

- ошибка четности на фазе адреса транзакции,
- ошибка четности на этапе данных транзакции специального цикла,
- серьезные проблемы, кроме четности, обнаруженные устройством PCI,
- критические сбои системы, обнаруженные логикой системной платы

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

Описание значений параметров:

- Serial Port Settings
- COM Port Settings
- Onboard UART 1/2
- Onboard UART
- Onboard Serial Port
- Change Settings

Параметр позволяет назначить порту адрес в памяти/номер прерывания, через который COM-порт может обращаться к процессору, чтобы тот принял и обработал информацию от устройства ввода/вывода, подключенного к порту.

Описание значений параметров:

3F8/IRQ4, 2F8/IRQ3, 3E8/IRQ4, 2E8/IRQ3 - Адрес и номер прерывания выбираются вручную. Ручная настройка может быть полезна для решения конфликта выбора номера прерывания между COM-портом и каким-нибудь другим портом ввода/вывода или устройством. Такие конфликты могут возникать в очень старых операционных системах (MS-DOS), которые не могу сами их разрешать.
Auto - Адрес и номер прерывания выбираются автоматически..

- Serial Port
- COM Port

Включает/отключает COM-порт. COM-порт - это последовательный порт, предназначенный для подключения устройст ввода/вывода, не требовательных к скорости передачи данных (Dial-Up модемы, компьютерные мыши и т.п.). Начал устаревать в начале 2000-х гг. с распространением более быстрой и универсальной USB-шины. В компьютере может быть до 4-х COM-портов (Обозначения в BIOS: Port0, Port1,Port2,Port3)

Описание значений параметров:

Disabled - Порт отключен.
Enabled - Порт включен.

- Power Up On PCI/PCIE Devices
- Resume by PCIE PME
- PCI Express PME

Параметр позволяет компьютеру включиться после появления какого-либо сигнала от шины PCIe, PCI или какой-либо другой шины. Источником такого сигнала могут служить различные карты расширения (сетевая, TV-тюнер, плата видеозахвата и т.п.), связанные с "внешним миром".

Описание значений параметров:

Disabled - Компьютер не будет включаться при появлении сигнала в шине.
Enabled - Компьютер включится при появлении сигнала в шине.

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

Описание значений параметров:

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