Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 и USB (практика)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср мар 03, 2021 08:42:14

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 293 ]     ... , , , , 15
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вс сен 27, 2020 20:06:30 
Собутыльник Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 641
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2641
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Kellya, Вам пришли данные для для 1ой точки типа OUT и Вы их дешифровали как запрос дескриптора или для конечно точки 1 типа IN приходят фреймы с запросом данных?
Что-то я боюсь вопрос не совсем корректно сформулировал.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вс сен 27, 2020 20:58:36 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Все дескрипторы через 0-ю точку отправляются. Тут очень важно правильно HIDReportDescriptor составить. Без этого ничего работать дальше не будет.

Весь обмен HID состоит из SetReport и GetReport. Первый передаёт данные от хоста к устройству и может приходить как в 0-ю точку, так и в 1-ю. Второй только через 1-ю interrupt точку работает. Отправлять репорты устройство может когда захочет. Обычно это происходит, если изменяется состояние устройства. Естественно, чаще чем хост опрашивает отправлять смысла не имеет.

Сама отправка репортов ни чем не отличается от отправки дескрипторов при энумерации, только производится в 1-ю точку. Для этого должна быть правильно заполнена таблица описания буферов приёма/передачи и писать правильно в буфер.

Одно из "заподлянских" мест в USB от STM (тот что не OTG) это правильно выставлять статусы с регистре конфигурации точки. Там непривычные для новичков toggle-биты есть.

Добавлено after 16 minutes 21 second:
Ещё насчёт дескрипторов. Я на прошлой странице выкладывал дескрипторы, которые правильно работают с STM-овской утилитой для тестирования HID. Там установка и считывание светодиодов реализовано. Для отладки за глаза.


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вс сен 27, 2020 21:16:34 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
"Kellya, Вам пришли данные для для 1ой точки типа OUT и Вы их дешифровали как запрос дескриптора"
Сначала эти данные пришли для 0ой точки, я их дешифровал как запрос дескриптора, обработал и отправил. Потом проделал тоже самое для остальных дескрипторов (конфигурации, интерфейса, строк, отчета и к.т.1). Все это через нулевую точку. На этом этапе у меня проблем не возникает. Устройство определилось в системе.
После всего этого, как только я передал дескриптор репорта мне начинают сыпаться фреймы с запросом данных для конечно точки 1 типа IN, на которые у меня не получается ответить, после парты попыток от хоста получить ответ, он начинает сыпать различными запросами на ресет пайпов (это успешно выполняется контроллером самостоятельно), а потом снова начинает сыпать запросы данных для конечно точки 1 типа IN

Добавлено after 5 minutes 40 seconds:
"Все дескрипторы через 0-ю точку отправляются. Тут очень важно правильно HIDReportDescriptor составить. Без этого ничего работать дальше не будет."
Все верно, хост съедает все дескрипторы, которые я ему шлю.
"Весь обмен HID состоит из SetReport и GetReport".
Когда хост хочет получить репорт он отправляет GetReport? Хм, у меня такого вроде бы нет. Я думал, что он отправляет URB_INTERRUPT in, когда хочет получить данные из точки


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вс сен 27, 2020 22:00:24 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Когда хост хочет получить репорт он отправляет GetReport? Хм, у меня такого вроде бы нет.
Нет, это я так вольно процесс передачи данных описал. Что репорты туда-сюда бегают. Реально такого запроса конечно же нет.

Я думал, что он отправляет URB_INTERRUPT in, когда хочет получить данные из точки
Всё верно. Только не когда хочет получить данные, а когда придёт время опроса. И если вы к этому моменту положили данные, то они их сам заберёт. Устройству не надо реагировать на эти запросы, как вы не поймёте. Просто положите репорт в ep-1 и хост сам их заберёт.

Добавлено after 14 minutes 6 seconds:
Если дескрипторы составлены правильно, то там реально всё примитивно.

Вот кусочек реализации HID. Тут ClassSpecificSetup это Setup-запросы в EP0, характерные только для HID. И обработка SetReport через EP0 и EP1.


А вот кусочек отправки репорта, я его уже приводил.


Это весь код HID, не считая дескрипторов (их я тоже чуть выше выкладывал), где тут можно запутаться?


Вернуться наверх
 
Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн сен 28, 2020 10:35:32 
Опытный кот

Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 862
Рейтинг сообщения: 0
Весь обмен HID состоит из SetReport и GetReport. Первый передаёт данные от хоста к устройству и может приходить как в 0-ю точку, так и в 1-ю. Второй только через 1-ю interrupt точку работает. Отправлять репорты устройство может когда захочет. Обычно это происходит, если изменяется состояние устройства. Естественно, чаще чем хост опрашивает отправлять смысла не имеет.

