что такое usb хост контроллер

USB-контроллер: установка драйверов и устранение неполадок с портами

Задача USB-контроллера – управлять USB-портами вашего компьютера. Чтобы он мог правильно взаимодействовать с другими компонентами системы, необходимо установить правильные драйверы – это поможет избежать большинство проблем, которые могут возникнуть при подключении периферии.

Как найти и установить драйверы для USB-контроллера

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

Сначала попробуйте обновить драйверы для USB-контроллера через Windows.

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

Как устранить проблемы с USB-контроллером

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

Источник

Что такое Хост контроллер?

Передачи больших объемов данных между устройством на шине USB и драйвером устройства делятся на множество пакетов хост-контроллером или драйвером HC.

Запросы устройства (управляющие передачи) к конечных точкам, используемым по умолчанию, являются специальными. Они состоят из двух или трех фаз: SETUP, DATA (oпциональная) и STATUS. Начтроечный пакет посылается устройству. Если есть фаза данных, то направление пакетов (или пакета) данных дается в настроечном пакете. Направление в фазе статуса противоположно направлению во время фазы данных. или IN если не было фазы данных. Оборудование хост-контроллера также дает регистры с текущим статусом корневых портов и изменений, которые случились с момента последнего сброса регистра изменения статуса. Доступ к этим регистрам дается через виртуализированных разветвитель, как и предполагается по спецификации USB [ 2]. Виртуальный разветвитель должен работать вместе с классом устройств-разветвителей, который описывается в 11 главе той спецификации. Он должен давать канал, испольщуемый по умолчанию, через который запросы устройств могут ему посылаться. Он возвращает набор дескрипторов, стандартных и специфичных для класса разветвителя. Он должен также давать канал прерываний, который сообщает об изменениях, произошедших на его портах. На данный момент для хост-контроллеров существуют две спецификации: Universal Host Controller Interface (UHCI; Intel) и Open Host Controller Interface (OHCI; Compaq, Microsoft, National Semiconductor). Спецификация UHCI разработана для уменьшения аппаратной сложности, требуя от драйвера хост-контроллера поддержки полного распределения передач для каждого кадра. Контроллеры типа OHCI гораздо более независимы, и дают более абстрактный интерфейс, выполняя много работы самостоятельно.

Источник

Два в одном: USB хост и составное USB устройство

Не так давно, была опубликована статья «Пастильда — открытый аппаратный менеджер паролей». Так как данный проект является открытым, то мы решили, что будет интересно, если мы будем писать небольшие заметки о процессе проектирования, о задачах, которые перед нами стоят и о трудностях, с которыми мы сталкиваемся.

Реализация USB хоста

Итак, во-первых мне нужно было реализовать на устройстве USB хост, чтобы оно могло распознавать и общаться с подключенной к нему клавиатурой. Так как в работе я использую связку Eclipse + GNU ARM Eclipse + libopencm3, то очень хотелось найти уже что-то готовое и желательно написанное с использованием библиотеки libopencm3. Желание мое было очень жирным, до последнего момента не верила, что мои поиски увенчаются успехом. Однако под конец рабочего дня, проскролив интернет до самого дна, я вдруг наткнулась вот на это. libusbhost? Серьезно? И это был не просто написанный на основе libopencm3 usb хост, он еще и был написан под STM32F4, под тот самый, который мы решили использовать в проекте. В общем, звезды сошлись и радости моей не было предела. Кстати, оказалось, что этот проект создавался как часть libopencm3, однако его так и не добавили в библиотеку.

Как библиотеку, libusbhost я не собирала, просто взяла необходимые мне исходники, написала драйвер для клавиатуры и, в общем-то все, погнали! Но обо всем по-порядку.

По аналогии с usbh_driver_hid_mouse.[ch], я написала драйвер для клавиатуры (usbh_driver_hid_kbd.[ch]).

Далее был реализован простенький класс, для работы с хостом:

