среда, 21 ноября 2012 г.

Библиотеки для работы с USB. Нижний и верхний уровень

Несмотря на то, что интерфейсу USB исполнилось уже почти 20 лет, умы начинающих гаджетостроителей, создающих сотни однотипных тем на разного рода форумах и впервые столкнувшихся с электроникой и компьютерной техникой,  продолжают будоражить одни и те же вопросы: «Как включить-выключить питание на USB-порту? Хочу управлять лампочкой (ракетницей, чайником, жалюзи, унитазом, ...далее подставить по-желанию) через USB, уже подключил два провода». Сразу осадим и спустим на землю таких фантазеров, без контроллера – никак, более подробно см. официальный сайт http://usb.org.

И задача не так уж тривиальна, как может показаться на первый взгляд. Обусловлено это простой причиной – управление питанием внутреннего USB концентратора (хаба) на материнской плате допускают единичные экземпляры, и уж тем более питанием отдельного порта. В большинстве случаев, даже при дезактивации той же флешки, питание на нее через хаб продолжает поступать напрямую от блока питания (через защитную перемычку в виде SMD резистора нулевого сопротивления, своего рода предохранитель) и погасший индикатор (светодиод) на флешке совсем не означает ее обесточивания. Потому как сам светодиод подключен к одному из портов контроллера флешки и служит лишь индиктором обмена данными (чтения-записи), в очень редких случаях светодиод подключен к USB шине питания напрямую. Вот так вот.

Дополнительная подборка для погружения в тему
  1. WDK, есть пример, также NuMega Driver Studio в помощь
  2. Cергей Бадло. USB термометр и дистанционка в одном флаконе. - Радиолюбитель, цикл материалов - №12-2009, №№1-4-2010.
  3. Дмитрий Чекунов. Программисту USB-устройств. Часть 1. Знакомство с USB // Современная Электроника, 2004, №1.
  4. Программисту USB-устройств. Часть 2. Стандартные требования USB // Современная Электроника, 2004, №2.
  5. Программисту USB-устройств. Часть 3. Стандартные дескрипторы USB // Современная Электроника, 2005, №1.
  6. Дмитрий Чекунов. Практикум программиста USB-устройств Часть 1. EZ-USB FX2LP – универсальное USB-решение // Современная Электроника, 2005, №4.
  7. Практикум программиста USB-устройств. Часть 2. Разработка аппаратно-программного ядра USB-устройства // Современная Электроника, 2005, №5-6.
  8. Практикум программиста USB-устройств. Часть 3. Расширение функций ядра USB-устройства // Современная Электроника, 2006, №1-2.
  9. Практикум программиста USB-устройств. Часть 4. Разработка программатора MK P89LPC9xx // Современная Электроника, 2006, №6-8
Библиотеки и классы для работы с шиной USB
  1. LUFA. Free-библиотека USB для МК AVR. LUFA - открытая библиотека для работы с USB в AVR под AVR-GCC, реализующая полный стек протоколов USB на микроконтроллерах ATmel с аппаратной поддержкой USB (серии AT90USBxxxx или ATMEGAxxUx). Поддерживается работа в режиме USB-slave, USB-хоста (с некоторыми ограничениями) и bootloader (с поддержкой классов CDC, DFU, HID).
  2. USB HID Component for C#. Представляет собой набор классов для работы с HID под NET.
  3. JEDI - HID Component - свободная разработка для обмена по HID протоколу, обертка над SetupAPI от JEDI HID Component.
  4. LibUsb - представляет собой наиболее универсальный инструмент, который подойдет как для Linux, так и для Windows, а так же для FreeBSD и OS X. С помощью библиотеки прикладная программа может решать такие задачи, как поиск устройства на шине USB и обмен данными с ними. Описание работы с пакетом.
  5. Описание API вызова библиотеки HIDOUTEX.DLL. Библиотека моей разработки позволяет, независимое от записи, чтение любого заданного HID-устройства. Таким образом, вы можете управлять выходами одного заданного HID-устройства и считывать параметры с него же или с другого HID-устройства. К примеру, подключив к USB портам ПК/ноутбука/нетбука uniUSB и HID-термометр можно осуществить управление одним, считывая показания другого через одну функцию в один момент времени.
  6. D2xx-драйверы от FTDI + хэдеры. D2xx-драйверы фирмы FTDI являются альтернативой VCP-драйверам. Они включают драйвер WDM, который осуществляет связь с устройством через Windows USB Stack, и библиотеку DLL, которая связывает прикладное программное обеспечение (написанное на VC++, Borland C++ Builder, Delphi, VB и т.п.) с WDM драйвером. D2XX-драйверы позволяют получать максимальные заявленные скорости обмена данными (8 Мбит/с для каналов, образующих параллельный интерфейс с микропроцессорной системой, и 3 Мбит/c при использовании последовательной связи с микроконтроллером).
  7. Поддержка USB for Turbo-Pascal (под DOS) от Dieter R. Pawelczak. Модули осуществляют инициализацию и управление контроллером USB. В качестве примера доступа и конфигурации USB устройства прилагается программа HUBDISCO, которая инициализирует и конфигурирует 4-х портовый хаб на базе TUSB2040 от Texas Instruments, и переключает потоки через порты. Пример работает в реальном режиме поскольку для него требуется соответствие физического адреса линейному адресу в памяти. Вкрапления ассемблерных инструкций, в основном команды доступа к 32-разрядным портам, которые не поддерживаются Turbo Pascal. Принцип работы модулей основан на спецификации USB v1.1 и документации Intel UHCI.
  8. Библиотека 16FUSB. Альтернатива V-USB для PIC предоставляет программную реализацию низкоскоростного стека USB для микроконтроллеров семейства PIC без аппаратной поддержки USB (с аппаратной поддержкой - это PIC18F2455/2550/4455/4550).
  9. Библиотека swusb. Она предназначена для среды BASCOM-AVR и позволяет создавать USB устройства на МК семейства AVR, не имеющих аппаратного USB модуля.
  10. DOSUSB supports EHCI, OHCI and UHCI controllers for USB 2.0 or 1.1.
