STM3. 2 и USB- HID — это просто / Хабрахабр. На дворе 2. 01. 4 год, а для связи микроконтроллеров с ПК самым популярным средством является обычный последовательный порт. С ним легко начать работать, он до примитивности прост в понимании — просто поток байт. Не всегда он есть под рукой. Не всегда такой переходник работает стабильно из- за проблем с драйверами. Есть и другие недостатки.
И у них есть на то основания. Однако, хорошо ведь иметь альтернативу? Я дам готовый рабочий проект и расскажу как его адаптировать для своих нужд. А уж вы сами решите — нужно оно вам или нет. У нас есть плата с современным недорогим микроконтроллером STM3. F1. 03. C8 со встроенной аппаратной поддержкой USB, я рассказывал о ней ранее.
Я сказал, что у последовательного порта есть и другие недостатки: -часто COM порт отсутствует в ПК или ноутбуке- питание устройству нужно подавать отдельно- даже при наличии COM порта в ПК необходимо согласовывать уровни сигналов: ПК использует интерфейс RS2. В и - 1. 5В, а микроконтроллеры — TTL уровни (+5. В, +3. 3. В, униполярные).- часто в системе образуются десятки виртуальных COM портов и найти тот порт, что соответствует вашему устройству может оказаться непросто. В свою очередь USB с нами уже многие годы и имеет свои преимущества: -Возможность подачи питания от HOST устройства- Удобная реализация пакетного обмена- Возможность одновременного подключения к устройству несколькими программами- Возможность однозначной идентификации подключенного устройства- Аппаратная поддержка во многих современных МК, что исключает необходимость переходников.
Программатор у нас будет работать в режиме USB CDC (виртуальный COM- порт), этот В качестве драйвера нужно подсунуть файл avrdoper. Кроме того, Вы можете использовать класс USB CDC (виртуальный COM- порт). К плате Марсоход нужно припаять кварцевый генератор на 24Мгц. USBCDC спецификация (603.59 Кбайт) Вы можете выкачать его и почитать. Так же в INF файле есть ссылка на драйвер Microsoft USBSER. Для установки используйте драйвера, соответствующие вашей ОС.
Функционал USB чрезвычайно богатый, но это порождает проблему — разобраться не так просто, как с последовательным интерфейсом. Есть отдельный класс устройств — USB- HID, которые не требуют установки драйверов, специально предназначены для взаимодействия с человеком и различными устройствами ввода- вывода. Идеально для организации обмена данными с МК. Лично мне нравится пакетный режим обмена.
- USB CDC класс предлагает простой интерфейс для отображения параметров зарядки. В программе используется внутренний генератор и тактовый сигнал используется без тел.
- Так как для демонстрации процесса написания драйвера USB.
- В нашем случае используется кварцевый генератор на 8МГц и МК режимы работы — вроде USB bulk, но там уже без драйверов не.
- Если у тебя Windows Xp, то нужно драйвер, на свой навигатор. На запрос имени драйвера вводим 232usb.dll, ждём пару секунд.
- Драйвер режима виртуального COM-порта для дисплея покупателя LPOS-VFD-USB.
- Вот кстати страница драйвера Motorola CDC Driver for Windows XP and. Motorola Scanner USB CDC Driver для Windows 7 64-bit. USBCDC.INF USBCDCRAW.INF у вас их не сохранилось?
Это удобная абстракция. К тому же разбирать пакетные сообщения несколько проще и удобнее, чем работать с простым потоком байт. Выбор профиля HID.
USB- HID — довольно обширный класс устройств, поэтому прежде всего придется выбрать какое именно устройство мы будем создавать. Это дает максимальную свободу. Чтобы не затягивать статью, постарюсь рассказать максимально кратко — описаний стандарта в сети и без меня много, но лично мне они слабо помогли, когда понадобилось решить конкретную задачу.
Структура проекта. Я использую Em. Blocks для разработки под STM3. Вы можете использовать любую удобную среду, проект не очень сложно адаптировать. Далеко не все частоты позволяют правильно задать тактирование USB. В нашем случае используется кварцевый генератор на 8. МГц и МК работает на частоте 7.
МГц, а USB модуль на 4. МГц. Если временно нужно отключить для отладки работу с USB, просто закомментируйте эту строку.
Если все сработало верно и устройство успешно подключилось, ПК включен и не находится в режиме энергосбережения, то состояние будет CONFIGURED. Поэтому при подготовке USB дескриптора нашего устройства, мы пишем, как часто нужно опрашивать наше устройство. По спецификации максимальная частота опроса — 1к. Гц и максимальный размер передаваемого за раз пакета — 6. Если этого недостаточно — придется использовать другие режимы работы — вроде USB bulk, но там уже без драйверов не обойтись.
В данном случае - Device descriptor. USB - какую версию стандарта USB поддерживает устройство. USB. У нас нули, означает каждый интерфейс сам за себя. Device. Class. 0x. Device. Sub. Class. Device. Protocol. Max. Packet. Size - максимальный размер пакетов для Endpoint 0 (при конфигурировании).
VID и PID, по которым и определяется, что же это за устройство. Обратите внимание на DEVICE.
Проект так настроен, чтобы при ее изменении менялись и размеры буферов. Но не забывайте, что больше 0x. С этой константой будьте осторожны — если передаваемый пакет будет отличаться по размеру — будут проблемы! Для нашего устройства задано 3.
Дескриптор репорта (описывает протокол)const uint. Его формирование — не самая простая задача. Если допустить ошибку при формировании дескриптора — устройство перестанет работать. Формат дескриптора очень жесткий. Есть даже специальная утилита HID Descriptor tool. А в корне проекта лежит файл «RHID. Но если вы не понимаете, что делаете, лучше не лезть.
Пакетов может быть весьма много, их можно предусмотреть на все случаи жизни — например пакет с данными о каких- то событиях в устройстве, пакет с данными, которые запрашивал ПК, пакет с командой для МК. Но структура всех пакетов должна быть описана в структуре RHID. Содержит поле размером 1 бит с желаемым состоянием светодиода и поддерживает отправку как методом SET. Просто, чтобы показать, как передать данные МК. Мы будем передавать положение ползунка.
REPORT. Возвращает информацию о текущем состоянии светодиодов, кнопок (если они есть) и возвращает переданный в репорте с ID=3 байт, чтобы показать, что данные приняты. Остальные репорты можно просто не трогать, они не помешают. Не забывайте, что первым байтом должен быть ID репорта. Цикл обмена. Итак, мы сконфигурировали наше устройство, установив PID, VID, номер версии, настроили размеры входящих и исходящих пакетов и готовы к работе. Это важно — если размер буфера будет отличаться — будут проблемы. Поэтому для изменения размеров буфера редактируйте значение константы в usb. Это некоторая абстракция, для красивого управления устройством с кучей функций, чтобы можно было вызывать осмысленные функции, а не просто слать поток байт.
Второй способ — это работа с устройством как с файлом — просто записываем в него пакет как в файл. Этот метод называется SET. На деле работает чуть- чуть медленнее. Наше устройство поддерживает оба метода, о чем мы и сказали хосту в дескрипторе репортов. Обработка SET. Их состояние отображает текущее состояние девайса. Считывается из репорта от девайса.
Перемещая ползунок, мы отправляем Report с ID=3 и значением, соответствующим позиции ползунка. Девайс вернет это значение в 4 байте репорта. В выпадающем комбобоксе отображаются HID девайсы, найденные в системе и если найден наш девайс, то отображается его название.
Скачать все, что необходимо, можно на Git. Hub. В составе: DT — HID Descriptor tooltst. HID- STM3. 2F1. 03 — проект для Em. Blocks. USB HID Demonstrator — утилита от ST Microelectronics.
HIDSTM3. 2. exe — моя демо- софтинка на Delphi аналогичного фукнционала, но не требующая настройки. Если остались вопросы — пишите в комментариях. Я постарался не утопить суть в куче мелочей, чтобы сложилось общее понимание. Остальное уже можно понять, изучая проект. Но если вам нужно быстро сделать свое устройство, а лезть в дебри некогда — все, что вам нужно, я описал. P. S. По умолчанию при уходе хоста в режим энергосбережения, девайс засыпает вместе с ним, а если подключить девайс к спящему ПК, то он тоже уйдет в слип. Поэтому если мы просто воткнем в девайс блок питания или запитаем от батареи, то работать он не будет, считая, что подключен к спящему ПК (пакетов конфигурации то от БП не придет точно).
Я изменил библиотеку так, чтобы устройство работало и при подключении просто БП. Поэтому девайс будет работать как при подключениии к ПК так и автономно.
AVR- USB- MEGA1. 6, V- USB, FAQ: переписка по вопросам программирования . Сам я программист самоучка, пишу на C# (по десятибалльной шкале оцениваю свои навыки на 7,5). Обращаюсь к вам вот с каким вопросом - с чего мне начать? Какая литература, железяки, что мне надо знать, приобрести, чтобы оборудовать дома мини- лабораторию для начала моих экспериментов? У меня есть: комп (без COM порта) - 2 шт., среда разработки C# - VS2. LED Cube 8x. 8x. 8 - 1 шт. С чего начать программировать USB- устройства, зная C#?
И вообще что- то делать мигающее и красивое? Имхо, протокол USB настолько сложен, что у нас нет другого выхода, как найти готовые решения, и начать их использовать. Сам я не шибко крутой специалист, поэтому знаю ответ на этот вопрос только с одной стороны. Другими словами, я знаю только один вариант ответа, хотя наверняка есть и другие.
Для C# есть бесплатная обертка над Windows API для устройств USB HID, . Если вобьете с гугле эту фразу, то без труда найдете ссылки на закачку этой библиотеки, а также примеры кода. Эта обертка на C# позволяет управлять только USB HID. Остальные классы USB устройств управляются по- другому. Для Вашей цели и для Вашей квалификации удобен именно USB HID, так как для него не нужно писать драйвер для операционной системы, и для него есть вышеуказанная обертка.
Кроме того, Вы можете использовать класс USB CDC (виртуальный COM- порт), для этого класса вообще никакие библиотеки не нужны, весь обмен делается так же, как с обычным файлом. Кроме того, для ПО хоста есть еще класс- обертка C# Сергея Кухтецкого, у которой есть свои преимущества и недостатки. Описывать подробности я здесь не буду, потому что ответ и так получается слишком обширным - сами нагуглите нужную инфу при желании.
Работает эта обертка только с микроконтроллерами ATmega. ATmega. 32. Скажу только коротко - для обертки есть сопряженные примеры ПО хоста и firmware (т. Большой минус в том, что из- за большой загрузки микроконтроллера протоколом USB нельзя делать быстродействующие устройства, т. Теперь осталось определиться, на чем же программировать сами USB- устройства. К сожалению, на C# никаких готовых решений я не знаю.
Все известные мне решения для микроконтроллеров используют исключительно ANSI C. Поэтому либо Вам нужно брать уже готовые прошивки firmware, либо все- таки разбираться с программированием на C. Предупреждаю сразу - устройство типа LED cube на микроконтроллере, если Вы не научитесь программировать на C, Вы скорее всего никогда не сделаете.
Поэтому другого выхода нет, нужно осваивать язык C. Не все так страшно, как может показаться на первый взгляд, так как язык C во многом похож на C#, и при желании Вы разберетесь. Поэтому Вам остается выбрать только аппаратную платформу (микроконтроллер), на котором Вы будете ваять свои USB- устройства, которые будут делать что- то типа LED cube. Итак, какой же взять микроконтроллер?
Решений для реализаций USB- устройств сейчас очень много. Но так как Вы новичок, и четко поставленной задачи у Вас нет, то нужно выбирать именно ту платформу, по которой легче всего найти подсказку и нужную инфу в Интернете - готовые примеры кода, уже реализованные проекты, справочная информация на русском языке, не очень дорогие и понятные средства написания программ и отладки и т. По этой позиции микроконтроллеры от компании Atmel занимают лидирующее положение на рынке, и самая дружелюбная для новичка платформа - это Atmel AVR USB. Так что выбор ограничивается теперь только выбором микроконтроллера AVR. Чтобы сделать что- то похожее на LED cube, Вам нужен микроконтроллер с аппаратной поддержкой USB, и подключенные к этому микроконтроллеру через SPI расширители портов (потому что ножек портов у самого микроконтроллера может не хватить). Пример схемы такого устройства можете найти тут - http: //code.
Lightpack. Making . В данном примере подключено только 2 расширителя потов, но их можно подключить в принципе любое количество. В схеме применен также микроконтроллер AT9. USB1. 62, однако можно выбрать любой микроконтроллер, если Вам это надо. В данном примере используется USB HID, однако Вы можете прошить в кристалл AT9. USB1. 62 firmware, реализующее класс USB CDC (это виртуальный COM- порт).
С этим классом работа в C# довольно тривиальна - тупо как с файлом, т. Для микроконтроллера AT9. USB1. 62 по минимуму никакой программатор не нужен - программа для микроконтроллера просто перезаливается через интерфейс USB (практически неограниченное количество раз).
Если войдете во вкус программирования для микроконтроллеров, то потом Вам лучше всего купить аппаратный отладчик (для полноценной отладки программы по- взрослому) - AVR Dragon. Он тоже довольно недорогой, и его можно заказать и купить.
Есть еще платформа AVR Arduino, тоже хорошая для новичка, но я про неё знаю совсем мало, и поэтому ничего советовать не буду. Лично мне эта платформа не нравится, потому что она, хоть и проста для новичка, но построена по принципу . Или Лайтпак http: //code. Lightpack. Making, или вот эту платку - http: //microsin.
AVR/avr- usb. 16. Еще раз повторюсь - для начала никаких программаторов не нужно, нужна просто отладочная плата с микроконтроллером AVR USB. Эта плата уже позволяет записывать и перезаписывать в себя любые программы прямо через интерфейс USB. Вот список утилит, программ и библиотек, которые надо скачать, установить и научиться пользоваться: 1.
AVR Studio последней версии. Это среда разработки для микроконтроллеров AVR, см. Flip, это программулина, которая прошивает AT9. USB1. 62 (и другие AVR USB микроконтроллеры) через USB, см. Win. AVR - это пакет GNU библиотек и программ (AVR GCC, make), которые понадобятся для компиляции многих готовых проектов firmware для микроконтроллеров AVR. LUFA - библиотека для USB- устройств на микроконтроллеров USB AVR. Множество готового кода для большого количества различных устройств USB.
Lib. USB - желательно, но необязательно. Это библиотека для написания ПО хоста.
Можно как DLL использовать с любыми языками, в том числе и с языком C#. Вот список литературы: http: //microsin. AVR/avr- books. html . Из этого списка начать можно с цикла статей .
В частности касательно Lib. USB, то для неё есть 6. Просмотрите также статью, посвященную работе с макетной платой под Windows 8.