jungo windriver что это

STM32 и USB. Часть 2. Немного о драйверах и софте.

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

В проекте был реализован интерфейс с двумя bulk-ендпойнтами (in и out), с моим «кастомным» протоколом, при помощи которого можно включать, выключать и заставлять светоиоды мигать с нужными временами горения/не горения.

Ну и выложил небольшую программу для всего этого:

Пользователь Vga в комментариях справедливо заметил, что разработка своего драйвера под Windows — задача далеко не тривиальная, и что проще реализовать стандартный класс, например HID, под который драйверы есть.

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

Итак, у нас на повестке следующие варианты:

1) Написать драйвер самому. Задача сложная, неблагодарная, долгая. Тут сразу можно отсылать, например к Windows Driver Foundation. Есть куча примеров, которые можно расковырять и адаптировать под свои задачи.
Несомненный плюс этого варианта — решение получится красивое и компактное. Но стоит ли это потраченного времени…
Извините, если разочаровал тех, кто полагал, что я опишу именно этот вариант 🙂

2) Реализовать на девайсе один из стандартных классов, например тот же HID.
Но давайте предположим что мы вот буквально вчера наконец-то заставили наш девайс определяться по USB как самостоятельное устройство, и все что мы умеем — это читать и писать в ендпойнты. Нам нужно что-то еще проще.

3) Использовать готовые средства. Вот на этом «варианте для начинающих и не только» мы остановимся.

Но вначале небольшое отступление.

Как Windows опознает наши USB-устройства?
В большинстве случаев это «зашитые» в девайс VID (Vendor ID) и PID (Product ID). Есть исключения, например HID и Mass Storage, там Windows опознает класс устройства и подсовывает уже приготовленный драйвер.

Есть, конечно, и более хитрые варианты, но мы на них пока останавливаться не будем.
Наши VID и PID можно подсмотреть в файле usb_desc.c проекта. И обязательно прочтите комментарий 😉

Итак, встречаем: libusb-win32 и Jungo WinDriver.

Jungo WinDriver

Весьма удобная штука.
Запускаем Wizard, выбираем по VID-PID наш девайс:

Генерим inf-файл, сохраняем, устанавливаем тут же драйвер, и вуаля. Вот они наши два bulk-ендпойнта + управляющий, нулевой ендпойнт:

А вот наш девайс определился в диспетчере устройств:

Но и это не все. Жмем на волшебную кнопку Generate Code:

И получаем воистину огромный набор вариантов на любой вкус:

Генерим проект, запускаем. Вот — готовая программа для работы с нашим девайсом:

Можем отправлять данные в ендпойнты и читать их оттуда.
Например, отправка пакета на скриншоте согласно моему протоколу зажжет светодиод номер два. (См protocol.txt в проекте Keil)

Я сгенерил проект для C# (.NET) и мне он выдал солюшен с двумя проектами: Собственно сама программа и либа для работы с девайсом по USB. В последней есть все необходимое, вплоть до событий подключения-отключения девайса. А вообще если не заморачиваться, то все можно свести к обычному чтению-записи в ендпойнты.
Дальше сами справитесь? 😉

Ну а теперь поговорим о недостатках.
1) Jungo WinDriver — штука очень уж платная. Кто хочет расстроиться — цены лежат тут.
2) У некоторых USB-девайсов бывает несколько конфигураций. Такое встречается редко, но встречается.
WinDriver с такими работать не умеет, а функция смены конфигурации помечена как Not Implemented Yet.

libusb-win32

Распаковываем и в папочке bin лежит программка inf-wizard.exe. Тоже визард для генерации инф-файла, а заодно и всех остальных файлов, необходимых для установки драйвера.
Запускаем, выбираем наш девайс, сохраняем inf и прочее в отдельную папочку:

Ну и сразу инсталлируем.

Теперь, чтобы создать свой проект, необходимо собрать все нужные от libusb файлы в папках lib, include, подсмотреть как работать с устройством, в папке exampes. А работать — проще простого (см bulk.c)

Читайте также:  crm cab что это

LibUsbDotNet

Нет, вы только вдумайтесь: .NET-надстройка над библиотекой, портированной из линукса под win32!
Конечно, изврат извратом, но мне понравилось.

Именно при помощи этой либы я и написал программу из предыдущей статьи. Работать с ендпойнтами так же просто.

Ну а дальше реализуем небольшой протокол, пишем-читаем ендпойнты и радуемся мигающим светодиодам 🙂
Только не забываем одну тонкость: весь обмен с USB-девайсом происходит по инициативе хоста. Поэтому, данные не попадут в хост до тех пор пока хост сам не захочет их прочитать.
Вот и все.

Итого

Вот, в принципе, все необходимое для того чтобы создать на STM32 примитивный USB-девайс. Весь обмен сводится к чтению и записи в ендпойнты и разбору того, что же туда все-таки пришло и что с этим делать.
Лично мне кажется этот вариант проще, чем реализация на девайсе стандатного класса.

Как всегда, файлы с проектом находятся тут.

Ну а в следующий раз, когда дойдут руки, будем поднимать USB Mass Storage, причем поверх уже сделанного интерфейса для светодиодов, т.е. составное USB-устройство 🙂

Источник

WinDriver – инструмент разработки драйверов для устройств – PCI/USB/PCIe

WinDriver™ – инструмент, который позволяет просто и элегантно разрабатывать драйвера для PCI, PCIe и USB устройств на оперционных системах Windows и Linux.

Используя WinDriver, вся работа будет происходить в режиме пользователя, при этом не требуется иметь знания в программировании, в режиме ядра. За вас это сделает WinDriver!

Кому подходит использование WinDriver?

Разработчики оборудования – Использование Driver-Wizard для быстрого тестирования вашего оборудования

Разработчики програмного обеспечения – Использование Driver-Wizard для генерирования кода драйвера вашего устройства и управления им. Использовать инструменты WinDriver для тестирования и отладки кода драйвера.

Консультация нв русском языке:

Либо позвоните по телефону: +1-408-600-0851

Платформы Windows поддерживаемые WinDriver:

Основные функции WinDriver

Оптимизация производительности: используйте технологию WinDriver Kernel Plugin для разработки вашего драйвера в режиме пользователя, а затем выполните критические разделы производительности в режиме ядра (Ring 0) для достижения оптимальной производительности.

Продукты WinDriver сопровождаются подробными техническими рекомендациями, которые помогут вам на разных этапах процесса разработки. Если вы только начали оценивать или использовать WinDriver – вы можете найти наш Quick Start Guide. Если вам требуется более подробная информация или вы хотите узнать больше о технических аспектах WinDriver – обратитесь к нашему онлайн-руководству. Для других технических ресурсов, таких как часто задаваемые вопросы и технические документы, см. Страницу поддержки WinDriver

Партнеры

WinDriver предлагает набор готовых библиотек и функций доступа к элементам электронных устройств, которые обеспечивают расширенную поддержку нашим PCI / PCI Express и USB- партнерам электронных устройств

Источник

Jungo windriver что это


E-mail для связи: