Перейти к содержанию
    

USB интерфейс HID устройство со стороны микроконтроллера

С нуля... Вы мне льстите. Конечно я разбираю готовые проекты (Ваш и Custom_HID от ST). Собрал платку с контроллером. Какая-то жутко путаная штука этот USB. Впечатление такое, что разработчики попытались объять необъятное и теперь все вслед за ними делают тоже самое.

 

С нуля очень трудно. Я, когда начинал, вообще не мог понять, как работает шина. Пришлось собирать аппаратный сниффер (Для FS/LS), захватывать реальные транзакции на шине и в деталях разбираться, какие биты, почему и зачем передаются ...

 

Дополнение:

 

Вот, со времен работы со сниффером остались файлы. Посмотрите, как выглядят временные диаграммы энумерации:

 

http://zalil.ru/32906383

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы себе яснее представить следующее. Со стороны ПК прием осуществляется по REPORT ID от заведомо известного устройства, передача со стороны МК ведется в конечную точку OUT. Помнится мы уже выяснили, что при длинном пакете данных он с одной стороны режется на куски, а с другой склеивается. Это делается программистом или в примерах от Keil эта ситуация уже учтена? Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Начать с того, что разработал его индус. При всем моем уважении к индусам, голова у них как-то по-другому работает. Вот Зигби, например, тоже там индусы намудрили - черт ногу сломит.

Ну а потом USB продвигалось путем многолетнего коллективного творчества. Что порядка и стройности не прибавило.

 

Но на самом деле не так уж все плохо. В основе USB лежат довольно простые идеи. Которые, однако, никто доходчиво изложить не может, мне, по крайней мере, не встречалось. Помню меня тоже оторопь брала, когда начинал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но на самом деле не так уж все плохо. В основе USB лежат довольно простые идеи. Которые, однако, никто доходчиво изложить не может, мне, по крайней мере, не встречалось. Помню меня тоже оторопь брала, когда начинал.

А как, на Ваш взгляд, вот это описание:

http://microsin.ru/content/view/1107/44/

Изменено пользователем Slash

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помнится мы уже выяснили, что при длинном пакете данных он с одной стороны режется на куски, а с другой склеивается. Это делается программистом или в примерах от Keil эта ситуация уже учтена? Спасибо.

 

Да, это чисто программный механизм. Если вы внимательно разберете примеры от Keil, то увидите, что там сообщение при передаче разбивается на блоки, а при приеме - собирается по частям ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, это чисто программный механизм. Если вы внимательно разберете примеры от Keil, то увидите, что там сообщение при передаче разбивается на блоки, а при приеме - собирается по частям ...

Я пытался разбирать потому и возник вопрос как на самом деле все устроено. Хорошее бы описание к тем примерам а то что ни найду - все как-то поврхностно. Кстати спасибо за ссылку выше. Почитал с интересом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как, на Ваш взгляд, вот это описание:

http://microsin.ru/content/view/1107/44/

Бегло посмотрел, тоже не понравилось. Беда всех описаний (и этого тоже) USB состоит в том, что все валят в одну кучу, из-за этого получается огромный ком инфы, не прожуешь. И никто не дает инфу внятными легкоусваевыми кусочкам.

 

Я бы начал с того, что сказал: в центре USB находится хост, все остальные устройства логически присоедены к нему, образуя звезду. Устройства между собой обмениваться не могут, по своей инициативе инфу посылать не могут. Хост - полный хозяин: хост спросил - устройство ответило. Только так, и никак иначе.

 

Все опросы инициирует хост. Опросы происходят циклами. Длительность цикла постоянная, 1мс для LS и FS, или 125мкс для HS. Цикл начинается с того, что хост посылает никому не адресованный токен Start Of Frame (SOF). После этого хост опрашивает периферийные устройства, причем делает это в определенном порядке: сначала опрашивает контрольные пайпы, потом "прерывания" и изохронные пайпы, и напоследок, по остаточному принципу, балк пайпы. Порядок опроса определяется планировщиком хоста, который динамически реагирует на запросы и ответы и выстраивает список опроса.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И никто не дает инфу внятными легкоусваевыми кусочкам.

Вот тут боле менее кусочки. Еще помнится у nxp для какого-то lpc2xxx была отличная апликуха - пусть азы, но для въезда самое то. А вот по репортам hid я ничего внятного в сети, к сожалению, не находил.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осваиваю создание USB устройств. В качестве "железа" использую STM32F103RCT6. Среда Keil. Примеры от Keil работают. Хочу теперь изучить сам интерфейс и по этому завел тему для своих ламерских вопросов. Собственно первый вопрос. У Агурова в книге написано, что report может содержать до 65535 байт с данными. Это как? 256 ID по 256 байт? Не совсем понимаю. С конечными точками тоже туман какой-то. Как я понимаю нулевая конечная точка скорее служебная, но может содержать и полезные данные до 8 байт? Так же не понятен механизм передачи. Напимер, как я заметил обмен ведется периогдически. А если нужно передавать тогда, когда комплект данных готов? А если нужно иногда запрашивать данные у ПК? Помогите разобраться пожалуйста. Спасибо.

может это поможет - во всяком случае енумерация проходит...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут боле менее кусочки. Еще помнится у nxp для какого-то lpc2xxx была отличная апликуха - пусть азы, но для въезда самое то. А вот по репортам hid я ничего внятного в сети, к сожалению, не находил.

Да, был для LPC2141...48.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, был для LPC2141...48.

 

Для старта указанный мной Гук - самое оно. Четко, кратко, правильно, да еще и с картинками. Если дружите с английским, то почитайте еще книги Jan Axelson ...

 

Кстати, а я вам какой исходник давал ? Для LPC ? Или для AT91 ?

 

P.S. А еще было описание с картинками у Cypress, его тоже многие хвалили, вот только ссылку я не припомню ...

 

P.P.S. Диаграммки-то гляньте, которые я выложил. Это полезнее всяких картинок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для АТ91.

 

Сейчас пытаюсь на ПК получить то, что передает демо-софт ST. Чет не очень-то получается. Устройство вижу, а то что посылает - нет. Borland C Builder 6 Sp4. Кто в чем пишет под USB HID (Win) если не секрет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

откатился на Borland C Builder 5.0, так как на 6.0 некорректно возвращается DevicePath USB HID устройства в запросе SetupDiGetDeviceInterfaceDetail при поиске своего...

А так все довольно просто, использую HID.DLL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

откатился на Borland C Builder 5.0, так как на 6.0 некорректно возвращается DevicePath USB HID устройства в запросе SetupDiGetDeviceInterfaceDetail при поиске своего...

А так все довольно просто, использую HID.DLL

Может стоило зарядить Sp4 ? А как Вы подключили эту библиотеку? Как осуществляете прием передачу в конечные точки? Глянуть бы примерчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идем на http://www.obdev.at/products/vusb/download.html, качаем V-USB и в libs-host все есть что надо...

Просто и со вкусом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...