Недавно разгребал папки на Dropbox и наткнулся на свои первые поделки. Когда делал первые шаги с микроконтроллерами, почти сразу меня стали посещать мысли и идеи об управлении моими поделками с ПК, либо каким-либо образом с этим самым ПК общаться. Это казалось увлекательным и «серьезным». Сейчас я стараюсь все сразу тестировать в железе, но в начале наступать на грабли и стрелять себе в ногу хотелось безболезненно и быстро. В этом мне неизменно помогал Proteus. Десятки раз пересобирая проекты было важно, чтобы можно было экспериментировать с комфортом, если так можно сказать. Это потом я уже купил фирменную отладку и что в Proteus, что в железе — все стало одинаково быстро.
В первую очередь мне хотелось попробовать UART и USB, а потом уже и Ethernet. Каждому желанию я придумывал свой «проект». Многие идеи так и остались в виде проекта для Proteus — идея надоедала сразу после реализации программной части.
Надеюсь, данный пост поможет всем, кто хотел попробовать сделать свое USB устройство или просто увидеть, что это все не так сложно; более того, мне хотелось, чтобы можно было попробовать сразу в симуляторе. Рассказать как новичок для новичка — чтобы захотелось открыть гугл и начать читать, чтобы сделать больше, узнать лучше.
Я не буду рассказывать о регистрах, режимах. Я сомневаюсь, что это поможет зажечь огонь в глазах. Возможно, кто-то захочет сделать что-то полезное для себя и у простых примеров больше шансов затянуть в это крайне увлекательное творчество (а для меня уже практически наркотик). А прежде чем бежать на ebay или начинать считать дни с момента отправки отладочной платы из Китая, можно попробовать свои силы в виртуальном микроконтроллере.
Я хотел бы попробовать сделать два своеобразных hello world проекта, которые, тем ни менее, не сильно сложнее стандартного LED blinking. Под катом много изображений.
Читать полностью »
Рубрика «usb» - 16
Proteus и два с половиной hello world для UART и USB на микроконтроллере
2013-12-16 в 13:49, admin, рубрики: diy или сделай сам, ethernet, pic, RS232, usb, Программинг микроконтроллеров, метки: c++, ethernet, pic, RS232, usbЧтение данных с весов Mettler Toledo PS60
2013-12-10 в 6:44, admin, рубрики: .net, HID, scale, usb, Visual Basic .NET, метки: HID, scale, usb, Visual Basic .NET Не так давно выиграл проект на Elance — сделать простое WinForms приложение на Visual Basic, которое будет отображать данные с весов Mettler Toledo PS60.
К счастью, данные весы являются HID-устройством, подключаемом по USB.
В этом посте я опишу как работать с подобными HID устройствами в Visual Basic (да и вообще в .Net)
В следующем году появится новый USB-интерфейс, и его можно будет вставлять любой стороной
2013-12-05 в 3:34, admin, рубрики: lightning, usb, Железо, интерфейсы, метки: lightning, usbАльянс USB 3.0 Promoter group анонсировал появление в середине следующего года новой спецификации USB Type-С. Из ключевых особенностей:
— Можно подключать любой из сторон (наконец то! и привет Lightning)
— Меньший размер (сопоставим с MicroUSB)
— Маштабируемая зарядка (насколько я понимаю, шина сама будет определять потребный устройству ток, и регулировать напряжение)
И да, самое главное: новый разъем не будет совместим с существующим. Картинок, извините, не будет – его дизайн еще не нарисован.
Мониторинг температуры гермозоны с помощью 1-wire датчиков и Zabbix 2
2013-12-02 в 19:28, admin, рубрики: 1-wire, diy или сделай сам, DS18B20, usb, zabbix, ит-инфраструктура, Серверное администрирование, метки: 1-wire, DS18B20, monitoring, usb, zabbix 
Имеем в наличии гермозону на 4 ряда с 16-тью открытыми стойками в каждом ряду.
Схема кондиционирования: горячие-холодные коридоры, внутренние кондиционеры с внешними испарителями, 3 кондиционера на ряд, то есть 6 кондиционеров на холодный коридор.
Задача: построить систему мониторинга температуры гермозоны с возможностью предупреждения выхода кондиционеров из строя.
Для решения данной задачи решено было использовать сеть 1-wire температурных датчиков и систему мониторинга Zabbix 2.
Читать полностью »
Поддержка USB в KolibriOS: что внутри? Часть 6: драйвер хабов
2013-11-28 в 20:38, admin, рубрики: kolibrios, usb, Блог компании KolibriOS Project Team, колибри, операционные системы, метки: kolibrios, usb, колибри
Последняя часть инфраструктуры USB — хабы. Хотя хабы — отдельные USB-устройства, они достаточно тесно связаны с другими частями инфраструктуры, чтобы спецификация хабов была частью основной спецификации USB, а код поддержки — частью ядра, расположенной в файле bus/usb/hub.inc.
Задачи хабов таковы.
- Хабы предоставляют питание всем подключённым устройствам.
- Хабы оповещают хост о подключении и отключении устройств.
- Хабы делают сброс подключённого устройства, попутно определяя его скорость, по команде с хоста.
- Хабы транслируют весь трафик, приходящий от хоста, подключённым устройствам в период после сброса и до отключения, а также трафик от устройств в обратную сторону.
- HighSpeed-хабы содержат Transaction Translator, связывающий HighSpeed-шину с низкоскоростной USB1-шиной.
Трансляция трафика без переключения скорости происходит полностью прозрачно для хоста. Расщеплёнными транзакциями занимается хост-контроллер EHCI, здесь от софта важно только заполнить те поля в аппаратной части структуры канала, которые содержат адрес TT-хаба и порт в TT-хабе — и, разумеется, учитывать время транзакций при планировании. Драйвер хабов управляет остальными пунктами списка задач.

