Pull to refresh

Comments 29

Супер!
Я как раз разбираюсь с V-USB на AVR, и если со стороны МК все понятно, то вот опыта создания драйверов нет. Все собирался засесть за гугл, но эта статья меня опередила.
Большое спасибо автору!
Я для самодельных V-USB девайсов писал «дрова» с помощью libusb-1.0. Очень простой API и куча ОС поддерживается. Хотя для windows не самый «родной» способ.
Ну, под виндой отличие только в том, что нужно драйвер WinUSB ставить через какой-нибудь Zadig. Я так утилиту stlink на винде завёл (она использует libusb-1.0).
UFO just landed and posted this here
А если это будут два двигателя, один из которых открывает шахту с ракетой, а второй — приводит ракету в вертикальное положение — Ваше мнение поменяется?
UFO just landed and posted this here
Такой язык уже есть вроде… 1С?
И там короче не получается ;)
UFO just landed and posted this here
Ну у меня например нечто похожее управляет светом в квартире. Тоже в общем-то «2 светодиода», если вдуматься :)
ардуинщика видно за километр
Кстати, для V-USB часто не требуется драйвер. Можно реализовать как HID устройство и работать с ним штатными средствами винды.
Классно, не кроссплатформенно. Как по мне намного проще и удобнее, использовать libusb, которая есть под все основые ОС. И бекенды для неё тоже есть под все основные языки. Даже под мой любимый python.
Для прототипирования или домашних поделок — неимоверно удобно.
Да, я года 3 назад пробовал работать с libusb. Тогда столкнулся с такой ситуацией, что эта библиотека отличалась по возможностям в версиях для linux и windows. Мне кроме bulk нужны были изохронные конечные точки. Их не удалось использовать в версии под windows. Может сейчас стало лучше, я не в курсе.
О, в последнее время там куча коммитов касаются windows-порта. Сам, честно говоря не проверял windows-backend, но думаю что уже намного лучше (только это git-репозиторий проверять надо, на sourceforge новых версий нет): git.libusb.org/?p=libusb.git;a=summary
Лучше реализовывать какой-нибудь универсальный класс устройств, например CDC ACM или HID, — не будет проблем с кроссплатформенностью и драйверами.
Забыл упомянуть в статье, что действительно лучше стараться делать так, чтобы устройство соответствовало какому-нибудь стандартному классу. Тогда можно будет воспользоваться драйверами класса, которые обычно есть с любой ОС.
Вот, кстати, хотел спросить у автора статьи — почему он, отказавшись от чипа rs232-usb, отказался заодно и от виртуального com-порта (CDC ACM)? Ведь он работает именно с USB, не требуя наличия rs232/uart в устройстве. И с устройством можно работать теми же ReadFile/WriteFile через COM, используя штатный виндовый драйвер usbser (и в линуксе готовый драйвер, дающий устройста ttyACM или ttyUSB), не изобретая своего драйвера. У виртуального ком.порта и другие плюсы — например, с ним можно работать через консоль (HyperTerminal, TeraTerm, PuTTY...), а не только самодельной программой, а если на нем эмулировать модем и PPP (как сделано в iron.snop.ru/), то и по «виртуальной сети».

И еще у самодельных драйверов, кроме лишних затрат времени, есть еще один минус — последние версии винды не любят неподписанные драйверы…

В общем, хотелось бы узнать мотивацию, подвигшую на подвиги с самодельным драйвером. Я знаю только один недостаток виртуального com-порта — ограничения скорости в штатном usbser в 921Кбит (хотя может это мне так кажется, а на деле и это как-нибудь обходится?).
Дело в том, что я не отказался от стандартных классов USB устройств. Я только показал, с чего начать, если требования задачи не ложатся ни на один из существующих классов. Хотел показать, что в общем и в такой ситуации ничего страшного и сложного нет и не стоит притягивать проект за уши к какому-либо классу, только из-за боязни столкнуться с написанием драйвера.
Насчет кроссплатформенности, есть мысль написать вторую статью, сделав тоже самое, но под Linux. Тогда будет видно, что это не намного сложнее, и проблема кроссплатформенности для простых драйверов несколько преувеличена.
UFO just landed and posted this here
Если их никто не пишет, то как же работает весь тот зоопарк устройств в Windows…
То что это сложнее чем вывести «HELLO WORLD» на HTML в браузере совсем не означает, что этим не занимаются. Тут даже проблема не в сложности самого кода, а в том, что отладить труднее, пошагово код не пройти в IDE, документации с примерами не много, а та что есть часто привязана к какому-либо устройству. Но сейчас стало намного проще все это решить.
Я начинал работать с драйверами под WinNT в 1999 году. Из документов был только WinNT DDK. Английский был очень слабый. Ну и ничего, через два месяца все было сделано.
А с сегодняшним уровнем документации и с наличием WDF, процесс стал намного проще.
Проблема не столько в написании драйверов (не сложнее, чем написать «ответную часть» в самом устройстве), сколько в возникающих организационных сложностях по их нормальному использованию в винде — 1) требуется подпись, 2) валидация в MS, 3) борьба с антивирусами, которые где-нибудь непременно посчитают ваш драйвер вирусом.
Стоит отметить, что под 64-битными виндами необходима будет подпись драйвера, которая стоит денег.
В 64-битной винде не появляется окно, где можно проигнорировать отсутствие подписи и продолжить установку? Т.е. либо подписанный драйвер либо никакого?
В Win8 можно только вообще отключить проверку всех подписей драйверов при загрузке — фича для разработчиков — (при массовом применении чревато ловлей какого-нибудь «стухнета»), а индивидуально разрешить один неподписанный драйвер вроде как нельзя.
Мне кажется в таких статьях стоит упоминать откуда берутся VID и PID, и что это далеко не бесплатно — usb.org. Хотя, для домашних поделок не играет роли.
Для домашних поделок есть, например vid 03EB, pid 2040, вполне официально. Впрочем, попадались и вполне коммерческие, правда, сильно специализированные железки, использовавшие vid 16C0, pid 05DC (используется упомянутой выше libusb). Хотелось сказать очень много «приятного» в адрес разработчика этого чудо-устройства.
Sign up to leave a comment.

Articles