Практические аспекты использования шины USB для контроля и управления

Вариантов множество, даже слишком при такой общей постановке задачи и без граничных условий по железу. Задача эта - комплексная и ее лучше разбить на подзадачи:
  1. Определиться с бюджетом
  2.  Определиться с количеством и типом хотелок (сколько чего и куда)
  3.  Нарисовать это все на листочке, посидеть, подумать, еще раз посидеть, подумать, а что же лишнего
  4.  Выбор датчиков (в том числе и для сигнализации), монтаж канала связи и датчиков
  5.  Выбор исполнительных устройств, монтаж канала связи и исполнительных устройств
  6.  Обеспечение бесперебойным питанием критического оборудования
  7.  Создание ПО сбора, контроля и управления всеми каналами (cвоего рода, мини-SCADA), неважно на каком языке
  8.  При желании, можно добавить управление и контроль через Интернет.
Варианты управления полистайте по страницам моей публикации в "Магии ПК"*. Можно задействовать USB б/у клавиатуру (ее светодиоды), можно готовые USB.HID реле, свой гаджет напаять или готовый шнурок-китайский конвертор от мобилок (1-2 бакса покупной кабель-конвертор USB/RS-232 или UART TTL):

 
Силовые цепи разумеется подключать через развязку. Классика - реле. Но для них ключ нужен, напрямую LPT не расчитан, да и COM-порт не потянет. Также вместо реле подойдет с успехом оптореле для ваших ламп. Тогда светодиод оптореле подключаем через ограничительное сопротивление к одному из DATA-пинов LPT или на COM-порт (линии DTR, RTS):


Чтобы отслеживать состояние кнопки через COM порт over USB на основе конвертора USB/UART (RS-232) в таком варианте:


достаточно http://msdn.microsoft.com/en-us/library/windows/desktop/aa363200(v=vs.85).aspx, вот и вся программа. Если у вас проблема с пониманием WinAPI, можете использовать готовую обертку BCPort, в ней события отслеживания служебных CTS/DSR уже реализованы. Впрочем:
  1. Е.Бадло, С.Бадло. Преобразователь интерфейсов USB-RS-232-RS-485 в задачах малой автоматизации. Часть 1 или... Монитор-запросчик. - Радиолюбитель, Минск, 2013, №4, с.18.
  2. Е.Бадло, С.Бадло. Преобразователь интерфейсов USB-RS-232-RS-485 в задачах малой автоматизации. Часть 2 или... Полуавтоматическое интерактивное управление шлагбаумом. - Радиолюбитель, Минск, 2013, №5, с.26.
Если оптореле покажется излишне дорогим или труднодоставаемым в вашем регионе, то рекомендую реле с возможностью механической блокировки их состояния, т.е. к примеру ПК тю-тю или порт сгорел, временно можно защелкнуть самому. Это и будет заменитель "пакетников", надежно и опционально:


В случае c RS-232 (физическим или виртуальным) аппаратно можно управлять двумя сигналами без использования МК. Впрочем, если использовать Serial-to-Parallel конвертор (аппаратный преобразователь последовательного кода в параллельный), к примеру, EDE702 или CD4094 (8-ми битный сдвигающий регистр | даташит), то и большим количеством. Далее и через тырнет over USB:


p.s.: на самом деле для того, чтобы получить сигнал о состоянии той же кнопки совсем необязательно использовать клавиатуру и вообще контроллер. При использовании микрофонного входа можно обойтись в принципе и без дополнительного генератора и подключить кнопку напрямую вместо микрофона. В чем хитрость? Хитрость в шумящих битах и наведенном шуме при открытом входе или закороченном (микрофонном или линейном). При этом вам достаточно просто отслеживать уровень шума по входу: уменьшился - значит кнопка нажата. Как отслеживать уровень звука на аудиовходе? Если вы под виндами, то через http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd743838(v=vs.85).aspx, можно и через обертки вроде BASS (примеры готовые в ее SDK на офсайте), через DirectSound (или через готовую обертку DXAudioIn и т.п.
* Похоже издание "Магия ПК" кануло в лету после 15 лет бумажных, а после электронных выпусков, но вполне доступно из архива Интернета через машину времени. Не знали о такой? Вот - web.archive.org, пользуйтесь на здоровье. Последнее слово главреда почитать можно тут.

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.