Хабы имеют код класса устройства 9, код подкласса устройства 0 и три варианта 0, 1, 2 для кода протокола. Согласно спецификации USB, HighSpeed-хаб обязан поддерживать режим работы с единым TT для всех своих портов, и дополнительно может, но не обязан, поддерживать режим работы с отдельным TT для каждого порта. Типичный случай — режим с различными TT отсутствует, тогда код протокола равен 0. В случае поддержки такого режима в данных конфигурации должны быть два варианта дескриптора интерфейса с одинаковым номером интерфейса. Тогда код протокола 1 идентифицирует режим с единым TT, который должен быть принят по умолчанию, а код протокола 2 — режим с различными TT, включаемый командой SET_INTERFACE. Существование в живой природе хабов, поддерживающих режим с различными TT, не подтверждено, как и польза от этого режима, поэтому драйвер хабов даже не пытается его обнаружить и включить и просто использует режим единого TT, включённый по умолчанию.
Обнаружив интерфейс класса 9, уровень логического устройства читает структуру usb_hub_callbacks, содержащую указатели на функции драйвера usb_hub_init и usb_hub_disconnect. Работа драйвера начинается, когда уровень логического устройства вызывает usb_hub_init, и заканчивается, когда уровень поддержки каналов вызывает usb_hub_disconnect в ответ на отключение устройства.
Читать полностью »
USB Power Delivery — новый стандарт, который заменит розетки
2013-11-01 в 14:22, admin, рубрики: usb, ит-инфраструктура, технология, метки: usb, технология
"
Сейчас в современном мире информационных технологий без USB-кабеля просто не обойтись. Только представьте себе, как стало проще заряжать необходимые мобильные устройства, когда есть единый стандарт. В будущем планируется создать интерфейс, который использовался бы для питания более мощных, чем смартфоны и планшеты, устройств. USB Power Delivery – вот та технология, которую сейчас разрабатывают для обеспечения нужд всего человечества. Читать полностью »
Вскоре ноутбуки смогут использовать для зарядки USB-порты
2013-10-29 в 11:30, admin, рубрики: IT-стандарты, usb, ит-инфраструктура, ноутбук, метки: usb, ноутбук 
Появившаяся в Интернете информация указывает на то, что скоро можно будет зарядить ноутбуки через порты USB.
Что лежит в основе этого революционного решения?
Организация по стандартизации USB против Open Source
2013-10-22 в 15:15, admin, рубрики: open source, usb, Железо, метки: usb
Одной из главных проблем для любителей и мелких компаний, занимающихся продажей «железок» с USB-портом, сегодня является USB Implementers Forum (USB-IF) — организация, занимающаяся разработкой спецификаций на шину USB; в ней принимают участие такие компании, как Intel, Microsoft и Hewlett-Packard.
Суть этой проблемы в следующем. Каждое продающееся устройство с USB требует сертификации на соответствие требованиям USB, для чего ему необходимо иметь ID вендора (vendor ID, VID) и ID изделия (product ID, PID). Крупные игроки любительского рынка — вроде Sparkfun или Adafruit — давно заплатили USB-IF за получение USB VID; вся беда в том, что и любому умельцу, смастерившему в своем гараже устройство с USB и надеющемуся продавать его — пусть и продастся от силы десяток-сотня штук — тоже приходится оплачивать его получение.
В качестве решения этой проблемы компания Arachnid Labs предложила интересную мысль: поскольку отдельные производители USB-устройств (вроде Microchip или FTDI) раздают некоторое количество своих USB PID бесплатно, можно было бы создать собственную некоммерческую организацию, которая бы купила один VID и раздавала PID своим участникам, занимающимся разработкой открытого аппаратного обеспечения. В результате, множество устройств, изготовленных любителями, получили бы статус USB-совместимых.
Читать полностью »
Настройка e-mu 0204 usb в ubuntu GNU/linux
2013-09-20 в 16:58, admin, рубрики: linux, pulseaudio, skype, usb, windows, Работа со звуком, щелчки, метки: linux, pulseaudio, skype, usb, windows, щелчки Пару дней назад купил я себе внешнюю звуковую карту e-mu 0204. Купил с рук, за 2 т.р. Владелец был счастлив, я то же. Оба думали, что надули друг друга. Стоит железка в магазине 4,5 т.р. Принес домой подрубил, звук сказочный. Но, обнаружился косяк. В непредсказуемые моменты времени слышны были тихие пощелкивания и перерывы звука. У меня отличные наушники ATH-SJ55. Соответствуют карточке по уровню, непонятно почему это вдруг началось. Разбираемся как исправить.
Читать полностью »
Поддержка USB в KolibriOS: что внутри? Часть 4: уровень поддержки каналов
2013-07-18 в 16:18, admin, рубрики: kolibrios, usb, Блог компании KolibriOS Project Team, колибри, операционные системы, метки: kolibrios, usb, колибри
Рассказ об уровне взаимодействия с хост-контроллерами растянулся на две статьи и всё равно оставил за кадром некоторые детали — которые, как я надеюсь, заинтересованный читатель может восполнить непосредственно из исходников. Уровень поддержки каналов куда проще и в основном занят тем, что преобразует вызовы API для вышележащих уровней в нужную последовательность действий, включая блокировки, с нужным хост-контроллером.
Открытие канала
Функция USBOpenPipe из API, названная usb_open_pipe в коде pipe.inc, открывает новый канал по указанным характеристикам канала и «родительскому» каналу, где записаны характеристики устройства. Для этого она:
- выделяет пару структур
*hci_pipe+usb_pipe, описывающих канал и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функцииusb_hardware_func.AllocPipe; - выделяет пару структур
*hci_gtd+usb_gtd, описывающих пустой дескриптор передачи и выравненных на контроллеро-специфичную границу, вызовом контроллеро-специфичной функцииusb_hardware_func.AllocTD; - заполняет указатели: в структуре канала копирует указатель на структуру контроллера и указатель на данные устройства, общие для всех каналов, из «родительского» канала; между структурой канала и структурой пустого дескриптора заполняет указатели туда-обратно; структуру пустого дескриптора делает единственным элементом двусвязного списка каналов;
- инициализирует мьютекс, который будет охранять все операции с этим каналом. Хотя вся обработка событий от USB-контроллеров происходит в потоке USB, про обращения к API нельзя сказать того же: чтение приложением файла с USB-флешки инициирует постановку передачи — и даже не одной — в очередь в контексте потока приложения. Чтобы новая передача не мешала USB-потоку обрабатывать завершение старой передачи, и нужен этот мьютекс;
- захватывает мьютекс набора каналов устройства и убеждается, что устройство ещё не отключено;
- вызывает контроллеро-специфичную инициализацию
usb_hardware_func.InitPipe, охраняемую мьютексом, глобальным для контроллера; - добавляет новый канал в набор каналов устройства и отпускает мьютекс набора каналов;
- при ошибке на одном из этапов откатывает все предыдущие этапы. Поскольку откатить контроллеро-специфичную инициализацию сложнее всего, она сделана на последнем этапе, после которого ошибок быть не может.
Контроллеро-специфичная инициализация последним действием добавляет новый канал в соответствующий список. Для управляющих каналов, равно как и для каналов массивов данных, есть всего один список, а вот для каналов прерываний нужно ещё выбрать один из нескольких вариантов.