Реализация составного USB устройства

Далее мне нужно было сделать так, чтобы наше устройство отображалось в диспетчере устройств и как клавиатура, и как дисковый накопитель. Тут вся магия в дескрипторах=) В этом документе, в главе 9, подробно описан USB Device Framework. Эту главу нужно очень внимательно прочитать и в соответствии с ней описать дескрипторы устройства. В моем случае получилось следующее:

Для работы с составным устройством был написан класс USB_composite, представленный ниже.

Как правило, функции control_request и set_config должны быть явно описаны для каждого устройства. Однако из этого правила есть исключение: Mass Storage Device. Итак, разберемся с конструктором класса USB_Composite.

Во-первых, мы инициализируем ноги USB OTG FS:

Во-вторых, нам нужно проинициализировать наше составное устройство, зарегистрировать USB_set_config_callback, о котором шла речь выше, и разрешить прерывание:

Так вот. Теперь, когда конструктор класса USB_Composite дописан, можно собрать проект, прошить устройство и увидеть, что «Запоминающее устройство для USB» больше не помечено предупреждением, а во вкладке «Дисковые устройства» можно обнаружить «ThirdPin Pastilda USB Device». И, казалось бы, все хорошо. Но нет=) Проблем стало больше:

1. Зайти на диск невозможно. При попытке сделать это все виснет, умирает, компьютеру очень плохо.
2. Распознавание устройства как дискового занимает более 2-х минут.

Об этих проблемах и о том, как их решить без вреда для здоровья написано здесь: USB mass storage device и libopencm3.

И, о, чудо! Никаких пятен=) Теперь все работает. У нас есть USB хост и составное USB устройство. Осталось только объединить их работу.

Читайте также:  что такое true cost ресторан

Объединение хоста и составного устройства

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

Код, реализующий все это, простой как палка:

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

Буду рада любым комментариям и пожеланиям.

И, конечно же, ссылка на github.

Источник

USB Host контроллер VinculumII. Запись на Flash.

Что такое USB Host контроллер?

Связь по USB происходит по принципу Главный-Подчинённый. В качестве подчиненных (USB Slave) обычно выступают периферийные устройства такие ка флешки, принтеры, клавиатуры, разрабатываемые электронщиками устройства и прочее. В качестве Главного (USB Host) обычно выступают компьютеры.

Если нам нужно передать информацию от нашего устройства на компьютер, то для реализации USB протокола подойдут как внешние микросхемы преобразователей, так и собственные средства самого контроллера. Но вот если данные нужно передать на флешку, то тут уже необходимо воспользоваться USB-Host контроллером. Можно воспользоваться контроллерами с внутренним USB-Host (например PIC24), ну или воспользоваться специальной микросхемой. Одну такую микросхему и рассмотрим — FTDI VinculumII.

Здесь хотелось бы поподробнее остановиться на мультиплексоре выводов микросхемы. Он позволяет подключать интерфейсные линии от различных протоколов к различным ногам контроллера (например одну и туже линию можно подключить с разных сторон контроллера). Это очень упрощает разводку платы. Да и к тому же если каждую интерфейсную линию выводить на отдельную ногу, то понадобилось бы слишком много ног, учитывая обилие интерфейсов в данном контроллере. Второй особенностью мультиплексора является работа с портами ввода-вывода, которые можно настроить не только как вход/выход, но и установить рабочий ток вывода, Pull-up или Pull-down, и даже Триггер Шмидта.

Что же имеем в сухом остатке. Отличная микросхема имеющая большОе количество различных интерфейсов, позволяющая построить различные комбинации преобразователей (мостов) интерфейсов. Главная особенность микросхемы наличие USB-Host, позволяющей работать с флешками.

И вот теперь, когда мы такие радостные, думаем сколько удивительных девайсов можно на ней сделать, пора вкусить правду-матку.

