Pull to refresh

Comments 29

Супер!
Я как раз разбираюсь с V-USB на AVR, и если со стороны МК все понятно, то вот опыта создания драйверов нет. Все собирался засесть за гугл, но эта статья меня опередила.
Большое спасибо автору!
Я для самодельных V-USB девайсов писал «дрова» с помощью libusb-1.0. Очень простой API и куча ОС поддерживается. Хотя для windows не самый «родной» способ.
Ну, под виндой отличие только в том, что нужно драйвер WinUSB ставить через какой-нибудь Zadig. Я так утилиту stlink на винде завёл (она использует libusb-1.0).
UFO landed and left these words here
А если это будут два двигателя, один из которых открывает шахту с ракетой, а второй — приводит ракету в вертикальное положение — Ваше мнение поменяется?
UFO landed and left these words here
Такой язык уже есть вроде… 1С?
UFO landed and left these words here
UFO landed and left these words 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 landed and left these words 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