Via usb что это

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

Via usb что это. q93 565de3a8b4426f3f24661e68f9efd8e3c21bfc541282f896c0fa54cfaf6c3de8. Via usb что это фото. Via usb что это-q93 565de3a8b4426f3f24661e68f9efd8e3c21bfc541282f896c0fa54cfaf6c3de8. картинка Via usb что это. картинка q93 565de3a8b4426f3f24661e68f9efd8e3c21bfc541282f896c0fa54cfaf6c3de8

Здравствуйте уважаемые читатели, в последнее время все популярнее становится скоростной разъем 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

Via usb что это. q93 704aae13c1958d93d90ac61990f104542ca7d831dd400f9c14e2415346776c44. Via usb что это фото. Via usb что это-q93 704aae13c1958d93d90ac61990f104542ca7d831dd400f9c14e2415346776c44. картинка Via usb что это. картинка q93 704aae13c1958d93d90ac61990f104542ca7d831dd400f9c14e2415346776c44

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

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

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

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

Via usb что это. q93 d2f003c4ac30b983bac1e11aebeb0dd6d8775aab291640644f10691c579a5c54. Via usb что это фото. Via usb что это-q93 d2f003c4ac30b983bac1e11aebeb0dd6d8775aab291640644f10691c579a5c54. картинка Via usb что это. картинка q93 d2f003c4ac30b983bac1e11aebeb0dd6d8775aab291640644f10691c579a5c54

Via usb что это. q93 d8f629a2b5ed4f458cc4beef712536f1dcf91edc9abbc5665ba9b14492e93f0d. Via usb что это фото. Via usb что это-q93 d8f629a2b5ed4f458cc4beef712536f1dcf91edc9abbc5665ba9b14492e93f0d. картинка Via usb что это. картинка q93 d8f629a2b5ed4f458cc4beef712536f1dcf91edc9abbc5665ba9b14492e93f0d

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

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

Via usb что это. q93 bc9941226cff2755f4f3671590578c6d2e5888ac1a87bdb7879ba396f9defccd. Via usb что это фото. Via usb что это-q93 bc9941226cff2755f4f3671590578c6d2e5888ac1a87bdb7879ba396f9defccd. картинка Via usb что это. картинка q93 bc9941226cff2755f4f3671590578c6d2e5888ac1a87bdb7879ba396f9defccd

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

Via usb что это. q93 dd3990255a15ea60b212eef139e364a52c55b50922c8010ced467b5141bbc147. Via usb что это фото. Via usb что это-q93 dd3990255a15ea60b212eef139e364a52c55b50922c8010ced467b5141bbc147. картинка Via usb что это. картинка q93 dd3990255a15ea60b212eef139e364a52c55b50922c8010ced467b5141bbc147

Via usb что это. q93 42927059fc82dd171994679a4748ebfb79cf6fcf242f0998172be0e431d0c845. Via usb что это фото. Via usb что это-q93 42927059fc82dd171994679a4748ebfb79cf6fcf242f0998172be0e431d0c845. картинка Via usb что это. картинка q93 42927059fc82dd171994679a4748ebfb79cf6fcf242f0998172be0e431d0c845

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

Via usb что это. q93 ca0c8763449c89bee86ca2d1f14d3b39cf275479b8bf39f883e9e14b92b1d26f. Via usb что это фото. Via usb что это-q93 ca0c8763449c89bee86ca2d1f14d3b39cf275479b8bf39f883e9e14b92b1d26f. картинка Via usb что это. картинка q93 ca0c8763449c89bee86ca2d1f14d3b39cf275479b8bf39f883e9e14b92b1d26f

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

Via usb что это. q93 c545fd0e79ab1108165c5ef35ac0a1ee8ec690332a4ccf711cc41d07811177e4. Via usb что это фото. Via usb что это-q93 c545fd0e79ab1108165c5ef35ac0a1ee8ec690332a4ccf711cc41d07811177e4. картинка Via usb что это. картинка q93 c545fd0e79ab1108165c5ef35ac0a1ee8ec690332a4ccf711cc41d07811177e4

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