Первый сюрприз который нас ожидает — микросхема поставляется БЕЗ ПРОШИВКИ (NOTE: VNC2 devices are supplied unprogrammed). Для того что прошить микросхему необходим специальный VNC2 Debug Module. Здесь есть выбор либо купить фирменный (около 1100 руб), или же изготовить самостоятельно, ибо схема есть в даташите. Я решил взять готовый модуль (хорошо что деньги не мои ;)))
Выглядит вот так.

Тут нужно упомянуть еще один момент — модуль имеет выходной разъем PBS-2.0, а на своей плате я использовал более родной PLS-2.54. Поэтому пришлось изготовить небольшой переходник.

Изолентой заклеен один маленький, но ОЧЕНЬ мерзкий светодиодик.

Сюрприз номер два — микруха работает на собственной операционной системе реального времени (RTOS VOS), соответственно и все прошивки для нее необходимо писать с использованием этой RTOS.

Сюрпризик номер три — напрямую работать с ресурсам и контроллера не возможно. Чтобы обратиться к чему либо необходимо использовать API-функции и драйверы, поставляемые производителем в закрытом виде. Все что нам доступно — это файлы инклудов, в которых можно посмотреть какие есть функции и как к ним обратиться.

Ну и самый большой сюрприз (и самый большой минус) это среда разработки (IDE). Более убогой, тупой, и неудобной среды я не видел уже давно. Если бы компания FTDI располагалась в России, то «программистами» там бы работали внучатые племянники главного бухгалтера и начальника отдела кадров, этакие «супер-пупер-школоло-программеры». Это отличный пример того как хорошую аппаратную часть наглухо губит программное обеспечение. Сам от себя не ожидал сколько новых матерных оборотов могу я придумать пока не увидел ЭТО IDE.

Плюсуем сюда еще кучу мелких и тупых недочетов на которые уже тупо забиваеш со временем.

Вот такая вот «среда разработки».

Просто эксперимент.

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

Для примера возьмём контроллер PIC16F876A, с внешним кварцем на 16 МГц. Как известно PIC16 делит внешнюю частоту на 4. Получаем частоту работы ядра — 4 МГц.

Закинем в контроллер программу-мигалку:

Подключив осциллограф к RB2 получим вот такую картинку.

Частота переключений светика — 666653 Гц. Получается что на переключение требуется 6 тактов, Ну или 24 относительно кварца на 16 МГц.

Тот же самый опыт проведем с VinculumII.
Внешний кварц 12 МГц. Внутренняя частота 48 МГц.
Программка-мигалка:

Получаем частоту переключений светика — 126142 Гц. Уж не знаю делит ли VinculumII частоту или нет, но получается что относительно внутренней частоты в 48 МГц на мигалку требуется 380 тактов О_о. Даже если рассчитывать относительно внешнего кварца в 12 МГц то потребуется 95 тактов. Это просто «ППЦ» какой-то.

После данного опыта отпал вопрос «Почему на такой большой скорости работы минимальная функция временной задержки 1 мС?».

Так что не только «средство разработки» тормозное, но и сам контроллер, по крайней мере в вопросе выполнения программы. Возможно аппаратные средства интерфейсов не такие тормознутые.

Пишем Firmware.

Первоначально я бы посоветовал пройти на сайт http://www.ftdichip.com/ и накачать оттуда даташитов, апнотов, примеров и прочего. Оттуда же тянем Vinculum II Toolchain 2.0 (SP1).

Для первоначального вкатывания в тему разберем процесс создания нового проекта и опробуем процесс записи на флешку на примере HelloWorld.

Для начала рассмотрим процесс создания нового проекта.

Во вкладке New Project указываем Название проекта, Папку для сохранения, И название прибора (допустим).

На вкладке Driver подключаем необходимые драйвера — USBHost2, GPIO Port A, FAT File System, BOMS (USBHost 2), stdio, string.

А вот и самая интересная вкладка IOMUX — управление мультиплексором портов. Выводы USB портов и питания помечены серым и не могут быть изменены. А вот линии портов или же каких-нибудь интерфейсов могут быть распределены по соответствующим ногам микросхемы.

Читайте также:  что значит код в роблоксе 524

Для примера закинем PORT_A.0 на 23 ногу, а PORT_A.2 на 31. Обе ноги настроим на выход (к ним подключены светодиоды) и подключим Pull-Up. Кроме направления здесь также можно задать его рабочий ток, скорость переключения, триггер Шмидта, подтяжки к питанию.

ВАЖНО. Лучше всего сразу все настроить правильно и не открывать больше данного Wizard’а. Так как если переоткрыть программу и зайти сюда опять, то все настройки портов сбрасываются и придется все настраивать заново. ХОТЯ ВСЕ ЭТИ НАСТРОЙКИ СОХРАНЯЮТСЯ В ОТДЕЛЬНЫЙ ФАЙЛ.

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

Один момент — параметр CPU Speed устанавливает внутреннюю частоту микрухи. Основное назначение снижения внутренней частоты — это снижение тока потребления.

На вкладке Threads опять же ничего не трогаем.

Так как внутренняя RTOS многозадачная, то тут можно создать потоки и настроить из приоритет.

На вкладке Summary отображается результат всех наших действий.

Нажимаем кнопку Finish.

Если по какой то причине вы решите все же еще раз попасть в Wizard, то это можно сделать нажав кнопку Modify на панели File.

После того как отработает Wizard в окне Project Manager (слева) отобразиться куча файлов драйверов, автоматически подключенных к проекту. Здесь нас интересуют 3 последних файла.
В файле Project_2_iomux.c хранятся настройки портов.
В файлах Project_2.h и Project_2.c и будет содержаться наша программа.

Открыв файл Project_2.c мы увидим ОЧЕНЬ много автоматически сгенерированного кода, созданного на основе настроек Wizard’a. Если вкратце то автоматом создаются функции настройки RTOS, создания потоков, настройка периферии, работы с драйверами. Некоторое объяснение можно найти в упомянутых статьях.

ВАЖНО: Important: Sections between markers «FTDI:S*» and «FTDI:E*» will be overwritten by the Application Wizard.
Это означает, что нельзя ничего писать между тегами «/* FTDI:S* */» и «/* FTDI:E* */» ибо все что находится между ними может в любой момент переписано Wizard’ом. По личному опыту скажу что не только им — я так однажды большого куска кода недосчитался, хотя wizard я не запускал и код был расположен за пределами данных тегов.

Сейчас нас интересует место в конце файла.

Именно в этой функции будет располагаться наш код. Название функции firmware() может быть и другим, оно указывается в wizard’е на вкладке Threads в столбце function.

Для начала переопределим переменную tx_buf, заменив на:

Ну вот потому что надо мне записывать по 65 байт )))). Вы можете это и не делать.

На основе примера HelloWorld запишем следующее содержание функции. От оригинала она будет отличаться только работой со светодиодами и дополнительными комментариями.

Ах да! Тут нас ожидает первый прикол – хотя мы и настроили направление выводов без команды:
они останутся работать на вход. И ДА это не опечатка 0-вход, 1-выход.

Компилируем, запускаем, проверяем, радуемся процессу, проверяем более углубленно, недоумеваем, тупим, разбираемся.

А разбираться приходится вот в чем — если подключить флешку и дождаться прохождения 1 цикла записи, и сразу отключить, то выясняется что файл создался только вот записей в нем нет. После десяти таких проверок файл был по-прежнему пуст.

Пробуем держать флешку дольше, процесс контролируем по светику или по осциллографу.
Как видно из рисунка — после компиляции (первый широкий импульс), было проделано ПЯТЬ записей в файл. НО открыв файл в нем обнаружилось только ЧЕТЫРЕ записи.

