Jump to content

    
Sign in to follow this  
jcxz

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

Recommended Posts

Нужно из под винды работать со своим девайсом по 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

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

Написал работу со своим изохронным потоком на базе драйвера 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
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this