Via usb что это. q93 4ebcc4158d2f5c195cf88fedb4ef53185c17b843c4d1fa10f536d4d6e1f161cb. Via usb что это фото. Via usb что это-q93 4ebcc4158d2f5c195cf88fedb4ef53185c17b843c4d1fa10f536d4d6e1f161cb. картинка Via usb что это. картинка q93 4ebcc4158d2f5c195cf88fedb4ef53185c17b843c4d1fa10f536d4d6e1f161cb

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

Via usb что это. q93 70b8bbe303959effd12eff16f6dfb5a200ac7f12033dd47382d554392064e8e7. Via usb что это фото. Via usb что это-q93 70b8bbe303959effd12eff16f6dfb5a200ac7f12033dd47382d554392064e8e7. картинка Via usb что это. картинка q93 70b8bbe303959effd12eff16f6dfb5a200ac7f12033dd47382d554392064e8e7

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

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

Via usb что это. q93 1ecd75b5fb9d345d8f56dd4adce317577d95d9eb1947679136bf5a5c6e89bfc1. Via usb что это фото. Via usb что это-q93 1ecd75b5fb9d345d8f56dd4adce317577d95d9eb1947679136bf5a5c6e89bfc1. картинка Via usb что это. картинка q93 1ecd75b5fb9d345d8f56dd4adce317577d95d9eb1947679136bf5a5c6e89bfc1

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

Via usb что это. q93 829fc52332cb6144280739b4927f4da3d25d1a0bb1d23b48725bdff59e6a43c3. Via usb что это фото. Via usb что это-q93 829fc52332cb6144280739b4927f4da3d25d1a0bb1d23b48725bdff59e6a43c3. картинка Via usb что это. картинка q93 829fc52332cb6144280739b4927f4da3d25d1a0bb1d23b48725bdff59e6a43c3

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

Via usb что это. q93 188ddaf0d21a46a5af829d29484b2591d04936a697a6db40d33cfbdd4dd59e86. Via usb что это фото. Via usb что это-q93 188ddaf0d21a46a5af829d29484b2591d04936a697a6db40d33cfbdd4dd59e86. картинка Via usb что это. картинка q93 188ddaf0d21a46a5af829d29484b2591d04936a697a6db40d33cfbdd4dd59e86

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

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

Via usb что это. q93 4b91fda2fede35618082368d449b524cbadf71c17ef61652464ac5eed30590bc. Via usb что это фото. Via usb что это-q93 4b91fda2fede35618082368d449b524cbadf71c17ef61652464ac5eed30590bc. картинка Via usb что это. картинка q93 4b91fda2fede35618082368d449b524cbadf71c17ef61652464ac5eed30590bc

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

Via usb что это. q93 01d46e2e59f5a8932f12b753d33118f0f0797b35bfe4f00e8189ad08e5daa842. Via usb что это фото. Via usb что это-q93 01d46e2e59f5a8932f12b753d33118f0f0797b35bfe4f00e8189ad08e5daa842. картинка Via usb что это. картинка q93 01d46e2e59f5a8932f12b753d33118f0f0797b35bfe4f00e8189ad08e5daa842

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

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

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

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

Via usb что это. q93 9d61ae8b1a330aa0e23656462075590d3d7a2cc4fa984a2bf96c3dc4dd23fcac. Via usb что это фото. Via usb что это-q93 9d61ae8b1a330aa0e23656462075590d3d7a2cc4fa984a2bf96c3dc4dd23fcac. картинка Via usb что это. картинка q93 9d61ae8b1a330aa0e23656462075590d3d7a2cc4fa984a2bf96c3dc4dd23fcac

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

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

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

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

Via usb что это. q93 55e25246779a3a6bc4576a78bf1dc4f4864b424035055ef008f7f5e961221913. Via usb что это фото. Via usb что это-q93 55e25246779a3a6bc4576a78bf1dc4f4864b424035055ef008f7f5e961221913. картинка Via usb что это. картинка q93 55e25246779a3a6bc4576a78bf1dc4f4864b424035055ef008f7f5e961221913

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

Via usb что это. q93 d69f74dcf8736693df4aa19902cd4b2a6157325ccadc80901c5cf10e3e95c39a. Via usb что это фото. Via usb что это-q93 d69f74dcf8736693df4aa19902cd4b2a6157325ccadc80901c5cf10e3e95c39a. картинка Via usb что это. картинка q93 d69f74dcf8736693df4aa19902cd4b2a6157325ccadc80901c5cf10e3e95c39a

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

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

