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

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

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

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


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

Осваиваю создание 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 ?

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


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

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

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


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

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

 

 

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

 

P.S. А я вам разве какие-то исходники давал ? Хотя ...

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


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

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

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


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

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

 

Длинное сообщение передается не в одном пакете, а в нескольких

 

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


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

Длинное сообщение передается не в одном пакете, а в нескольких

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

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


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

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

 

Разобьет на пакеты и отошлет. На шине используется нумерация пакетов (data0/data1) и квитирование (ACK/NAK). Объяснять долго. Почитайте Гука "Шины PCI, USB и FireWire", там это подробно расписано

 

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


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

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

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


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

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

Нулевая - может. И есть. Со стороны МК адресоваться не надо - хост сам укажет, какая точка нужна ему в данный момент, дело МК - положить данные в буфер этой точки или считать их оттуда. А вот как адресоваться со стороны хоста, я не знаю, это вопрос к PC - программистам.

 

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


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

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

 

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

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


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

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

 

Да. Control и Interrupt. Попробуйте разобрать исходник HID - клавиатуры, там есть все необходимое ...

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


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

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

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


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

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

 

BusHound. В сложных случаях - аппаратным сниффером. Еще раз. Не пытайтесь писать проект с нуля - это гиблое дело. Возьмите готовый исходник (лучше всего для AT89C5131) и разберите его. Если хотите, могу вам дать свои проекты HID - клавиатур для этого МК, для LPC214x и для AT91SAM9 (это почти то же, что SAM7) ...

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


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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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