Pull to refresh

Comments 109

Скажите, пожалуйста, могут ли смартфоны могут выступать в качестве хоста USB? Какие в этом плане есть ли различия между существующими аппаратным и программными платформам?
Смогут и уже выступают, но на контакт Vbus должно подаваться напряжение.
Вы имеете ввиду внешнее по отношению к телефону?
Для того что бы они могли выступать в качестве хоста у них должен быть чип хостовый либо OTG(и хост и девайс).
Кто-нибудь может раскрыть роли контроллера USB, ОС и драйвера в плане взаимодействия хоста с периферийным устройством?
Я немного знаком с разработкой USB устройств. Но вопроса не понял, можешь сформулировать подробнее/иначе?
У меня на материнке стоит интеловский контроллер USB. Как я понимаю, он считывает дескрипторы устройств, и обменивается с ними данными на аппаратном уровне, каким то образом говорит ОС о подключении и отключении устройств. Уберите лишнее / добавьте / уточните.
Что делает, например, стандартный драйвер HID в винде?
Прошу прощения за нубские вопросы, но хочется составить общее представление, без чтения книг и руководств — пока подробные знания не нужны.
А это прикол такой в своей статье задавать вопросы в комментах, по диаграмке которую сюда запомтили? Кажется на Ваш вопрос есть ответ в википедии про хид. Английской.
Там подробнее описаны савременные юсб контролеры, и написано что современные контролеры часто сами обрабатывают хид устройства, что дает возможность например клаву юсб в биосе юзать…
Ну, я не все понимаю. Про то что, не понимаю старался не писать. А вопросы — попытка разобраться по-быстрому.
HID это только прослойка между основным драйвером USB контроллера и юзерспэйсом, hid драйвер подгружается в соответствии с vid pid устройства который воткнули в разьем. Можно посмотреть что происходит на порту когда втыкается устройство воспользовавшись wireshark.
Конкретизируйте свой вопрос.
Темя интересная но явно не для Хабра
UFO just landed and posted this here
К сожалению, да. По крайней мере, то что Хабр не осилит посты про разработку embedded (сам думал о статьях по работе с FPGA) это точно. Посты-ссылки пойдут конечно, но на главную они не попадут — проверил на собственной шкуре.
UFO just landed and posted this here
Вы посты для главной что ли пишите? Мне вот очень интересно будет почитать про embedded. Напишите пожалуйста.
>сам думал о статьях по работе с FPGA

Вот и напиши, если конечно пишешь для того, чтобы другим интересно было, а не только ради плюсиков. Да и самого себя это может простимулировать в нужную сторону.
Ну я итак предостаточно писал в своё время :)
Потому и спрашиваю: прошёлся по вашим статьям, ни одной про embedded разработку.
очень внимательно просмотрел что Вы написали, кроме .NET и пару статей про шрифты я не нашел, ничего про embedded устройства не нашел.
Да, пока не писал. Я все еще в раздумьях на тему того, стоит ли.
ну а зачем тогда утвержать, что тема будет не интересна на хабре?
Особенно принимая в внимание вот эти Ваши слова:
>>. По крайней мере, то что Хабр не осилит посты про разработку embedded (сам думал о
>>статьях по работе с FPGA) это точно. Посты-ссылки пойдут конечно, но на главную они
>>не попадут — проверил на собственной шкуре.

видимо Вы таки не проверяли а предполагали, и предположения оказались неверными, по крайней мере судя по рейтингу этой статьи — люди очень интересуются тематикой встраиваемых систем
Нет, я проверял на примере собственных постов. Да, они не по embedded-тематике, но на главную они попадают редко. Особенно сейчас, когда я начал постить лишь ссылки вместо полноценных статей.
Ну, как по мне тема не то чтобы была расскрыта. Рассмотрен очень часный случай, хид устройства. Это как бы тут работа с юсб вообще непричем. Это работа с хид, которая простая как 2 пальца, и только в одну сторону.
А, зато раскрыт вопрос цены, так что чем не маркетинг :)
Скорее малоосвещённая. Впрочем, мы сейчас увидим — интересная или нет.
А мне интересно, и я хочу что бы TimurGilfanov продолжал писать именно на Хабре!
Я тож не против, в принципе.
С моей скоростью ждите через полгода.
А если серьезно, то спасибо за проявленный интерес, это здорово поддерживает. Будет тема — напишу.
Да уж, vid/pid покупать за 2 килобакса. В нашей бомжской стране их дешевле убить будет.
UFO just landed and posted this here
Да по большому счёту для немассового устройства пару VID:PID можно выдумать. Вероятность конфликта очень низкая.
У организации, которая продает эти самые VID/PID, есть специальные БЕСПЛАТНЫЕ VID и PID, предназначенные для науки, самообразования, радиолюбительства. То есть, если Вы не планируете выпускать свою разработку в широкую коммерческую продажу (так, например, может быть для случая мелкосерийного выпуска оборудования для собственных нужд завода), то для Вас нет никакой необходимости в покупке VID и PID.
А почему был выбран интерфейс USB, а не RS-232 или RS-485, если это устройство для промышленности?
Планируется ставить в цех нетбук в качестве панели оператора с подключенными к нему датчиками. Не знаю что из этого выйдет (боимся, что грязно, ломают и воруют), но так получается дешевле и проще, чем делать специальный прибор: корпус, дисплей, клава, контроль за всем эти добром через МК. Свободы и возможностей опять таки в варианте с нетбуком значительно больше.
Такой проект у нас первый, так что если у кого есть опыт установки ноутбуков и нетбуков в цех к станкам, отпишитесь, пожалуйста.
В действительности можна исспользовать USBUART, но мы при разработке почти полностью от последовательного порта отказались, да и материнок с выведенными потрами всё меньше, интефейс с ПК только USB, в железе типично I2C/SPI.
Ну, RS232-USB конвертеров еще никто не отменял. Сами регулярно используем для разработки.
Виртуальный USB COM-порт (не важно, каким образом он реализован — или на «дорогом отдельном» чипе FTDI, или на дешевом народном V-USB) для низкоскоростного обмена удобнее USB HID как минимум по причинам:

1. Большой выбор вариантов для аппаратной реализации. Готовые примеры с исходниками, которые можно взять за основу, в обилии (если нужно, дам ссылки).
2. Отсутствует специальная необходимость в ПО хоста, то есть не надо писать программу для компьютера, чтобы наладить обмен с Вашим USB-устройством. Достаточно воспользоваться готовой консольной программой (их понаписана туева хуча — SecureCRT, terraterm, HyperTerminal) или даже встроенными средствами операционной системы (тупая команда copy). Система АВТОМАТИЧЕСКИ становится кроссплатформенной (будет работать на любой операционной системе).
3. Если все же (почему-то) нужно написать программу на компьютере, то для программиста совершенно не нужно разбираться в тоностях вызова функций HID.dll (Microsoft), libusb (Open Source/GPL), AtUsbHid.dll (Atmel) или какой-то еще (как люди любят придумывать для программистов новый геморрой...), чтобы научиться организовывать обмен поверх протокола USB. Программист может просто взять уже готовые наработки по COM-порту, и применить их для обмена с USB-устройством, не вникая в подвыпедверты протокола USB.
Насчёт нетбука в цеху. Если удорожание в три-четыре раза приемлемо, гляньте в сторону грязе/водо/ударо-защитных планшетников. Если сама идея заинтересует, узнаю у человека, который их использовал в своих разработках и дам линки/контакты.