Можно конечно долго рассказывать как именно я извращался над программой, но не буду. Важно то, что удалось выяснить. А именно то не записывается именно первая строчка, а точнее она записывается только при следующем проходе цикла (это удалось выяснить только запись номера строки в файл). Опять же путем долгих и неистовых пыток программно-аппаратных средство получилось что хоть как то гарантировать только путем ПОВТОРНОГО ПЕРЕМОНТИРОВАНИЯ BOMS. Однако хоть это и редкостная тупость, но пришлось добавить в код вот такие вот две строки:

Ок! С тупостью разобрались, переходим к маразму.

Для записи информации в файл существует несколько функций. Одна из них — fwrite() — была рассмотрена в примере. Но дабы познать все прелести форматированного вывода строк в библиотеке имеется такая замечательная функция как fprintf(), кстати именно с ее помощью удалось вывести нумерованные строки и определить «тупость». Эта функция так же была подвержена «тупости», но сейчас не об этом.

Индикация процесса записи была сделана тоже не просто так! Чисто эксперимента ради, было записано время записи функцией fwrite() и fprintf(), дабы определить самую быструю (потому что так надо)))).

Первый график показывает процесс записи с помощью функции fwrite().

Как видно все пики одинаковые и длительность записи (65 байт) составляет 4-6 мС. Для сравнения широкий импульс слева это тот самый импульс в 100 мС в конце цикла.

Вторая группа графиков показывает процесс записи с помощью функции fprintf() (те же 65 байт).

Вот тут то маразм крепчает. Из графиков видно, что импульсы записи не равномерны, каждый пятый импульс в 8.5 раз шире других. А именно обычный процесс записи длится 300 мС. А каждый пятый цикл записи длится

2.5 СЕКУНДЫ. Повторюсь за один цикл записывается строка длинной 65 байт. Для сравнения импульс слева это тот самый импульс в 100 мС в конце цикла.

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

Читайте также:  что делать когда переел и тяжело дышать

Вот так вот весело и неоднозначно происходит запись информации на флешку с помощью микросхемы VinculumII.

Еще небольшая ложка дегтя в бочку дегтя!

В другом примере обработка подключения флешки производилась только в начале программы и больше туда не возвращалась — в итоге повторно вставив флешку ничего не происходило. Чтобы добиться от этого примера хоть какой то внятной работы пришлось в конец программы добавить варварский сброс программы при извлечении флешки (vos_reset_vnc2();).

Так же чего мне никак до сих пор не удалось добиться — так это передачи от SPI_Slave, хотя прием вроде работает. Опять же в примерах SPI_Slave описан только для приема, а для передачи по SPI есть пример только для SPI_Master. От Slave не удалось добиться хоть какого нибудь дерганья ножками. Пока буду обходиться без него, ибо задачи позволяют.

Так что приводимые производителем примеры можно рассматривать ТОЛЬКО КАК ОЗНАКОМИТЕЛЬНЫЕ.

Вот такой вот обзор!
Казалось по описанию — мощная микросхема с кучей всяких крутых фишек, а на деле оказывается не все так просто.

Источник

Добавь себе скорости! Обзор и установка USB 3.0 контроллера

Здравствуйте уважаемые читатели, в последнее время все популярнее становится скоростной разъем USB 3.0 постепенно вытесняя его предшествующую версию, однако не все материнские платы им оснащены. Многим пользователям уже не хватает стандартной скорости USB 2.0 и хочется чего-то более быстрого. Покупать новую материнскую плату зачастую слишком затратно, поэтому выход один, это установка платы расширения, которую мы произведем в этом обзоре.

Внешне, отличие USB 3.0 от 2.0 состоит в том, что разъем USB 3.0 синего цвета, а также имеет большее количество контактов. USB 3.0 также имеет обратную совместимость устройствами, расчитанными на его предыдущую версию.

Преимущества USB 3.0