Выводы

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

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

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

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

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

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

Источник

Обзор контроллера USB 3.0 VIA VL800 (VL805)

Здравствуйте. У меня на тестовом компьютере недавно выгорели USB порты. Комп довольно старый, покупать новую материнку на Avito желания нет, так как в такой технике непонятно на что можно нарваться. Обновлять тестовый комп, и покупать новую материнку и т.п. смысла то же нету. В итоге было решено купить USB контроллер. Что бы в случае чего его можно было использовать на основном компьютере, выбор пал на контроллер USB 3.0. А конкретно на VIA VL800. О нем и пойдет речь ниже.

Via usb что это. 1. Via usb что это фото. Via usb что это-1. картинка Via usb что это. картинка 1

Комплектакция и первый взгляд:

Via usb что это. 2. Via usb что это фото. Via usb что это-2. картинка Via usb что это. картинка 2

Via usb что это. 3. Via usb что это фото. Via usb что это-3. картинка Via usb что это. картинка 3

Via usb что это. 10. Via usb что это фото. Via usb что это-10. картинка Via usb что это. картинка 10

Via usb что это. 6. Via usb что это фото. Via usb что это-6. картинка Via usb что это. картинка 6

Via usb что это. 7. Via usb что это фото. Via usb что это-7. картинка Via usb что это. картинка 7

Via usb что это. 9. Via usb что это фото. Via usb что это-9. картинка Via usb что это. картинка 9

Via usb что это. 8. Via usb что это фото. Via usb что это-8. картинка Via usb что это. картинка 8

Сзади на плате есть наклейка с еще одной маркировкой.

Via usb что это. 5. Via usb что это фото. Via usb что это-5. картинка Via usb что это. картинка 5

Via usb что это. 11. Via usb что это фото. Via usb что это-11. картинка Via usb что это. картинка 11

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

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

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

Via usb что это. 12. Via usb что это фото. Via usb что это-12. картинка Via usb что это. картинка 12

Via usb что это. 13. Via usb что это фото. Via usb что это-13. картинка Via usb что это. картинка 13

Via usb что это. 14. Via usb что это фото. Via usb что это-14. картинка Via usb что это. картинка 14

Via usb что это. 16. Via usb что это фото. Via usb что это-16. картинка Via usb что это. картинка 16

К плюсам можно отнести:

+ Простота установки, не нужно совсем возиться с драйверами

+ нормальная скорость записи и чтения

К минусам можно отнести:

— Не обнаруживается до загрузки ОС

— Хлипкий крепеж заглушки

И не понятно куда отнести то что сильно греется, пожалуй, никуда не буду отность, просто для информации.

Так же можно посмотреть видеобзор данной платы:

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.

Источник

Учимся работать с USB-устройством и испытываем систему, сделанную на базе контроллера FX3

В двух предыдущих статьях мы сделали USB 3.0 систему на базе контроллера FX3. Пришла пора научиться работать с нею из своих программ для PC. Ну, и попутно понять, насколько получившаяся система пригодна для практического применения. Действительно ли ширины канала хватает на весь поток? И не теряются ли единичные байты из потока? Кто хоть немного поработал тестировщиком, не поверит в то, что если система в принципе работает, значит, работает и в деталях. А я на этой должности проработал лет пять, не меньше, поэтому привык проверять всё на практике. В общем, приступаем.

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

1 Теория о методах доступа к USB

1.1 Windows

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

1.1.1 Драйверы, работающие на функциональном уровне

Что такое USB-устройство? Это набор конечных точек. Но прикладному программисту, если честно, эти точки не интересны. Давным-давно, ещё в прошлом тысячелетии, когда последовательные порты делались на микросхеме UART16550, под неё был сделан функциональный драйвер для Windows, и все прикладные программисты привыкли работать с абстракциями именно этого драйвера. И с этой привычкой трудно спорить. Представим на минутку, что с переходником USB-COM придётся работать в USB-шном стиле, на уровне конечных точек. Есть идеология CDC: две конечных точки туда-обратно, одна точка статуса в режиме прерываний и определённый набор команд, подаваемых через конечную точку EP0. Это всё описано в стандартах, относящихся к USB.