Что у вас за HID такой, который с interrupt работает? Я сколько ни ловил их - пусто... И wireshark не показывал, чтобы что-то в них происходило.
Единственное, когда в interrupt были какие-то данные - когда я подумывал ch340 сэмулировать. Но там оказалось, что по сути вообще никакой не CDC, даже обмен данными не так происходит, как у CDC. Поэтому забил (плюс к тому же, в ядре поддержка ch340 сделана реверсом и очень многие вещи не учитываются, ХЗ, как оно себя поведет в той же мастдайке).

_________________
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн сен 28, 2020 12:02:33 
Друг Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 122
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3109
Рейтинг сообщения: 0
VladislavS писал(а):
Весь обмен HID состоит из SetReport и GetReport. Первый передаёт данные от хоста к устройству и может приходить как в 0-ю точку, так и в 1-ю. Второй только через 1-ю interrupt точку работает.
SetReport и GetReport нормально работают через 0-ю.

VladislavS писал(а):
Отправлять репорты устройство может когда захочет.
Не совсем так. Инициатором обмена всегда выступает хост, а значит отправлять можно только если в конечной точке нет данных которые еще не запросил хост. То есть перед копированием в USB буфер нужно проверить состояние точки.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн сен 28, 2020 13:38:02 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Eddy_Em, иди читай спецификацию HID, потом обсудим, если останутся вопросы.

Для ленивых.


Добавлено after 15 minutes 55 seconds:
SetReport и GetReport нормально работают через 0-ю.
Ну это же легко проверятеся. Вот приведённый выше код меняет состояние отображения кнопки
А если отправлять через 0-ю точку
Код:
usb.WriteEP<0>(report,sizeof(report));

То уже ничего не приходит.

Добавлено after 17 minutes 17 seconds:
Я тут сам ещё раз спецификацию почитал. Пожалуй, через нулевую точку тоже будет работать. Надо просто Get_Report с хоста слать и на него отвечать. STM-овская USB HID Demonstrator просто так не умеет. Но в код обработку GET_REPORT, конечно, обязательно добавить.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн окт 19, 2020 21:08:04 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
В общем удалось собрать рабочий проект для мышки в CubeMX, значит железо работает нормально. Но с их дескрипторами свой код мне все равно так и не удалось запустить. Видимо неправильно пытаюсь инициализировать первую точку. Можно ли как-то вообще её не инициализировать, и, например, чтобы она на каждый опрос от хоста просто отвечала STALLом? Или для обмена пакетами в любом случае необходимо инициализировать буферы приема/передачи?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Пн окт 19, 2020 22:39:23 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 250
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1519
Рейтинг сообщения: 0
Естественно, всё надо инициализировать правильно в соответствии с реализуемым классом и его дескрипторами.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт окт 20, 2020 11:01:57 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
В общем ошибка была только в том, что я не указал для первой точки её адрес :oops: . Для нулевой точки там все автоматически стояло, поэтому этот момент как-то вылетел из головы. Всем большое спасибо за помощь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт ноя 10, 2020 17:39:26 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Столкнулся с ещё одной проблемой. После того как отправляю репорт, который описывает нажатие клавиши на клавиатуре, почему-то эта клавиша печатается не один раз, а много (не ждал пока остановятся), будто клавишу зажали и держат. Причем, как вызов функции отправки, так и прерывание о корректной передаче происходят только один раз. Wireshark тоже фиксирует только один ответ от устройства. Но клавиша почему-то остается нажатой. Не встречалась ни у кого такая проблема? Репорт состоит из 8 байт - [bModifier, bReserved, bKey1, bKey2, bKey3, bKey4, bKey5, bKey6]


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт ноя 10, 2020 18:04:09 
Друг Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 122
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3109
Рейтинг сообщения: 0
Kellya писал(а):
Но клавиша почему-то остается нажатой.
А вы проинформировали хост что она была отпущена? Нужно отправить пакет не содержащий код этой клавиши, иначе она считается нажатой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и USB (практика)
СообщениеДобавлено: Вт ноя 10, 2020 20:01:38 
Первый раз сказал Мяу!

Зарегистрирован: Пн авг 24, 2020 19:13:24
Сообщений: 21
Рейтинг сообщения: 0
Kellya писал(а):
Но клавиша почему-то остается нажатой.
А вы проинформировали хост что она была отпущена? Нужно отправить пакет не содержащий код этой клавиши, иначе она считается нажатой.

Точно. Спасибо. Теперь вспомнил, что когда-то попадалось на глаза такое.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 293 ]     ... , , , , 15

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y