1) Разъем USB 3.0 имеет 8 контактов, а USB 2.0 всего 4, это повышает пропускную способность до 5 Гбит/с.

2) Также, контроллер может одновременно принимать и отправлять данные, что увеличивает скорость работы.

3) USB 3.0 имеет более высокий показатель силы тока. Жесткий диск, который на USB 2.0 не запускался, будет работать вполне стабильно. Также, те устройства, которым стандартно не хватало силы тока USB 2.0, будут заряжаться быстрее.

4) USB 3.0 совместим со своими предыдущими версиями. Если вы подключите старое USB 2.0 устройство, то оно будет работать на максимально возможной для него скорости.

Упаковка и комплектация

Контроллер поставляется в картонной коробке красного и белого оттенков. Вся информация на коробке на английском языке. Производитель заверяет нас в отменном качестве своего продукта, что написано на коробке аж 4 раза. На коробке ошибочно изображен контроллер, отличающийся от того, что идет в комплектации.

Контроллер предназначен для установки в слот PCI Express x1

Сама комплектация состоит из:

1) Контроллер USB 3.0

2) mini-CD диск с драйверами

3) Руководство пользователя

Установка контроллера в ПК

Для начала снимем крышку с корпуса

Теперь необходимо снять заглушку с того разъема, в который вы собираетесь ставить контроллер

«Расчищаем» место под контроллер, (к примеру, у меня нужно сдвинуть провода) и вставляем карту. Карта вставилась легко и ровно

Вид контроллера с задней части корпуса

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

Все, шуруп на месте, установка контроллера в ПК завершена.

Установка драйверов

После установки контроллера и включения компьютера, операционной системе не удалось самостоятельно установить драйвера…

…поэтому мы воспользуемся CD диском, который был в комплекте.

На диске находится 6 папок, среди которых нам нужна VL800

Заходим в эту папку, запускаем установку (setup.exe), затем последовательно нажимаем кнопку далее.

Примечание: если у вас отсутствует Локальный диск C, то установка будет выдавать ошибку до тех пор, пока вы не вставите любой USB накопитель. Однако драйвера все равно установятся на системный диск.

Проверяем все ли в порядке. Для этого заходим в диспетчер устройств.

Теперь видно, что драйвера установились правильно и устройство определилось.

В руководстве пользователя содержался отдельный лист посвященный установке драйверов на Windows 7 x64, содержащий множество сложных, для рядового пользователя, действий. В нем предлагалось открыть специальный файл, предназначенный для редактирования драйверов вручную, однако на всем диске с драйверами такого файла не обнаружилось. Пришлось специально для теста установить Windows 7 x64 и проверить на ней. Были проведены аналогичные действия, написанные выше, и драйвера установились без проблем. Соответственно, инструкцию в руководстве пользователя можно просто игнорировать.

Также проверим новую версию драйвера, скачанную с сайта via-labs.com

Установщик успешно обнаружил устройство и установил драйвера. Однако после перезагрузки компютера по его требованию, мы видим это:

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

Сравнение скорости

Произведем тест скорости. Для примера был взят внешний жесткий диск Alu-mini T223 от компании 3Q.

На USB 2.0 результат вышел таким:

Теперь же проверим на свежеустановленном USB 3.0

Видно, что максимальная скорость увеличилась в 3 раза по сравнению с USB 2.0

Были проведены тесты на других системах, но смена операционной системы и её разрядности на быстродействие не повлияли.

Выводы

Как видно из тестов, эта покупка реально стоит вложенных в неё средств. Мы получаем трехкратный прирост в скорости чтения и записи, а также дополнительные USB порты для своего ПК.

+ Ощутимый прирост скорости

+ Совместимость как с 32 разрядной, так и с 64 разрядной системами.

+ Компактность, влезет куда угодно

+ Целых 4 USB 3.0 порта

Спасибо всем, кто уделил время на прочтение этого обзора. Удачных вам покупок!

Источник

Строительный портал