Всё? Нет, некоторым этого мало! Prolific сделала свой набор команд для точки EP0, не совместимый с CDC. А FTDI – свой. Он не совместим ни с CDC, ни с Prolific. Так что, если бы прикладной программист работал бы с переходниками USB-COM на уровне конечных точек, ему пришлось бы нелегко. К счастью, Prolific и FTDI предоставляют функциональные драйверы для своих чипов, а для CDC функциональный драйвер разработала сама Microsoft и прилагает его в составе Windows. Поэтому прикладной программист понятия не имеет, как работать с конкретным переходником (помню, мы целый NDA лет 15 назад с FTDI подписывали, чтобы получить от них руководство по их командам, причём я сразу же им послал информацию об ошибке в документе, так как пока работали бюрократы, я через дизассемблер всё сам уже успел изучить, так что сразу нашёл несовпадение их описания с моим). На прикладном уровне драйверы всех упомянутых производителей дают интерфейс такой же, как и при работе со старым добрым UART16550.

То же касается и USB-накопителей. Мало кто знает, что физически там две конечных точки. Почти никому не интересно, как там надо гонять пакеты, чтобы посылать команды и данные. Как разруливать ошибки, знает ещё меньше людей. Все работают через драйвер usbstor.sys, предоставляемый Microsoft, который обеспечивает работу точно так же, как и с дисками, подключёнными через локальную шину материнской платы.
Удобно? Однозначно! Но вот мы сделали своё устройство, не совместимое по логике работы ни с каким из стандартных. И что нам теперь, всенепременно писать для него персональный драйвер?

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

1.1.2 CyUSB

С этим драйвером я познакомился раньше других. Было это 12 лет назад. Вот с него и начну рассказ. Правда, скажу лишь вскользь. Фирма Cypress, выпуская замечательные контроллеры FX2LP, просто обязана была сделать драйвер, работающий на уровне конечных точек, чтобы облегчить жизнь своим клиентам. И она его сделала. Кому интересно – ищите по слову CyAPI. Это DLL-ка, предоставляющая ряд функций для прикладного программиста. Я как системщик старался обойтись без DLL, поэтому сделал себе библиотеку, работающую с драйвером на уровне IOCTL запросов.

Главный недостаток данной библиотеки заключается в её лицензионном соглашении. Её можно использовать только с контроллерами Cypress. А чтобы всё было убедительнее, начиная с некоторых версий, драйвер стал просто зависать, если он работает с контроллерами других производителей. По крайней мере, старые версии с AT90USB работали, а более свежие – нет. Поэтому я решил, что не буду пользоваться данным драйвером. Даже написал свой… Но вскоре обнаружился замечательный готовый вариант от Microsoft, и я перешёл на него.

1.1.3 WinUSB

Этот драйвер уходит своими корнями в инфраструктуру UMDF. Когда фирма Microsoft работала над возможностью запускать драйверы на пользовательском уровне защиты, они сделали специальный драйвер-прослойку WinUSB. Но через этот же драйвер можно работать и из обычных прикладных программ, а не только из UMDF-драйверов. Кому интересно – вбейте в поиск WinUSB API. Через эту функциональность можно делать то же самое, что и через CyUSB, но с контроллерами любых производителей.

Сам драйвер входит в состав Windows, поэтому в Win7 его можно было вообще ставить без каких-либо проблем с подписыванием. Можно было создать по инструкции от Microsoft или найти и скачать готовый inf файл, поменять в нём VID/PID на свои и установить. К сожалению, начиная с WIN8, обязательно надо подписывать не только сам драйвер, но и INF файл. Однако никто не мешает поправить VID/PID у устройства на тот, который будет найден. Вот у меня есть вот такой подписанный inf файл.

Раньше таких inf файлов на просторах сети было много. Андроид-телефоны через них подключались. Сейчас надо искать по слову WinUSB.sys внутри. Ну, или «ServiceBinary = %12%\WinUSB.sys».

Я поправил «Прошивку» для FX3 вот так:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

