Что такое USB-host и USB OTG
Я начинаю серию справочных статей по отдельным компонентам и функциям различных электронных устройств — планшетов, ноутбуков, ридеров, плееров и так далее. Это такой своеобразный ликбез в сфере бытовой электроники. Я постараюсь сделать эти статьи понятными для максимально широкого круга людей.
Тема сегодняшней статьи — USB-host (USB-хост). Это весьма примечательная функция, которой оснащается достаточно большое количество устройств (в основном, правда, довольно дорогих), и рассказать о ней определенно стоит. Также я расскажу и о функции USB OTG — фактически, более современной разновидности USB-хоста.
Если говорить максимально просто и доступно, то наличие USB-хоста на каком-нибудь устройстве означает возможность подключения к нему различных внешних устройств — например, флэшек, внешних жестких дисков, кардридеров, плееров, фотоаппаратов и так далее. Весьма интересна возможность подключения и внешней «периферии» — клавиатур, мышек и так далее.
Устройство с функцией USB-хоста обладает полноценным портом USB и специальным программным обеспечением (в частности, драйверами), которое позволяет осуществлять работу с подключаемыми устройствами: передавать на них файлы, копировать файлы с них, использовать подключенное устройство в качестве клавиатуры и так далее.
Что интересно, к устройству с USB-хостом можно подключать также USB-хабы — устройства, которые подобны сетевым тройникам. Например, на планшетах обычно имеется только один порт USB. Подключив к нему USB-хаб (а стоит он недорого), вы получите уже два или даже четыре порта, что весьма удобно — например, к одному можно подсоединить клавиатуру, а к другому подключать флэшки.
В каких случаях USB-хост удобен и нужен? Да во многих. Согласитесь, возможность скопировать файлы на плеер, планшет или ридер без подключения его к компьютеру не может не радовать. Вам надо просто подключить к устройству флэшку или какое-либо другое устройство, с которого вам нужно перенести файлы.
Весьма приятна возможность перенести снимки с фотоаппарата на планшет или плеер с жестким диском, и тем самым освободить память фотоаппарата, сделать еще больше снимков. Подключение клавиатуры к планшету — тоже очень приятная возможность. Удобны и принтеры с наличием USB-хоста: к ним можно напрямую подключать фотоаппараты, телефоны, флэшки и печатать снимки или документы прямо с них; компьютер для этого совершенно необязателен.
При этом стоит отметить, что само наличие функции USB-хоста еще не гарантирует его нормальную работу. В частности, процесс обмена файлами через USB может осуществляться достаточно сложным и неудобным образом — в качестве примера можно привести PocketBook 302 (это, кстати, единственный ридер, оснащенный USB-хостом). Какие-то устройства могут просто не подключиться ввиду отсутствия драйверов или неких недоработок программистов, писавших программное обеспечение для USB-хоста.
Именно поэтому я советую перед покупкой того или иного устройства проверить, насколько качественно реализована в нем опция USB-host. Попробуйте подключить флэшку, посмотреть, насколько легко и удобно можно скопировать файлы с нее и на нее. Если у вас есть usb-клавиатура, которую вы планируете использовать вместе с покупаемым устройством, не лишним будет проверить корректность ее работы. Если же вы соберетесь купить такую клавиатуру уже после покупки самого устройства, то возьмите с собой в магазин это устройство и проверьте, насколько корректно будут с ним работать представленные в магазины клавиатуры.
Стоит отметить, что сейчас имеются в продаже устройства и с поддержкой так называемого USB OTG. Я бы сказал даже, что USB OTG сейчас встречается в устройствах довольно часто, чаще, чем классический USB-хост. В чем основное отличие USB OTG? В том, что USB OTG не предполагает наличие отдельного классического полноразмерного порта USB. Для подключения периферийных устройств используется порт microUSB или miniUSB, который, вообще говоря, служит главным образом для связи устройства с компьютером. На устройстве с USB OTG этот порт фактически совмещает в себе функции USB-host (подключение периферии) и USB-device (подключение к компьютеру).
Чтобы к miniUSB/microUSB порту с поддержкой OTG подключить флэшку или, скажем, клавиатуру, необходимо приобрести специальный переходник, который стоит порядка 500 рублей (при желании его можно найти по более низкой цене или же вовсе сделать самому — в интернете есть инструкции). Затем нужно вставить этот переходник в порт miniUSB/microUSB, а к соответствующему выходу переходника подключить нужное вам периферийное устройство.
И тут опять же стоит отметить, что не на всех устройствах USB OTG реализовано хорошо. Где-то поддержка USB OTG может быть заявлена, но ввиду отсутствия необходимого программного обеспечения она не работает. Пример — ридеры Onyx Boox. Также стоит отметить, что внешние жесткие диски по протоколу USB OTG подключить вряд ли удастся: они потребляют слишком много энергии; планшет «прокормить» их просто не в состоянии.
Так мы плавно переходим к основному недостатку USB-хоста (как классического, так и USB OTG): его активное использование способствует быстрой разрядке устройства. Конечно, клавиатура много энергии пожирать не будет, а вот постоянно подключенная и использующаяся флэшка — будет.
Под конец стоит ответить на вопрос: почему USB OTG сейчас популярнее, чем обычный USB-host? Ответ, на самом деле, довольно прост: USB OTG позволяет уменьшить толщину и вес устройства. В случае с классическим USB-host’ом в устройство надо встроить полноразмерный USB-порт (соответственно, увеличивается толщина) и обычный mini/micro-USB порт — для подключения к компьютеру (увеличивается и итоговый вес). В случае с USB OTG надо установить только один mini/microUSB-порт, просто многофункциональный — работающий и на вход, и на выход. Более того, USB OTG отличается более низким энергопотреблением, хотя и не позволяет поэтому подключать такие прожорливые устройства, как внешние жесткие диски.
Но USB OTG не лишен и недостатков, главным из которых является необходимость покупки переходника и постоянной его переноски с собой.
Посмотреть, поддерживает ли интересующее вас устройство опцию USB-host или USB OTG, можно на странице описания устройства в разделе «Технические характеристики» («Спецификации»). Описание, разумеется, можно найти на сайте производителя устройства, а также на сайтах многих магазинов.
Рубрики: Электроника | Автор: Dmitry_Vasfilov
17 Replies to “Что такое USB-host и USB OTG”
Максим 17.01.2013 в 7:48 пп написал(а):
Кстати: может сделать небольшой обзор- справочник по кабелям? Что такое AM-AF, AM-BM и прочие абревиатуры. Для чего они нужны, полезны и т.д
Можно сюда и HDMI добавить. Сейчас в продаже как минимум три разновидности(модификации) этих кабелей. Последняя, самая дорогая позволяет использовать этот кабель для всего- вплоть до передачи интернета. Т.е из него пытаются сделать универсальный стандарт.
Dmitry_Vasfilov 17.01.2013 в 10:26 пп написал(а):
Увы, я совершенно не разбираюсь кабелях, во всех этих AM-AF, AM-BM и тому подобных разновидностях.
Максим 18.01.2013 в 11:13 дп написал(а):
Самое оригинальное применение AM-AF : если пользуетесь модемом от сотового оператора, то при плохом приеме удлинить соединение с помощью этого кабеля и подвесить модем к потолку или выкинуть в форточку.
Андрей 24.01.2013 в 7:42 дп написал(а):
. Но USB OTG не лишен и недостатков — невозможность подключения USB-хаба (разветвителя).
А как же это видео?
http://samsung-galaxy.mobi/samsung-galaxy-s3-i-dzhoystik-posredstvom-usb-otg/
Dmitry_Vasfilov 25.01.2013 в 2:06 пп написал(а):
Спасибо за информацию и ссылку! Сейчас сам удивляюсь, с чего взял, что нельзя подключить юсб-хаб к устройству с OTG:)
Убрал соответствующее предложение.
Dmitry 26.01.2013 в 3:21 пп написал(а):
Hi All!
К моему Samsung Galaxy Tab 7.7 через USB-OTG кабель непосредственно подключаются маломощные (до 500мА потребляемого тока) USB-устройсва, как-то USB Flash, USB Card Readers, etc., а также мощные USB устройства типа EBook, Ext USB HDD с подключенным собственным питанием. Через внешний USB-hab со своим источником питания поключаются внешние USB HDD, не имеющие собственного источника питания — проверено на Jet HDD 0.5TB, который получает питание только через USB. Причем, в отличе от многих китайских недопланшетов, видится несколько поключенных к хабу устойств, а не «одно из…» То же самое могу сказать про Samsung Galaxy S3. Про другие врать не буду, пока лично не проверю!
Yours sincerely, Dmitry aka wcat
игорь 08.09.2013 в 8:45 пп написал(а):
А в программном отношении USB OTG это просто USB или нет?
Dmitry_Vasfilov 08.09.2013 в 11:36 пп написал(а):
Насколько я знаю, нет. Нужны специальные драйвера. Бывает, что устройство оснащено USB OTG аппаратно, но программно возможность «общения» с внешними устройствами не поддерживается.
колян 04.01.2014 в 10:57 дп написал(а):
Зачем вообще эта глупость на планшетах? Обычный порт вполне бы подошёл как на нетбуках. Как и для usb типа В, так и для типа А есть варианты и мини, и микро. Через тип А нельзя подключать устройство к компу, но зачем вообще это надо? Мы же не подключаем нетбуки к компу через USB и не паримся по этому поводу. USB otg больше нужен телефонам, но планшет всё же ближе к нетбуку, чем к телефону.
Евгений 29.01.2014 в 3:43 пп написал(а):
Добрый день. при подключении планшета через USB OTG к ПК насколько свободно можно оперировать фалами на планшете?
КолянЪ 13.02.2014 в 1:32 пп написал(а):
USB-OTG — это всё извращение на самом деле, полезное, если только, для смартфонов на тот случай, когда понадобится к смартфону флешку подключить, но при этом сохранить возможность подключать смартфон к компу. Это, кстати, также является пережитком прошлого, из тех времён, когда не было флешек и приходилось покупать специальные кабеля для подключения телефонов к компьютерам. Ну, может быть остался в этом какой-то смысл, всё-таки не все компьютеры оснащены картридером для microSD-флешек. Вот это тот единственный случай, когда от USB-OTG есть реальная польза. Использование же USB-OTG на планшетах — это реальный маразм, поскольку планшет подключать к компу смысла нет никакого, ибо есть встроенный wifi, нормального размера дисплей, короче говоря, есть возможность по-человечески работать в сети. А раз нет необходимости подключаться к компу, то, спрашивается, ЗАЧЕМ ВООБЩЕ НА ПЛАНШЕТЕ УСТАНАВЛИВАТЬ USB-ПОРТ ТИПА B? Это и есть главный вопрос, но такое впечатление, что производители воспринимают планшет как устройство более близкое к телефону, нежели чем к ноутбуку, по-другому эту глупость в виде установки USB портов типа B не объяснишь. Вполне себе замечательно можно было бы установить порт microUSB типа A и подключать к планшету не только флешки, но и принтеры, например: драйвера есть и для Windows, и для Android (ибо на Linux’e это дело собрано).
альк 20.07.2014 в 8:57 дп написал(а):
Салют,Колян! Ну вот я тоже пользовался флешками для передачи данных с телефона на планшет(и обратно).
Пока телефон перестал запускаться с флешкой.Теперь собрал один кабель,соединив по цветам два конца(папа-папа) с микроЮСБ,так как в продаже оного нет:-(.Не пойму,почему планшет на видит телефон,не появляется даже значок ЮСБ соединения.Может,что не правильно делаю?
Стас 27.12.2014 в 4:22 пп написал(а):
Где можно приобрести нужные драйвера для отг?
Dmitry_Vasfilov 27.12.2014 в 10:15 пп написал(а):
Думаю, что в первую очередь стоит проверить сайт производителя гаджета, к которому нужны драйвера. Если там их нет, стоит связаться с их техподдержкой.
Илья 19.05.2016 в 12:38 пп написал(а):
А хде реклама? хотел отблагодарить за инфу, а рекламы нету..
Илья 19.05.2016 в 12:39 пп написал(а):
konstantin 01.02.2018 в 1:35 пп написал(а):
прив народ. попытаюсь внести ясность..по сути- идея заключалась в том что бы разную периферию цеплять на один порт..типа хаба но — USB..поскольку уже и так море усб модификаций -а-в-с микро мини.стандарт.. решили не замарачиваться -а запипенили разьем -своего формата..не везде корректно работает..но если есть на девайсе — значит грамотно реализован(аппаратно-программно) на гаджете. пример — реализация wifi девайсов на одном приемнике(одном занятом порте usb)
Область основной боковой панели
Рубрики
Свежие записи
- Консультации по выбору мужской одежды и обуви
- В каких пределах варьируются различные характеристики хлопка?
- Интервью с Массимилиано Брешани, совладельцем и президентом компании Bresciani
- Interview with Massimiliano Bresciani, the co-owner and president of Bresciani company
- Египетский хлопок: карты посадок сортов
Что такое «USB хост-контроллер» и «корневой USB концентратор» диспетчере устройств?
В чем разница между «универсальным» и «расширенным» хост-контроллером?

Лучший ответ
«Расширенный» хост-контроллер (Enhanced Host Controller) был введен фирмой Intel для поддержки высокой скорости в USB 2.0. Нужны для работы USB интерфейса и устройств, использующих его. Корневой концентратор — устройство, обслуживающее USB-порты.
Остальные ответы
Это все твои USB разъёмы подключенные к материнской плате на задней панели и передней панели системного блока
Русские Блоги
Нулевые знания USB
USB — это метод передачи данных, это также шина данных, и это одна из самых сложных шин. Чтобы
На оборудовании он подключается с помощью вилки. С одной стороны вилка, а с другой розетка. Например, гнездо на ПК — это гнездовой соединитель, а устройство USB использует штекерный соединитель для подключения к ПК. Чтобы
В настоящее время существует три типа аппаратных интерфейсов USB. Тип, используемый на обычных компьютерах, называется Type; исходный интерфейс, использовавшийся в эпоху обычных телефонов Nokia, — Mini USB; и текущий Micro USB, используемый телефонами Android.
Host
USB — это передача данных по всей шине, управляемой хостом. На одной шине USB может быть только один хост. Чтобы
OTG
Режим On The Go, представленный в USB2.0, предлагает новую концепцию, называемую протоколом согласования хоста (протокол согласования хоста), которая позволяет двум устройствам обсуждать, кто идет Когда Host.
Дополнительные сведения о USB см. На официальном веб-сайте USB и в следующей статье:
http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html
Концепция USB HOST / DEVICE / OTG:
Контроллер OTG может использоваться как хост или как устройство.Роль контроллера обычно определяется уровнем USB ID. Полные аппаратные сигналы контроллера USB2.0 OTG следующие:
USB_ID: Входной сигнал, определяемый протоколом USB OTG, используемый для определения роли по умолчанию (хост или устройство) устройства, подключенного к порту USB. USB_ID подтянут по умолчанию и находится в состоянии устройства.Если вы хотите, чтобы контроллер переходил в состояние хоста, вам необходимо подключить порт mini-A или порт micro-A, чтобы замкнуть USB_ID на землю.
Его также можно принудительно переключить с помощью программного обеспечения, через управление
/sys/bus/platform/drivers/usb20_otg/force_usb_mode
реализация, может иметь следующие три значения:
0: определяется аппаратно, а именно USB ID
1: обязательный режим хоста
2: обязательный режим устройства
Разница между режимом HOST и режимом OTG
Разница между OTG и HOST заключается в том, что HOST поддерживает немного больше устройств, но для реализации передачи данных необходимо соответствующее подключение интерфейса подчиненного устройства, в то время как передача OTG удобна и может передаваться без интерфейса подчиненного устройства на другие машины.
Как работает USB OTG
Наиболее важным расширением дополнительной спецификации OTG к USB 2.0 является более энергоэффективное управление питанием, позволяющее устройству работать как в режиме хоста, так и в режиме периферии. Существует два типа устройств OTG: устройства OTG двойного назначения (устройство Dualrole) и периферийные устройства OTG (устройство Peripheralonly OTG). Устройство OTG двойного назначения полностью соответствует спецификации USB 2.0. В то же время оно также предоставляет ограниченные возможности хоста и сокет MiniAB, поддерживает протокол согласования хоста (HNP) и поддерживает протокол запроса транзакции, как периферийное устройство OTG. (Протокол запроса сеанса, SRP). При работе в качестве хоста устройство OTG двойного назначения может обеспечивать ток 8 мА на шине, в то время как предыдущий стандартный хост должен обеспечивать ток от 100 до 500 мА.
Когда два устройства OTG двойного назначения соединены вместе, они могут поочередно работать как хост и подчиненное устройство.Эта функция совместима с существующей моделью структуры хоста / периферии со спецификацией USB. Хост OTG отвечает за инициализацию задач передачи данных, таких как сброс шины, получение различных дескрипторов USB и настройка устройств. После завершения этих конфигураций два устройства OTG могут передавать информацию в форме ведущего и ведомого соответственно.Процесс обмена ролями ведущий-ведомый между двумя устройствами определяется протоколом передачи узла (HNP).
1.1 Начальные функции хоста (Adevice) и подчиненного (Bdevice)
Начальная функция устройства реализуется путем определения соединителя. OTG определяет карманный разъем под названием MiniAB, который можно напрямую подключать к разъемам MiniA или MiniB. MiniAB имеет контактный штырь, подтянутый к клемме питания, а штекер MiniA имеет ID (R 100 кОм), подключенный к земле. Когда два устройства OTG соединены вместе, контакт ID на стороне штекера MiniA будет вводить состояние «0», контакт ID на стороне штекера MiniB равен «1», а устройство OTG с идентификатором 0 по умолчанию является хостом (Adevice). , Устройство OTG с ID 1 по умолчанию является подчиненным (устройство B). Рисунок 1 иллюстрирует сказанное выше.
1.2 Протокол запроса сеанса (SRP)
Этот протокол позволяет устройству Adevice (которое может питаться от батареи) экономить энергопотребление, отключая Vbus, когда шина не используется, а также предоставляет возможность Bdevice запускать действия шины. Любое устройство, включая ПК или портативный компьютер, может реагировать на SRP; любое устройство B, включая стандартное периферийное USB-устройство, может запускать SRP; требуется устройство с двойным функционалом как для запуска SRP, так и для ответа на SRP.
1.3 Протокол согласования хоста (HNP)
HNP — это протокол, используемый для преобразования между Adevice и Bdevice master / slave (фактически, изменение направления кабеля). Результат обмена функциями ведущий / ведомый показан в следующем процессе:
(1) Используйте подтягивающий резистор, чтобы отправить сигнал ведомому устройству.
(2) Устройство может установить функцию «HNP Enable» на Bdevice.
(3) Bdevice отключен и поднят.
(4) ADevice подключено к подтягивающему резистору, что указывает на то, что Adevice является подчиненным.
(5) Устройство подает питание на Vbus.
(6) Bdevice обнаруживает подтягивание Adevice.
(7) Сбросить / перечислить / использовать устройство.
1.4 Драйвер
В отличие от хостов ПК, портативные устройства не имеют удобного способа и достаточного места для загрузки новых драйверов. Поэтому спецификация OTG требует, чтобы каждое устройство OTG двойного назначения имело список поддерживаемых периферийных целевых устройств OTG, который включает такую информацию, как тип устройства и производитель.
В отличие от ПК, стек драйверов устройства двойного назначения OTG состоит из стека хоста USB и стека устройств USB, чтобы удовлетворить потребности этих двух методов работы. Драйвер OTG решает, использовать ли стек хоста USB или стек устройств USB, в зависимости от разницы в разъемах или наличия рабочего режима устройства переключения NHP.
Когда устройство двойного назначения OTG работает в режиме хоста, работает стек хоста USB. Драйвер хост-контроллера отвечает за обмен данными между стеком хоста USB и конечной точкой оборудования, драйвер USB перечисляет и сохраняет информацию об устройствах, а драйвер класса хоста целевого периферийного устройства поддерживает устройства в списке целевых устройств. Драйвер класса хоста предоставляется производителем чипа. В то же время OTG предоставляет общий драйвер класса хоста (который может быть изменен для неуниверсальных устройств).
Когда устройство двойного назначения OTG работает в ведомом режиме, стек USB-устройств работает. Драйвер контроллера устройства отвечает за обмен данными между стеком USB-устройства и конечной точкой оборудования. Уровень протокола USB отвечает за обработку спецификации протокола USB. Функция драйвера устройства зависит от функции устройства двойного назначения (например, цифровых камер, запоминающих устройств, принтеров). Подождите).
Драйвер OTG отвечает за обработку преобразования рабочего режима устройства OTG двойного назначения. В то же время он также может возвращать результат (например, поддерживает ли устройство HNP) и обрабатывать ошибки шины. Программа прикладного уровня запускает или завершает транзакцию передачи через драйвер OTG и обменивается данными с аппаратным уровнем через стек хоста USB или стек устройств.
1.5 Модель потока данных
Хост и устройство OTG разделены на три разных уровня: функциональный уровень, уровень USB-устройства и уровень интерфейса USB, как показано на рисунке 2.
Уровень интерфейса USB обеспечивает физическое соединение для хоста OTG и устройства OTG.Программное обеспечение системы USB использует хост-контроллер для управления передачей данных между хостом и устройством USB. По сравнению с хост-контроллером системное программное обеспечение USB занимается передачей данных и взаимодействием между клиентом и устройством с точки зрения клиента. Уровень USB-устройства обеспечивает используемое логическое устройство для программного обеспечения хост-системы USB. Хост реализует свои различные функции через клиентское программное обеспечение, которое соответствует его функциям.
Устройства OTG, как и предыдущие устройства USB, имеют два канала: канал потока данных и канал сообщения. Канал потока данных не имеет определенного результата, а канал сообщения имеет фиксированную структуру. Однако каждый канал имеет определенную полосу пропускания, тип передачи, направление передачи и размер буфера. Устройство с автономным питанием настроено с каналом управления по умолчанию и предоставляет такую информацию, как конфигурация и состояние устройства.
Один вопрос и один ответ:
1. Что такое USB OTG?
USB OTG — это дополнительная спецификация для USB 2.0.
2. Какое расширение USB OTG для USB 2.0 является наиболее важным?
Более энергосберегающее управление питанием и позволяет устройству работать в двух формах: хост и периферийное устройство.
3. В USB2.0 определены три типа: HOST (хост), Device, HUB.
OTG добавляет два новых устройства: устройство с двумя ролями, устройство OTG только для периферийных устройств (периферийное устройство OTG).
4. В USB 2.0 определены три пары разъемов (вилка и розетка): Standard-A (хост), Standard-B (периферийное устройство), Mini-B (меньшее Периферийные устройства)
Новый разъем OTG: Mini-A
Новые сокеты OTG: Mini-A и Mini-AB (с одновременной поддержкой вилок Mini-A или Mini-B)
Цвет пластика внутри вилки и розетки: Mini-A — белый, Mini-B — черный, а Mini-AB — серый.
5. В USB 2.0 определены два кабеля: от стандарта A до стандарта B, от стандарта A до Mini-B.
Два типа кабелей, добавленных OTG: Mini-A — Standard-B, Mini-A — Mini-B.
6. Двухролевое устройство OTG (двухролевое устройство) должно иметь:
1) Ограниченные возможности хоста
2) Может использоваться как полноскоростное периферийное устройство (дополнительный высокоскоростной режим)
3) Может использоваться в качестве полноскоростного хоста (необязательный низкоскоростной или высокоскоростной режим)
3) Список целевых устройств и драйверов OTG.
4) Поддержка SRP, HNP
5) Одна розетка Mini-AB
6) Токовый выход не менее 8 мА на VBUS
7) Как общаться с пользователями
7. Периферийное устройство OTG (периферийное устройство OTG):
1. Это обычное периферийное устройство USB.
2. Поддержка SRP
3. Разъем Mini-B (Mini-AB использовать нельзя)
8. Как реализовать Android USB может обнаруживать дополнительное устройство и отправлять хост-устройство одновременно
Для usb-связи мы должны сначала выяснить, какая сторона HOST, а какая SLAVE
Например, если ваш телефон Android используется в качестве хоста, для получения подчиненного устройства используйте UsbDevice для представления подчиненного устройства.
Если ваш телефон Android является подчиненным, вам нужно получить хост, используйте UsbAccessory для представления хоста
Топология USB
Для каждого встроенного чипа ЦП обычно интегрируется один или несколько хост-контроллеров. Каждый хост-контроллер фактически является устройством PCI, которое монтируется на шине PCI. В системе Linux разработчик драйвера должен предоставить хост-контроль Контроллер предоставляет драйвер, а хост-контроллер представлен структурой usb_hcd. Структура определена в /include/linux/usb/hcd.h.
Каждый хост-контроллер USB поставляется с концентратором USB, который называется Root Hub. Этот корневой концентратор может быть подключен к дополнительным концентраторам, а USB-устройства могут быть установлены на каждом концентраторе. Вообще говоря, USB Hub также является устройством USB. Каждый корневой USB-концентратор может напрямую или косвенно подключить 127 устройств
Несколько типов контроллеров USB: OHCI, UHCI, EHCI, xHCI
OHCI и UHCI являются стандартами интерфейса USB1.1, в то время как EHCI является стандартом интерфейса, соответствующим USB2.0, а последний xHCI является стандартом интерфейса USB3.0.
- OHCI (Open Host Controller Interface) — это стандарт, который поддерживает USB 1.1, но он не только для USB, но также поддерживает некоторые другие интерфейсы, например, он также поддерживает Firewire от Apple (Firewire, IEEE).
1394) интерфейс. По сравнению с UHCI аппаратное обеспечение OHCI является сложным, а аппаратное обеспечение делает больше, поэтому реализовать соответствующую программную задачу относительно просто. В основном используется для не x86 USB, таких как карта расширения, USB-хост управления встроенной платой разработки. - UHCI (Universal Host Controller Interface) — это стандарт интерфейса для USB1.0 и 1.1 под руководством Intel, который не совместим с OHCI. Программные задачи UHCI тяжелы и должны быть более сложными, но вы можете использовать более дешевые и простые аппаратные USB-контроллеры. Intel и VIA используют UHCI, а остальные поставщики оборудования используют OHCI.
- EHCI (расширенный интерфейс хост-контроллера) — это стандарт интерфейса USB2.0, возглавляемый Intel. EHCI обеспечивает только высокоскоростные функции USB2.0 и использует UHCI или OHCI для обеспечения поддержки высокоскоростных или низкоскоростных устройств.
- xHCI (расширяемый интерфейс хост-контроллера) — это новейший и самый популярный стандарт интерфейса USB 3.0, который значительно улучшил скорость, энергосбережение, виртуализацию и другие аспекты по сравнению с предыдущими тремя. xHCI поддерживает все типы USB-устройств (USB 3.0 SuperSpeed, USB 2.0 с низкой, полной и высокой скоростью, USB 1.1 с низкой и полной скоростью). Целью xHCI является замена предыдущих 3 (UHCI / OHCI / EHCI).
Драйвер хост-контроллера USB
Как следует из названия, хост-контроллер используется для управления связью между устройством USB и процессором. О том, что ЦП будет делать с устройством, сначала будет уведомлять хост-контроллер вместо прямой отправки инструкций на устройство USB. После получения команды ЦП хост-контроллер направит USB-устройство для выполнения соответствующей задачи. Таким образом, после того, как ЦП передает команду хост-контроллеру, ему не нужно заниматься остальной работой, и ЦП переключается на другие вещи.
Хост-контроллер USB должен управляться драйвером хост-контроллера USB для работы. Драйвер хост-контроллера USB представлен как hc_driver. Каждый хост-контроллер в компьютерной системе имеет соответствующую структуру hc_driver, которая определена в /include/linux/usb/hcd.h.
Ниже мы анализируем драйвер хост-контроллера USB, используя usb 3.0 xHCI в качестве примера для объяснения.
xHCI управляется моделью драйвера платформы платформы, а также устройством и драйвером.
Сначала посмотрите на часть устройства
/driver/usb/dwc3/host.c
int dwc3_host_init(struct dwc3 *dwc) struct platform_device *xhci; int ret; xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); if (!xhci) dev_err(dwc->dev, "couldn't allocate xHCI device\n"); ret = -ENOMEM; goto err0; > dma_set_coherent_mask(&xhci->dev, dwc->dev->coherent_dma_mask); xhci->dev.parent = dwc->dev; xhci->dev.dma_mask = dwc->dev->dma_mask; xhci->dev.dma_parms = dwc->dev->dma_parms; dwc->xhci = xhci; ret = platform_device_add_resources(xhci, dwc->xhci_resources, DWC3_XHCI_RESOURCES_NUM); if (ret) dev_err(dwc->dev, "couldn't add resources to xHCI device\n"); goto err1; > ret = platform_device_add(xhci); if (ret) dev_err(dwc->dev, "failed to register xHCI device\n"); goto err1; > return 0; err1: platform_device_put(xhci); err0: return ret; >
Глядя на раздел драйверов
/drivers/usb/host/xhic.c
static int __init xhci_hcd_init(void) int retval; retval = xhci_register_pci(); // Регистрация на шине PCI if (retval 0) pr_debug("Problem registering PCI driver.\n"); return retval; > retval = xhci_register_plat(); // драйвер платформы if (retval 0) pr_debug("Problem registering platform driver.\n"); goto unreg_pci; > /* * Check the compiler generated sizes of structures that must be laid * out in specific ways for hardware access. */ BUILD_BUG_ON(sizeof(struct xhci_doorbell_array) != 256*32/8); BUILD_BUG_ON(sizeof(struct xhci_slot_ctx) != 8*32/8); BUILD_BUG_ON(sizeof(struct xhci_ep_ctx) != 8*32/8); /* xhci_device_control has eight fields, and also * embeds one xhci_slot_ctx and 31 xhci_ep_ctx */ BUILD_BUG_ON(sizeof(struct xhci_stream_ctx) != 4*32/8); BUILD_BUG_ON(sizeof(union xhci_trb) != 4*32/8); BUILD_BUG_ON(sizeof(struct xhci_erst_entry) != 4*32/8); BUILD_BUG_ON(sizeof(struct xhci_cap_regs) != 7*32/8); BUILD_BUG_ON(sizeof(struct xhci_intr_reg) != 8*32/8); /* xhci_run_regs has eight fields and embeds 128 xhci_intr_regs */ BUILD_BUG_ON(sizeof(struct xhci_run_regs) != (8+8*128)*32/8); return 0; unreg_pci: xhci_unregister_pci(); return retval; > module_init(xhci_hcd_init);
Давайте посмотрим на функцию xhci_register_plat
static struct platform_driver usb_xhci_driver = .probe = xhci_plat_probe, .remove = xhci_plat_remove, .driver = .name = "xhci-hcd", .pm = DEV_PM_OPS, .of_match_table = of_match_ptr(usb_xhci_of_match), >, >; MODULE_ALIAS("platform:xhci-hcd"); int xhci_register_plat(void) return platform_driver_register(&usb_xhci_driver); >