реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> USB интерфейс HID устройство со стороны микроконтроллера, прошу помочь разобраться
smk
сообщение Mar 19 2012, 08:00
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 09:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



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


1. Агурова не читайте. Там очень халтурно описана работа как USB, так и собственно HID. Почитайте того же Гука, Jan Axelson, ну и спецификации (USB и HID).
2. Да, нулевая точка - управляющая, по умолчанию длина пакета - 8 байт, если при энумерации устройство не заявит о другой длине. Через эту точку можно передавать и данные. Так, например, в клавиатуру передаются команды на зажигание лампочек (посредством SetReport). Таким же путем (посредством SetReport) можно получать от нее и данные о нажатиях клавиш, но это неудобно, и поэтому для этой цели используется канал Interrupt In.
3. Так нельзя. Инициатор почти всех транзакций - хост. Для HID в большинстве случаев прерывания следуют каждые 10мС. Но вы можете запросить и другую частоту - до 1мС (для FS) или до 125 мС (насколько я помню) для HS. Быстрее и чаще не выйдет.
4. А чем обусловлен выбор именно HID ?
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 10:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Спасибо за ответ. И за исходники тоже. Слез я правда с АТ91. А выбор HID обусловлен в первую очередь наличием штатного драйвера в комплекте каждой ОС. Для приборов с небольшим или нечастым обменом вполне подходит. И еще мне кажется что он самый простой и с него проще будет начать.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 10:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 14:00) *
Спасибо за ответ. И за исходники тоже. Слез я правда с АТ91. А выбор HID обусловлен в первую очередь наличием штатного драйвера в комплекте каждой ОС. Для приборов с небольшим или нечастым обменом вполне подходит. И еще мне кажется что он самый простой и с него проще будет начать.



Агуров прав в одном - он выбрал для старта самый простой МК с предельно простым USB - движком. Начинал я именно с него, и именно его вам рекомендую. Очень советую таки изучить внимательно исходники (там есть ошибки, но в целом их изучение весьма поучительно) из книги Агурова (теоретическую часть не читайте, вы по ней не разберетесь, она крайне небрежно написана).

P.S. А я вам разве какие-то исходники давал ? Хотя ...
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 10:21
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



wMaxPacketSize - какое максимальное значение, (там два байта отведено)? Если размер пакета 64 байта, то как осуществляется передача 1 килобайта? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 10:33
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 14:21) *
Если размер пакета 64 байта, то как осуществляется передача 1 килобайта? Спасибо.


Длинное сообщение передается не в одном пакете, а в нескольких
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 10:39
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(kovigor @ Mar 19 2012, 12:33) *
Длинное сообщение передается не в одном пакете, а в нескольких

Это понятно. Я имел ввиду как это организовано? Я пока еще плохо представляю себе это все. Как хост будет отсылать мне этот килобайт? Как он узнает, что порция принята правильно, а если неправильно то как он узнает что посылку нужно повторить?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 10:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 14:39) *
Как хост будет отсылать мне этот килобайт? Как он узнает, что порция принята правильно, а если неправильно то как он узнает что посылку нужно повторить?


Разобьет на пакеты и отошлет. На шине используется нумерация пакетов (data0/data1) и квитирование (ACK/NAK). Объяснять долго. Почитайте Гука "Шины PCI, USB и FireWire", там это подробно расписано
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 10:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Я еще не понял пока как адресоваться к конкретной конечной точке. Я так понимаю конечная точка может быть IN и OUT одновременно?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 10:57
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 14:46) *
Я еще не понял пока как адресоваться к конкретной конечной точке. Я так понимаю конечная точка может быть IN и OUT одновременно?

Нулевая - может. И есть. Со стороны МК адресоваться не надо - хост сам укажет, какая точка нужна ему в данный момент, дело МК - положить данные в буфер этой точки или считать их оттуда. А вот как адресоваться со стороны хоста, я не знаю, это вопрос к PC - программистам.
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 11:04
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Книгу нашел. Читаю. Как я понял мне нужны передачи типа interrupts.

Со стороны ПК пока не трогаем. Это потом буду разбираться.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 11:12
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 15:04) *
Книгу нашел. Читаю. Как я понял мне нужны передачи типа interrupts.


Да. Control и Interrupt. Попробуйте разобрать исходник HID - клавиатуры, там есть все необходимое ...
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 11:49
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 19 2012, 11:53
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(smk @ Mar 19 2012, 14:49) *
Спасибо за подсказанную книжку. Слегка проясняется. В конечном счете практика критерий истины, так что дочитаю и буду пробовать. А каким монитором порта USB Вы пользуетесь?


BusHound. В сложных случаях - аппаратным сниффером. Еще раз. Не пытайтесь писать проект с нуля - это гиблое дело. Возьмите готовый исходник (лучше всего для AT89C5131) и разберите его. Если хотите, могу вам дать свои проекты HID - клавиатур для этого МК, для LPC214x и для AT91SAM9 (это почти то же, что SAM7) ...
Go to the top of the page
 
+Quote Post
smk
сообщение Mar 19 2012, 12:11
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016