И теперь могу собирать варианты хоть под CyUSB, хоть под WinUSB с привязкой к имеющемуся у меня inf файлу. А так — можно перевести ОС в режим, не требующий подписывания драйверов, хоть это и не очень удобно.

1.1.4 Библиотека libusb

Вариант с WinUSB отличный, но не кроссплатформенный. Насколько мне известно, под Linux нет точно такого же API, который предоставляет Microsoft для Windows. Кроссплатформенный вариант – это использование библиотеки libusb. Причём под Windows эта библиотека по умолчанию опирается на всё тот же драйвер WinUSB. Нашли драйвер, накатили его на устройство. Скачали библиотеку, начали через неё работать с этим драйвером. Надо будет – через неё же можно будет работать и под Linux. Замечательно? Да. Особенно если мы разработали полностью своё устройство. Но, увы, я просто обязан указать недостаток данного метода для общего случая.

Когда мы устанавливаем на устройство драйвер WinUSB, мы убираем оригинальный драйвер. В рамках данного блока статей мы теряем возможность общаться с нашим устройством при помощи утилиты ControlCenter. Ну, и я не упоминал в статьях про утилиту Streamer, позволяющую измерять скорость устройства… В общем, ею мы тоже не сможем пользоваться, если заменим штатный драйвер на WinUSB.

В рамках другой задачи мне надо было экспериментировать с аудиоустройствами из своего приложения. При этом я не хотел постигать все тонкости работы с ними. Я хотел только некоторые команды подавать, а чтобы всё остальное за меня делала сама операционка. Но если бы я посадил устройства на WinUSB, ОС бы потеряла контроль над ними и не могла бы оказывать мне всемерное содействие.

Можно ли работать из прикладной программы с устройствами, не пересаживая их на специальный драйвер? В принципе, да (правда, это очень аккуратное утверждение). Давайте я покажу этот метод… Правда, в конце — сильно раскритикую его.

1.1.5 Драйвер UsbDk

Библиотека libusb существует в двух версиях. Версия 0.1 и версия 1.0. Обе версии в настоящее время развиваются, создавая некоторую путаницу. И вот версия 1.0 может работать не только через драйвер WinUSB, но и через драйвер UsbDk. Последний является фильтр-драйвером. Что такое фильтр-драйверы? Вспоминаем детство, сказку о царе Салтане:

Via usb что это. ngz2sqwi fh9rwmfietr35fqrak. Via usb что это фото. Via usb что это-ngz2sqwi fh9rwmfietr35fqrak. картинка Via usb что это. картинка ngz2sqwi fh9rwmfietr35fqrak

Собственно, фильтр-драйвер встаёт на пути IRP-пакетов от прикладной программы к основному драйверу и обратно. IRP — это гонцы, которые бегают туда-сюда. А фильтр-драйвер может их пропустить, не изменяя, а может подменить их содержимое. Он придуман для исправления ошибок, чтобы не менять основной драйвер, а просто немножко подправить пакеты, дабы те не вызывали проблем. Их можно править на прямом и на обратном пути. Но в целом, никто не мешает через этот фильтр-драйвер запустить в основной драйвер запросы от приложения, которое общается именно с фильтром. И UsbDk этим и занимается.

Очень схематично, опустив ряд неважных подробностей, это можно показать так:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Вот тут мы видим, что фильтр-драйвер UsbDK подсел на пути пакетов к нашему устройству (на самом деле, он подсел на пути ко всем USB-устройствам, так как прицепился к драйверу класса USB):

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Если при открытии библиотеки libusb 1.0 сказать:

то она будет использовать в качестве основы не WinUSB, а UsbDk. Ура? Не совсем. Приведу минимум две проблемы, создаваемые при использовании данного пути.

Первая проблема организационная. Если мы запустили программу, поработали, вышли, то всё будет хорошо. Но вот мы запустили программу, начали работать, а потом почему-то прервались. Да хоть у меня стояла точка останова, исполнение прервалось, я осмотрел переменные, увидел, что программа работает неверно, и завершил её. Могу я так сделать? Дело-то житейское при разработке программы. Или просто зациклилась она. В общем, мы её прервали. Снова запускаем – устройство уже не открывается. Смотрим код ошибки – он очень интересный.