Нетбук для цеха достаточно хлюпкое создание, на мой взгляд (и многие знакомые подобные ситуации решались НЕ при помощи стандартных PC — не важно настольных или нет). Но своё разрабатывать, разумеется, не стоит.
В 3-4 раза это много для нас. Аналог нашего прибора в стандартном пластиковом корпусе и двухстрочным знакосинтезирующим дисплеем стоит 15 — 18 тысяч. Какие другие решения можно применить для подобных условий?
Одноплатный компьютер с графическим дисплеем и линуксом на борту в стандартном защищенном корпусе? Боюсь, что 20 будет себестоимостью в лучшем случае.
А контакты и линки, если не сложно, скиньте.
Если грязное производство с использованием химии, готовьтесь к тому, что буки придется менять раз в полгода-год. Посмотрите в сторону промсистем с отводом тепла через корпус.
Думаете проблема теплоотвода может стать острой? Вроде на сталеплавильные цеха не рассчитываем.
я так понимаю, Kolegg имел в виду проблему с пылью/агрессивной химией. естественно что при активном охлаждении через внутренности проходит больше воздуха, т.е. больше гадости попадает внутрь.
В одной конторе, активно пользовались помывочной химией, комп меняли раз в год, клавы-мыши — раз в 2 месяца (это при том, что клава была закутана в полиэтилен).
В бытность мою системным инженером на одном из мясоперерабатывающих комбинатов там передачи данных использовались тонкие клиенты, заключенные в металлический короб (2 мм сталь, внутри короба еще розетка, сетевой фильтр и куча проводов), намертво приваренный к стенке. Даже не потому, что грязно и все его бьют, а чтобы не уворовали. Так у одного такого короба вскрыли лючок и вытащили… Сетевой фильтр. Там же, в одном из цехов, вскрыли и растащили на запчасти древний-древний комп. И я бы поостерегся просто так ставить в цех нетбук… Даже если за территорию его не утащат, будет потом лежать и пылиться у кого-нибудь в тумбочке или раздевалке
UFO just landed and posted this here
потому что промышленность понемногу переходит на USB.
не спорю, что промышленность развивается, появляются новые интерфейсы и протоколы, в том числе и беспроводные, но про USB это громко сказано.
что тут громкого? промышленные устройства часто надо куда-то подключать. в компьютерах COM и LPT практически исчезли, вот и приходится переходить на USB.
покажите, пожалуйста, такое устройство, например у того же Siemens
вы думаете, я знаком со всем ассортиментом продукции Siemens? или вы просто где-то слышали, что Siemens тоже делает промышленные устройства?
Нет же, можете любого. Просто прошлым летом занимался программированием микроконтроллеров Siemens и ознакомился с их продукцией.
Как-то даже не изучал. Могу лишь привести наши устройства. opensys.com.ua/Diesel/All
пока что используют USB-COM
Спасибо за ссылку, интересно было почитать. Но все же ваша продукция для небольших предприятий. Прошлым летом проходил практику на предприятии, которое добывает калийные удобрения. Все микроконтроллеры, датчики, серверы, панели оператора, scada системы приобретаются у одного производителя. Все устройства соединены полевой шиной, передача осуществляется по протоколам modbus, profibus, hart. Даже переносные коммуникаторы имеют интерфейс rs-485.
разумеется, ведь USB на сотни метров не кинешь. Но к компу оно подключается возможно через USB-RS485 адаптер.
ух ты. оказывается USBasp реализован на V-USB, а я думал, что он сам по себе.
А то. Есть куча программаторов, клоны AVR910, PROTOSS — тоже на V-USB. Народ столько всего подаделал, диву даешься. Вот страничка с проектами на V-USB — Projects Based on V-USB. И почти все с исходниками, нахаляву!..
Увеличение габаритных размеров и цены. Да и контроллер с поддержкой USB было интересно освоить. А с ft232 мы программатор avr сделали для себя.
Полностью согласен, поэтому и молчу =)
UFO just landed and posted this here
Я был бы рад топикам про радиоканал, например про Bluetooth или wifi в embedded, про wifi конечно в большей степени потому как про него почти нигде ни слова нет.
Еще про ZigBee и другие способы беспроводной связи интересно почитать. Желательно с возможностью организовывать сети. ZigBee — это вроде промышленного аналога WiFi, как я понимаю.
Рекомендую рассмотреть Cypress PSoC1/PSoC3 www.cypress.com/?id=1353, готовый стэк USB, бесплатные среды разработки с С компиляторами. Со стороны ПК, вы сможете исспользовать готовые библиотеки Cypress SuiteUSB www.cypress.com/?rID=34870 (С++/COM/.NET).
Буферы в которые вы пишете/читаете в терминологии USB называются Endpoints.
Для работы с USB можна исспользовать 24-ую серию PSoC1, аналоговая реконфигурраямая часть, позволяет снимать данные с нескольких аналоговых/цифровых акселерометров без дополнительной обвязки(вы не сказали как будете считывать перемещение, поэтому предположил что это акселерометр).
Готовое приложение и описание работы с некоторыми акселерометрами можна найти в AN52678 www.cypress.com/?docID=15506 с конкретной моделлю можна работать по аналогии.
Смысла полностью менять платформу я не вижу, но ради интереса, скажите, сколько это удовольствие стоит в России?
Мы работаем с микромеховскими индуктивными датчиками. Не думаю, что встроенные акселерометры осилят измерение десятых микрометра.
В нашых чипах нет встроенных акселерометров. Если нужна работа с аналоговым сигналом, то PSoC1/PSoC3 обувают серьёзно микроконтролеры общего применения, за счёт возможности реконфигурации, он как аналоговая ПЛИС, но по любому нужно смотреть задачу. В описании не было детализировано что за перемещения, такие малые величины конечно что акселерометром не будеш замерять, да и не для этого он.
Насчёт цен в России, Фарнелл поставляет, хотя я привык брать на DigiKey:
ru.farnell.com/jsp/search/browse.jsp?N=500002+1004406&Ntk=gensearch_001&Ntt=Cypress+PSoC&Ntx=mode+matchallpartial
ru.farnell.com/jsp/search/browse.jsp?N=500002+1004574&Ntk=gensearch_001&Ntt=Cypress+PSoC&Ntx=mode+matchallpartial
P.S. libusb32 когда я смотрел последний раз на него был довольно кривой закинутой поделкой, который при определённых условиях вызывал BSoD, для работы с HID рекомендую присмотреться к WinUSB, Майкрософт сделала его бекпорт на Windows XP SP3.
Вы имеет ввиду LibUsb-Win32? Да, старенькая заброшенная вещь, как я понимаю. Я её скорее для кучи привел, больно часто она мне на глаза попадалась.
Более интересен разрабатываемый виндовый бэкенд для libusb v1.0, который я сегодня подключил к приложению. По первому впечатлению — c HID вроде работает.
Да это заброшенным я имел ввиду LibUsb-Win32.
Подписаны ли драйвера виндового бэкенда для libusb v1.0. Судя по TODO они без работы не будут сидеть, да и будто развиваются. Для моих проэктов пока замало функционала. А с отсутствием hotplug detection это вообще пока безполезность. Надо будет посмотреть где-то через полгода.
Расскажите поподробней о реконфигурации.
У нас есть набор базовых блоков, PGA, DAC, ADC, OpAmp, аналоговые компараторы, блок для ёмкостных сенсоров и комутационная матрица, которая позволяет динамически менять схему соединения этих элементов.
Кроме-того есть также цифровые реконфигурируемые блоки. Всё вместе позволяет реализировать некоторые типы схемы обработки цыфрового/аналогового прямо в микросхеме обходясь без элементов обвязки.
Конечно схема не идеальна, всё имеет свою цену, супер-пупер прецизионные схемы не реализируешь(ну должны же для кого-то выпускаться ADC за 100$), не всё можно втиснуть в маленький PSoC1, но после выхода PSoC3 область применений существенно рассширилась.