Здесь в игру вступает планировщик scheduler.inc. Он как раз и выбирает один из списков каналов прерываний, а также убеждается, что для нового канала «достаточно места». Я напомню, что в каждом фрейме FullSpeed-шины под периодические передачи нельзя использовать более 90% времени, а в каждом микрофрейме HighSpeed-шины — более 80% времени.
Здесь я должна отметить, что если вы зачем-то пишете реализацию USB, которая должна работать в ваших условиях, на планировщике можно серьёзно сэкономить. Вам придётся в том или ином виде реализовать всё остальное, что описано в этой серии статей, но при отсутствии большой нагрузки можно вместо полного дерева обойтись всего одним списком каналов прерываний, обрабатываемым каждый фрейм/микрофрейм. Чуть более экономная схема, не слишком усложняющая реализацию, — один список каналов для каждого интервала обработки 1, 2, 4, 8, 16, 32 фреймов. Пока не нужно одновременно обрабатывать более одного устройства с большим трафиком на один хост-контроллер, такой подход ничем не уступает полноценному планировщику. Простая схема «сломается» в некоторых специфичных конфигурациях с двумя или более изохронными каналами FullSpeed-устройств или тремя или более изохронными каналами HighSpeed-устройств, но, быть может, никто и не будет запускать вашу реализацию в столь специфичных условиях?
Если же вы пишете реализацию USB, которая должна работать везде и всегда, планировщик вам тоже придётся написать.
Читать полностью »