И всё. Выдёргивать-вставлять USB-кабель – бесполезно. Только полная перезагрузка Windows спасёт Отца Русской Демократии. Когда перезапускаешься третий-четвёртый раз за час – это начинает несколько раздражать. Поиск в сети не дал никаких результатов. Попытка бегло осмотреть исходники UsbDk – тоже, а на детальные разбирательства нет времени. Может, кто в комментариях чего подскажет…

Но на самом деле, эта проблема раздражает, но не является фатальной. Вторая проблема более серьёзная. Вот я поставил VirtualBox. Я просто запустил виртуальную машину и хочу подключить к ней, скажем, бластер. И что получаю?

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Аналогично – любое другое устройство.

Поиск по сети даёт много вариантов типа: «У меня всё заработало после того, как я потёр заячьей лапкой по бубну из кожи тушканчика, спрыснутому кровью семидесятидвухлетней девственницы, полученной…» … Что там дальше в рецепте — сейчас уже не помню… Тем более, мне он не помог… Более осмысленные рекомендации требуют сносить фильтр-драйверы USB, пока не полегчает. Проблема уходит, когда сносишь именно UsbDK. Ну, значится, так тому и быть. Хотя для экспериментов с аудио, других приемлемых вариантов я не нашёл. Так что драйвер я снёс, но дистрибутив – оставил. Пригодится. Именно поэтому описываю эту методику. Ну, и вдруг кто в комментариях подскажет, как обходить эти две проблемы. Тогда станет совсем здорово.

Итого, сегодня мы будем работать через библиотеку libusb, посадив устройство на драйвер WinUSB. Да, мы потеряем возможность работать с устройством через стандартные приложения от Cypress. Зато всё будет стабильно и хорошо.

1.2 Linux

1.2.1 Драйвер

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

Некоторые устройства уже поддержаны в Линуксе по классу, либо по VID/PID. Вот, скажем, я подключил макетную плату ICE40 с ПЛИС Latice и подал сначала команду lsusb, чтобы увидеть USB устройства, а затем – уже полюбившуюся нам по прошлым статьям команду:
ls –l /dev/serial/by-path, чтобы увидеть, что мост фирмы FTDI сам прикинулся двумя последовательными портами.

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

С такими устройствами, если ничего не предпринимать, можно работать только на функциональном уровне. Однако, если функциональный драйвер не подключился, как уверяет начальник, в отличие от Windows такие устройства не станут неизвестными (а потому недоступными). Напротив, с ними можно сразу и без какой-либо подготовки работать через библиотеку libusb. А разработанное нами устройство относится к таковым. Поэтому никакой подготовки для начала работы не требуется. Надеюсь, начальник меня не обманул.

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

1.2.2 Отключение требований прав администратора при работе с USB-устройствами

Главная особенность USB-устройств в Linux состоит в том, что по умолчанию для доступа к ним надо обладать правами администратора. То есть, для сборки «прошивки» для ПЛИС ICE40 (к теме статьи они не относятся, но по проекту я сейчас их осваиваю, причём под Linux, так что скриншоты готовить проще для них) мне достаточно набрать make, а вот если для «прошивки» я наберу make prog, то получу такое сообщение:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Не хватает прав. Надо набирать sudo make prog.

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

Ссылок будет много, все они разной степени шаманства. Вот более-менее подробная ссылка:
Using USB Blaster / USB Blaster II under Linux | Documentation | RocketBoards.org

Вообще, мне стало интересно, и я вбил в Гугля строку поиска
/etc/udev/rules.d/

Он нашёл мне много статей про udev. Некоторые более теоретические. Некоторые слишком практические. Пересказывать их не вижу смысла. При желании вы можете погуглить сами. Дам только ссылку на статью, которая мне кажется хорошо сбалансированной по теории и практике:
Igorka: Знакомство с udev в ubuntu

Итак. Иду в каталог /etc/udev/rules.d. Вижу файл 70-snap.snapd.rules, в котором есть правило, относящееся ко всем FTDI чипам:

FTDI-based serial adapters:

Не понимая до конца, что творю, запускаю не просто mc, а sudo mc и в его редакторе создаю файл /etc/udev/rules.d /71-ice40.rules со следующим содержимым:

Закрываю терминал с админскими правами, открываю новый, с правами обычными. Отключаю-включаю устройство, и… Вуаля! Оно уже доступно без прав администратора!

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Поэтому можете просто повторить мои шаманства, можете – почитать теорию по ссылкам, после чего у вас всё получится уже с пониманием физики процесса. А так – в рамках данной статьи я буду работать только через Windows, но через кроссплатформенную библиотеку libusb версии 1.0 (не путать с 0.1). Поэтому в Линуксе прописывать правила для устройства FX3 не буду.

2 Практика

Ох, и огромный сегодня получился теоретический раздел! Но наконец, мы владеем достаточным количеством знаний, чтобы приступить к опытам. Напомню, я буду работать в ОС Windows, пользуясь библиотекой libusb 1.0, опираясь на драйвер WinUSB. Я сейчас осваиваю работу с кроссплатформенной библиотекой Qt, поэтому буду разрабатывать код под неё.

2.1 Добавляем libusb в проект

Я скачал библиотеку libusb и распаковал её в каталог своего проекта. Чтобы подключить её к проекту, в файл *.pro пришлось добавить блок:

2.2 Класс для доступа к библиотеке

Обычно примеры для статей я пишу в слитном стиле. Но сегодняшний код получился несколько запутанным, поэтому пришлось вынести работу с платой FX3 в примитивный класс. Вот его интерфейсная часть:

По функциям мы ещё пройдёмся, а пока я отмечу то, что у класса есть переменная-член, хранящая указатель на контекст, который будет нужен для вызова некоторых функций тонкой настройки библиотеки, и манипулятор (в простонародии — хэндл) устройства, необходимый для обращения к устройству.

В конструкторе происходит инициализация и тонкая настройка библиотеки:

Как видим, возможна работа библиотеки через драйвер CyUSB и фильтр UsbDk, но сейчас она отключена. И мы включаем расширенную диагностику работы библиотеки. Все сообщения о проблемах будут сыпаться в окно отладочного вывода. Помните, я показывал сообщение об ошибке при работе UsbDk? Без этой опции никто бы ничего не узнал. Ошибка и ошибка.

Деструктор, соответственно, всё деинициализирует. Класс тестовый, заботиться о наличии дополнительных пользователей библиотекой нет смысла. Так что просто деинициализируем и всё.

Подключение к устройству интересно лишь тем, что может работать по разным парам VID/PID. Как я уже говорил, я могу собирать «прошивку» под штатные VID/PID от Cypress, если идёт работа через UsbDk, и под те, на которые у меня нашёлся inf-файл, устанавливающий драйвер WinUSB. В остальном, ничем не примечательные типовые вызовы функции библиотеки libusb:

Ну, и отключаемся от устройства тоже типовым методом:

Собственно, всё. Функцию чтения из устройства я буду вызывать напрямую. Это противоречит принципам проектирования классов, но для опытов сойдёт. Я просто заметил, что код инициализации сильно разросся и отделил его от основного кода, вынеся в класс. А чтение — оно в одну строку выполняется, его отделять было не нужно.

2.3 Тестовая программа

Программа состоит из функции main() и тестовой функции.

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

В будущем я планирую вызывать эту функцию многократно, но пока — функция main() вызывает её один раз:

Собственно, и вся программа.

2.4 Результат тестового прогона

2.4.1 Скорость

При тестовом прогоне мы видим, что скорость близка к требуемой. Напомню, что источник гонит 16-битные данные на скорости 60 МГц, так что нам требуется поток 120 миллионов байт в секунду. Когда на временных диаграммах наблюдался огромный дефицит колбасы, скорость была всего 30 Мегабайт в секунду. Даже меньше, чем практически достижимая скорость на шине USB 2.0. Так что текущие результаты вполне приемлемые.

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Правда, чтобы окончательно успокоиться, я решил немного поэкспериментировать со скоростью. Чаще всего она была равна 119 0XX XXX байт в секунду. Изредка – 119 4XX XXX. Ну, и совсем редко – промежуточные значения, похожие на указанные выше. Сначала я решил, что это могут быть ошибки округления. У нас идёт округление показаний таймера, и возникают округления при делении. Тогда я переписал вычисление скорости так (перешёл на наносекунды и стал умножать перед делением, чтобы минимизировать ошибку округления):