Для одиночного разработчика плюс в более простой схеме конечного устройства. Для больших производителей это ещё и экономия на кажном экземпляре устройства от 15 центов до десятков долларов что серьёзно снижает себестоимость производства.
У нас есть огромная библиотека готовых применений вроде компаса www.cypress.com/?rID=2667 или мультиметра.
Недавно вышли PowerPSoC для управления силовой єлетроникой. Есть Cypress Truetouch ёмкостные контролеры, от мобилок до нетбуков, до 10 пальцев одновременно. Безпроводный CiFy, USB-контролеры. Ну и новые PSoC3/PSoC5 с более производительными ядрами(i8051/ARM Cortex-M3), более совершенной реконфигурируемой частью и безплатной средой(PSoC Creator) с Keil-ловским компилятором.
Есть и минусы платформа менее расспространена, русскоязычной комюнити по сути нет.
Для больших производителей экономия в себестоимости производства/функционал перевешивает недостатки, но в России таких производителей по сути нет, потому у нас очень большой потрфель в основном Азии/Северной Америке.
Надо добавить что V-USB(бывший AvrUSB, емнип) позволяет толком сделать только HID или CDC, при этом ресурсы среднего мк забивает почти полностью
Да, так и есть, V-USB подходит только для LowSpeed USB версии 1. На сайте разработчика так и написано. Но народ все равно голосует именно за эту платформу благодаря обилию и простоте примеров (как для firmware USB-устройства, так и ПО хоста, т. е. программы для компьютера).
Objective Development (разработчики V-USB) тоже предоставляют пары pid/vid в свободный доступ, см. их ридми.
В коммерческой лицензии эксклюзивный pid дают, но и 200 евро нам не лишние. Да и смысл в полностью программной реализации стека USB при наличии МК с аппаратной поддержкой для нас особого нет. GPL нам не подходит.
Спасибо за статейку, порадовал, побольше бы такого. Мне что нравится так это то, что человек делает это для реальной задачи из реальной жизни с настоящими железками, а не чем-то там выдуманным. Да и ещё делится с другими тем, в чём сам разобрался.
А как дела с win7-64???
Пришлось очень долго прыгать с бубном чтобы свое устройство со стандартными vid/pid от V-USB там работало.
Так как там нужно подписывать драйвера именно у MS, либо при каждой загрузке жать F8 и отключать проверку подписи драйверов…
Сколько интересно стоит у MS драйвера подписать???
По собственно разработанному драйверу я проконсультировать не могу — использую стандартный драйвер для HID. Разрабатываю в Win XP SP3 и Ubuntu 9.10 — там моё решение (Qt + libusb) работает. Пару месяцев назад проверял в Win 7 — 32 и Vista на amd64 — проблем не заметил. Правда, тогда я пользовался WinAPI.
Ну я так понял вы использовали LibUsb-Win32 для Windows, так вот он не работает на win7-64, просит подписанных драйверов, даже для hid устройств, т.к. они работают через LibUsb-Win32. Вот интересней посмотреть на «виндовый бэкенд для libusb v1.0» может там они уже что-нить придумали =)
Нет, я не использовал LibUsb-Win32. Мой выбор — «виндовый бэкенд для libusb v1.0».
Ну в итоге то для Windows рано или поздно надо будет подписывать драйвера, так же как и покупать vid/pid для своего устройства =(

windows.microsoft.com/ru-RU/windows-vista/What-is-a-signed-driver
Драйвер без подлинной цифровой подписи или измененный после нанесения цифровой подписи невозможно установить на 64-разрядных версиях Windows. В результате на 64-разрядных версиях Windows будет выводиться только это сообщение.

А как и по какой цене его подписать я чего то не нашел =/
Вот поэтому мне и нравиться использовать стандартный драйвер HID — ничего разрабатывать и подписывать не надо. Ну правда мне повезло, что он подходит для моей задачи.
ИМХО, класс CDC еще лучше.
Хотелось сделать фейспалм на словах «Предполагается, что у таких устройств небольшой объем передаваемой информации, как и у разрабатываемого устройства: пакеты по 8 байт с интервалом в 100-150 мс.». Вообще хюман интерфейс девайсы успешно справляются с значительно большими нагрузками. Ваша 80 б/с просто смешны даже с информацией которая от мыши в 300 dpi приходит. Безопасно передавать до 0.5 Мб/с, это прикидка с моего опыта, в теории можно больше (вплоть до скорости порта), но лучше не нужно.
Да, еще вроде не сказа что это только односторонняя связя. А так, все отлично, спасибо за статью )
Про одностороннюю: как я понимаю, вы имели ввиду, что есть мастер (хост) и есть слейв (устройство), и всем рулит мастер. Правда есть еще режим OTG, позволяющий двум устройствам меняться ролями, но это пока штука редкая.
В смысле, а какое отношение отг имеет к хид?
А можно подробнее об смене ролей, я что-торможу. Разве можно средствами хид это сделать?
HID не причём. Просто USB включает в себя спецификацию на такой вот интересный режим работы. Подробностей не знаю.
USB HID может обеспечить до 64 кбайт/сек, а это уже нехилая скорость. Размер максимального элементарного блока зависит от параметров конечной точки, и обычно не больше максимума аппаратного буфера чипа. Для микроконтроллера AT90USB162, например, это 64 байта.
А откуда верхняя планка для скорости?
Это определено в спецификации HID (Human Interface Device). Microsoft решила (и вполне справедливо), что обыкновенный человек, одновременно сучащий ручками/ножками, стуча лбом и даже кашляя и матерясь, не в состоянии сгенерить поток информации более 64 кбайта/сек.
Ну где?
При разгаворе о ограничениях «Device Class Definition for Human Interface Devices (HID)» в пункте 4.5 Device Limitations ссылается на Universal Serial Bus Specification, Chapter 5. Где ничего не сказано о ограничении в 64 кбайт/сек.
Единственное обяснения этого числа это то что возможно ХИД не может посылать пакеты чаще чем 1 мс (юсб-кадр), размером по 8-64 байта. Это почти 64 кБ/С… Хотя пруфа тоже нету.
Вы, наверное, по диагонали читали =). Все дело в том, что для HID разрешены только 2 режима работы — low-speed и high-speed. Нас интересует максимальная скорость, т. е. high-speed. Максимальный размер пакета для low-speed ограничен 8 байтами, а для high-speed — 64 байтами (извините, не я придумал). Один пакет разрешено передавать не чаще, чем 1 раз в 1 мс (это тоже умники — генераторы стандартов постарались). Дальше сами посчитаете? Сколько будет 64 байт *1000 мс?
ой, прошу прощения, Вы кажись сами доперли =)
В далеком 2001 году пробовал заводить какой-то Atmel'овский контроллер, но промучавшись с неделю плюнул и протянул все по LPT. Сейчас как вижу с этим намного проще.
Подскажите, где поситать про процес програмирования контроллеров. Например какое програмное обеспечение. Это все есть на сайтах производителя, но интересней бы было почитать про реальное использование. Типа как в этой статье.
Вы спрашиваете о том как прошить контроллер, то есть поместить в него программу, а не о том как эту программу написать, я ведь вас правильно понял? Вас интересует процесс вообще или какие-то конкретные контроллеры? Для контроллеров разных производителей обычно используются разные инструменты.
Я когда-то давно писал под PIC контроллеры, самопальным програматором (zx spectrum)? Писал на асемблере. Уже тогда были нормальные IDE для разработки. Вот мне и стало интересно какие IDE, программаторы сейчас используются. Но откровенно говоря, вопрос получился слишком общий. Чуть ниже мне ответили с вполне хорошей линкой. Она более или мение дает представление о сабже.
Последние 9 лет всё просто. Покупаете программатор, втыкаете в USB-порт. Соединяете программатор кабелем с целевой платой. На компе в оболочке программатора выбираете файл прошивки и нажимаете кнопку заливки.
На таком уровне я и сам бы мог ответить. Собно меня больше интерисовала конкретика. Как примеры: «оболочке программатора» — какая удобней, какие есть? «файл прошивки» — чем удобней компилить такие файлы? Я думаю ссылка из ответа следующего за вашим, ответит на некоторые вопросы.
123avr.com
хотя свёрстано это ужасно, но всё всё разжевано по шагам.
Спасибо, похоже это то что нужно.
Sign up to leave a comment.

Articles