Jump to content

    

Общий USB-драйвер для win

Нужно из под винды работать со своим девайсом по USB. Что именно делать: получать его дескрипторы + control-передачи по ep0 + изохронные передачи.

Писать свой USB-драйвер устройства естественно желания нет. Хочу использовать что-то типа WinUSB/LibUSB/CyUSB/etc.

Ранее в таких случаях всегда пользовал CypressUSB (CyUSB). Но у него есть баги при работе с изохронными точками. Хочется попробовать что-то новое.

Решил попробовать LibUSB. Как оказалось там есть какая-то путаница: на сайте проекта рекомендуют использовать libusb1.0 (а не старую libusb0.1), но виндовый драйвер есть только для libusb0.1 (libusb0.sys), для libusb1.0 нет в природе .sys-файла (или я не нашёл?). Если верить докам на libusb1.0  - оно должно быть совместимо с .sys-драйвером 0.1. Но по факту некоторые функции библиотеки libusb1.0 не работают с libusb0.sys - возвращают ошибку (в то время как если вызывать их аналоги из библиотеки версии 0.1 - они работают нормально). В инете на форумах народ также пишет о такой проблеме, но решения нет.

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

Почитал про WinUSB, но там как я понял вообще нет поддержки изохронных передач.  :(((

Есть ещё какая-то libusbK, которая как пишут подобная WinUSB, но имеет поддержку изохронных передач.

 

Вопрос: Кто какие библиотеки/драйвера использует в таком случае? Какие недостатки/достоинства они имеют?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 час назад, GenaSPB сказал:

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

Почему "нетребовательный"? Это не аудио и не видео - не надо заворачивать.

Share this post


Link to post
Share on other sites
4 hours ago, jcxz said:

Почитал про WinUSB, но там как я понял вообще нет поддержки изохронных передач.  :(((

удивительно, в W8 и ранее, похоже действительно не умело, насколько научилось теперь - не знаю, но вот:

Quote

Starting in Windows 8.1, the set of WinUSB Functions have APIs that allow a desktop application to transfer data to and from isochronous endpoints of a USB device. For such an application, the Microsoft-provided Winusb.sys must be the device driver.

https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/getting-set-up-to-use-windows-devices-usb

Share this post


Link to post
Share on other sites
1 час назад, _pv сказал:

удивительно, в W8 и ранее, похоже действительно не умело, насколько научилось теперь - не знаю, но вот:

Да, я это тоже видел. Но хотелось бы чтобы работало во всех виндах, начиная даже желательно от XP.

В принципе CyUSB работает нормально на Win7. Но в XP глючит. И нет полной уверенности в том, что этот баг не проявится при каких-то условиях на виндах >=win7. Да и хочется расширить кругозор в плане подобных драйверов.

Share this post


Link to post
Share on other sites

Это я потому спросил, что пропажа данных в изохронном ендпоинте дело тихое и незаметное.

Share this post


Link to post
Share on other sites

Я же написал: у меня поток данных реального времени. И максимального размера кадра. Поэтому выбора нет - только изохронный.

И почему "тихое"? В кадры нетрудно добавить счётчик и по нему обнаруживать потери.

Share this post


Link to post
Share on other sites

Вобщем результат:

Написал работу со своим изохронным потоком на базе драйвера libusbK (v3.0.7.0) (http://libusbk.sourceforge.net/UsbK3/index.html)

Работает стабильно (правда проверил только под winXP). Непрерывный поток изохронных кадров размером 1023 байт, с параллельным обменом через ep0. Багов в работе не замечено (в отличие от CyUSB). Из жирных минусов могу отметить только очень скудную документацию (описаний на некоторые функции API практически нет). Поэтому разбираться в его API пришлось по исходникам (благо примеров с ним идёт много). Изохронное API у этого драйвера - полновесное (в отличие от WinUSB и libusb-win32): позволяет ставить очереди из множества кадров драйверу на приём в overlapped-режиме. Прерывание/перезапуск потока - тоже без проблем.

Работу проверял в режиме FS-USB с XMC4500.

 

PS: USB-драйвер из состава LUFA-библиотеки для XMC4xxx можно выкинуть на помойку, так как багов в нём много, если с ep0 ещё как-то работает более-менее, то для изохронного режима не годится - пришлось полностью его перепахать.

Share this post


Link to post
Share on other sites

А драйвер для этого UsbK3 есть подписанный?

Share this post


Link to post
Share on other sites
5 минут назад, AHTOXA сказал:

А драйвер для этого UsbK3 есть подписанный?

Не знаю. Сейчас у меня под рукой только комп с WinXP - мне без разницы. Можете сами по приведённой ссылке поинтересоваться.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 минуту назад, AHTOXA сказал:

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

Мне этот USB исключительно для отладочных целей нужен: Нужно выводить быстрый поток, а почти все пины заняты (Ethernet не задействуешь). А больше других подходящих скоростных интерфейсов в XMC4500 нет. В рабочей прошивке у юзера не будет USB.

Share this post


Link to post
Share on other sites
14 hours ago, jcxz said:

Мне этот USB исключительно для отладочных целей нужен: Нужно выводить быстрый поток, а почти все пины заняты (Ethernet не задействуешь). А больше других подходящих скоростных интерфейсов в XMC4500 нет. В рабочей прошивке у юзера не будет USB.

Из spi, которых у xmc4500 довольно много, и 74hc86 можно 10BASE-T ethernet изобразить, ну или из spi на удвоенной скорости, но тогда весь поток побитно пережевать придётся для манчестера. И только на выход, на вход ещё пара D триггеров нужна для декодера.

Share this post


Link to post
Share on other sites
12 минут назад, _pv сказал:

Из spi, которых у xmc4500 довольно много, и 74hc86 можно 10BASE-T ethernet изобразить, ну или из spi на удвоенной скорости, но тогда весь поток побитно пережевать придётся для манчестера. И только на выход, на вход ещё пара D триггеров нужна для декодера.

a) Объясните как SPI подключить к ПК?

b) Я выше писал - почти все пины заняты, а SPI-ные - так точно все.

Share this post


Link to post
Share on other sites
25 minutes ago, jcxz said:

Объясните как SPI подключить к ПК?

Сэмулировать 10M Ethernet. Достаточно имитировать только Normal Link Pulse и все. Линк поднимется, дальше просто посылать UDP-пакеты. Главное, чтобы SPI без дырок между байтами мог данные посылать со скоростью 10М. Либо работать в слейв-режиме с такой скоростью. Из I2S, кстати, хорошо получится.

43 minutes ago, _pv said:

И только на выход, на вход ещё пара D триггеров нужна для декодера.

Не хватит двух D-триггеров для декодирования манчестера. Да еще и не в каждом камне SPI умеет в слейв на 10М.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now