Результат ничуть не изменился. Следующее подозрение было, что источник имеет некоторую ошибку кварцевого резонатора и шлёт данные чуть медленнее, чем надо. Но другая плата даёт точно такие же показания! Значит, дело не в экземпляре. Мало того, осциллограф (правда, весьма дешёвый китайский) говорит, что тактовая частота нисколько не занижена, даже чуть завышена.

Тогда я полез в исходники библиотеки libusb и просто-таки утонул в коде, который исполняется при ожидании конца передачи данных. Там такая цепочка функций – просто закачаешься! И много, где может возникать задержка. Но давайте прикинем, какова задержка.

120 мегабайт в секунду… Округлим до ста. Это 1 мегабайт в 10 миллисекунд. А у нас просадка как раз на 1 мегабайт. Неужели начало и конец прокачки съедают так много времени? Как бы проверить хотя бы начерно? Я решил переписать на пробу код под прямой вызов WinUSB API. Полностью объяснять я его не стану, там устройство открывается хитро, через SetupDi API. Я просто воспользовался готовыми своими старыми классами, поэтому всё было сделано под Visual Studio. Но вместо страшных километровых текстов ожидания завершения библиотеки WinUSB, моя функция чтения выглядит вполне канонически:

А тест теперь выглядит так:

Теперь скорость стабильно находится в районе 119 2XX XXX байт в секунду. Вот какой красивый результат я подловил для красного словца:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

А вот результат нескольких прогонов подряд:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

В общем, никто не запрещает просадке возникать и на входе-выходе в функцию чтения. Если разрывов в показаниях счётчика не будет, то и ладно.

2.4.2 Пропуски в показаниях счётчика

Но на тему разрывов у нас тоже имеется пара строк в выводе основной тестовой программы:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Имеется два нарушения последовательности счёта. Неужели мы нарвались на выпадение данных? К счастью, всё в порядке. Множественные прогоны говорят, что проблемы всегда в одном и том же месте. И мы с таким уже сталкивались в одной из старых статей. У нас есть две точки буферизации данных: буфер контроллера и FIFO в ПЛИС. Готовы ли мы принимать данные или нет, они с выхода счётчика будут заливаться в буфер FX3. Когда тот переполнится, заливка остановится. Кроме буфера FX3, есть ещё FIFO в ПЛИС. Вот у нас и имеется две ёмкости, которые заполнились, но счётчик продолжил работу. При чтении мы увидели разрывы в счёте.

Соответственно, мы наблюдаем явление переходных процессов. При реальной работе надо будет настроить источник так, чтобы он не заполнял буфер данными, пока мы не готовы их принимать (собственно, в статье про голову USB-Анализатора мы уже делали такую функцию через добавление бита «Go»), а пока – просто будем игнорировать ошибки в этой области. Считаем, что это – не баги, а фичи. Меняем проверку разрывов на такую:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Делаем массовый прогон для такого варианта… И тут я понял, кто даёт задержку… Отладочный вывод. Вот так всё выглядит:

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Масса вспомогательных текстов, выдаваемых библиотекой. Ну и отлично. Закомментируем в конструкторе класса, обслуживающего libusb, строку:

// libusb_set_option(m_ctx, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_DEBUG);

Получаем красоту, ничем не отличимую от того, что мы получали при прямом вызове WinUSB API (жаль только, что не идеальный результат):

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

Но главное – нет сообщений про разрывы в показаниях счётчика (известные точки разрывов мы игнорируем).

А что там нам про таймауты промежуточные говорили? Попробуем читать не 128, а 32 мегабайта! Получаем уже скорость вплоть до 119 8XX XXX мегабайт в секунду!

Via usb что это. image loader. Via usb что это фото. Via usb что это-image loader. картинка Via usb что это. картинка image loader

В общем, всё хорошо… Кроме одного. Я нашёл такой нестандартный вариант теста, при котором штатная «прошивка» FX3 подвисает. Но статья получилась такой большой, что как это найти, а главное – как исправить, я расскажу в следующий раз.

Источник

Добавить комментарий

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