Например TDA7294

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





Текущее время: Сб апр 19, 2025 23:40:17

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


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



Начать новую тему Ответить на тему  [ Сообщений: 37 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 07:03:41 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 214
Рейтинг сообщения: 0
Получается что раз в милисеунду обязательно на SOF прерывание залетать?

Конечно! SOF выдаёт хост каждое нормированное стабильное время (для USB1/USB2 это 1мс). Это базовая синхронизация шины. А ещё некоторые устройства используют его для определения спячки: если питание есть а SOFы пропали - можно спать, пока не прилетит новый SOF. Ну и для HID устройств SOF можно использовать как маркер обновления состояний кнопок, причём в некоторых мышах можно задавать количество SOF через которое происходит обновление: те самые игровые FS/HS мышки настраиваются на частоту опроса до 1000/секунду это оно и есть.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 10:48:29 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
Разобрался что надо PID чередовать, вот только черный нечетный кадр пробовал менять и разницы не увидел. Получается что раз в милисеунду обязательно на SOF прерывание залетать? И.. я не понял где кнопки? Смещения координат я получаю, а кнопки то куда? Жму кнопку, прилетает пакет с нулями.

DATA1/DATA0 девайсы могут и не проверять. Хотя те, что я видел (кроме vusb) проверяли.
Кнопки должны быть в том же репорте. Но точнее стоит проверить по HID-дескриптору.
Возможно, поможет моя статья: https://habr.com/ru/articles/551720/
jcxz писал(а):
Если все биты описаны в мануале, то нормально.

Это вы, видать, забыли насколько криво они описаны.
jcxz писал(а):
Значит у вас размер точек был маленький.

Вроде почти до максимума тестировал. Там же 512-байтный кусок памяти, минус 64 байта на таблицу размещения, минус 8-64 байта на EP0, да пополам ради двойной буферизации. 220 байт за раз получается. Кажется, изохронные точки - единственные в USB-FS, на которые не распространяется ограничение 64 байта.
jcxz писал(а):
А значит - и максимальная скорость изохронной передачи ограничена - менее 1/4 от максимально возможной для USB-FS.

Только на прием ("микрофон"). На передачу ("динамик") хост шлет несколько запросов.
jcxz писал(а):
Получается - STM32L не соответствует даже требованиям USB-FS. Или не полностью соответствует.

Отчего же не соответствует. Аудиоустройства на нем делать можно? Можно. Даже скорость обмена вполне приемлемая получается. Этого с запасом хватит на два канала 16 бит 48 кГц.
HardWareMan писал(а):
Конечно! SOF выдаёт хост каждое нормированное стабильное время

Вроде бы это начиная с USB-2. Для LS посылать SOF обязательно только если нет обычного обмена. Потому что активность на шине - признак ухода в сон.
HardWareMan писал(а):
количество SOF через которое происходит обновление: те самые игровые FS/HS мышки настраиваются на частоту опроса до 1000/секунду это оно и есть.

Чего?!
Скорость обновления interrupt точки прописана в ней самой, и ни к каким SOF не привязана.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 11:33:10 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 426
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2526
Рейтинг сообщения: 0
Это вы, видать, забыли насколько криво они описаны.
Нормально всё описано. Непонятно, как может вызвать проблемы прямое указание на правила работы с битами? Операция "исключающее ИЛИ" с битами это так сложно?
Изображение
Вложение:
изображение_2024-12-10_112447943.png [53.31 KiB]
Скачиваний: 259


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 13:13:17 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
Все возможные способы доступа это сложно. Извратные маски, которые вследствие этого приходится накладывать, это сложно. Что им мешало не по 1 инвертировать, а по 0? Или наоборот, по 1 сбрасывать бит в 0?


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 13:24:06 
Друг Кота
Аватар пользователя

Карма: 61
Рейтинг сообщений: 1512
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3223
Откуда: Казань
Рейтинг сообщения: 0
Что мешало, что мешало... Я давно считаю, что спецификацию USB наркоманы писали, причём не абы какие, а в самый забористый приход или в период жуткой ломки, иначе непонятно за что они так подгадили человечеству.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 13:56:45 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
Я давно считаю, что спецификацию USB наркоманы писали

Полностью согласен! 16-битные VID:PID. Хранение адреса на устройстве (при том, что реальная топология - дерево, а вовсе не шина). utf-16 для строк. Отсутствие прерываний (из-за чего пришлось вводить костыль с interrupt-точкой). Засовывание в диф пару не диф состояний. Манипулирование измерением напряжения вместо логических уровней (кажется, USB-HS так отличает себя от FS. Ну и PD, куда ж без него). 3.3 В на сигнальных линиях при 5 В на питании.
Это что с ходу вспомнилось.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 14:55:22 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 214
Рейтинг сообщения: 0
HardWareMan писал(а):
количество SOF через которое происходит обновление: те самые игровые FS/HS мышки настраиваются на частоту опроса до 1000/секунду это оно и есть.

Чего?!
Скорость обновления interrupt точки прописана в ней самой, и ни к каким SOF не привязана.

Того!
Это Vendor-Specific реализация. Даже если заставить систему опрашивать мышь быстрее (вплоть до каждого SOF), это ещё не означает, что сам сенсор будет опрощен с такой же частотой. Поэтому, если опрашивать мышку чаще, чем она опрашивает свой сенсор, то мы просто получаем дублированные репорты либо NAK (смотря опять же как реализовал производитель). И это всё было разобрано чуть более полугода назад в этом треде: https://habr.com/ru/articles/811435/com ... t_26786417


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 15:30:27 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
Даже если заставить систему опрашивать мышь быстрее (вплоть до каждого SOF), это ещё не означает, что сам сенсор будет опрощен с такой же частотой.

Это означает, что максимальная частота опроса ограничена настройками эндпоинта. А внутри себя устройство может хоть миллион раз в секунду опрашивать (мало ли - усреднять, искать максимум), и это никак не привязано к протоколу обмена.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 16:00:08 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 214
Рейтинг сообщения: 0
Даже если заставить систему опрашивать мышь быстрее (вплоть до каждого SOF), это ещё не означает, что сам сенсор будет опрощен с такой же частотой.

Это означает, что максимальная частота опроса ограничена настройками эндпоинта. А внутри себя устройство может хоть миллион раз в секунду опрашивать (мало ли - усреднять, искать максимум), и это никак не привязано к протоколу обмена.

bInterval в мс (считай - в SOFах). В дорогих игровых мышах он минимален, но это не воспрещает опрашивать их медленнее. Настройкой такого опроса занимается софт от этих мышей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 16:59:09 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
bInterval в мс (считай - в SOFах). В дорогих игровых мышах он минимален, но это не воспрещает опрашивать их медленнее. Настройкой такого опроса занимается софт от этих мышей.

Еще раз. SOF-то тут при чем? bInterval задается в миллисекундах. Частота опроса сенсора вообще внутреннее дело самой мыши. SOF вообще может не посылаться, для LS-устройств.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 18:43:06 
Это не хвост, это антенна

Карма: -11
Рейтинг сообщений: 160
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1428
Рейтинг сообщения: 0
Вроде почти до максимума тестировал. Там же 512-байтный кусок памяти, минус 64 байта на таблицу размещения, минус 8-64 байта на EP0, да пополам ради двойной буферизации. 220 байт за раз получается. Кажется, изохронные точки - единственные в USB-FS, на которые не распространяется ограничение 64 байта.
Открыл тот свой проект на STM32L с изохронными USB. Вот так у меня распределена USB-ОЗУ:
Код:
#define USB_EP_NUM       2  //макс.кол-во эндпоинтов одновременно используемых в программе (не включая ep0)
#define USB_MAX_PACKET0  8  //Max Endpoint 0 Packet Size [8/16/32/64]
#define OFS2ADDR(ofs) ((u32 *)((char *)&usbMem + ((ofs) << 1 & ~3) + ((ofs) & 1)))

__packed union UsbBufDescTbl {
  struct {
    u16 addrTx, gap0;
    u16 countTx, gap1;
    u16 addrRx, gap2;
    u16 countRx, gap3;
  };
  struct {
    u16 addr, gap0;
    u16 count, gap1;
  } txrx[2];
};

__no_init struct UsbMem {
  u16 ep0[2][USB_MAX_PACKET0];
  union {
    u16 epStream1[2][epSize_ASET1]; //alt.set1
    u16 epStream2[2][epSize_ASET2]; //alt.set2
  };
  UsbBufDescTbl desc[2 + USB_EP_NUM];
} usbMem @ ".usb";
Получается - максимальный размер эндпоинта == (512-2*4*4-8*2)/2 = 232 байта. Если ничего не напутал.
Таблица размещения у меня = 2*4*4 = 32 байта (64 - это занимает в адресном пространстве).

Только на прием ("микрофон"). На передачу ("динамик") хост шлет несколько запросов.
Для изохронных точек в USB-FS это невозможно. Там только один кадр на каждую точку за один фрейм (1 мсек).
В STM32L даже переключение буферов происходит аппаратно. По SOF-у.

jcxz писал(а):
Получается - STM32L не соответствует даже требованиям USB-FS. Или не полностью соответствует.

Отчего же не соответствует. Аудиоустройства на нем делать можно? Можно. Даже скорость обмена вполне приемлемая получается. Этого с запасом хватит на два канала 16 бит 48 кГц.
Изохронные - это не только для аудио. Нам например нужно было более 600 КБ/сек (размер точки более 600 байт). С гарантированной полосой пропускания. И пролетели. :(
В результате - заменили STM32L на дедушку LPC1758 и получили вплоть до 1023 байт/мсек как с куста. Так как NXP не пожалел ОЗУ под USB-RAM.

Скорость обновления interrupt точки прописана в ней самой, и ни к каким SOF не привязана.
Она же кратна целому количеству SOF. А значит логично её стартовать от счётчика, декрементируемого по SOF.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вт дек 10, 2024 20:15:03 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1517
Рейтинг сообщения: 0
} usbMem @ ".usb";[/code]Получается - максимальный размер эндпоинта == (512-2*4*4-8*2)/2 = 232 байта. Если ничего не напутал.
Таблица размещения у меня = 2*4*4 = 32 байта (64 - это занимает в адресном пространстве).

Да, пожалуй, соглашусь. У меня структура сделана непрерывной - похоже, нечетные полуслова и правда игнорируются.
Плюс, наверное, если используются не все точки, можно пару байтов сэкономить.
Для изохронных точек в USB-FS это невозможно. Там только один кадр на каждую точку за один фрейм (1 мсек).
В STM32L даже переключение буферов происходит аппаратно. По SOF-у.

Не по SOF, а по запросам хоста, как и любые другие точки. На IN он посылает единственный запрос на фрейм. А на OUT - может несколько. Если настроить битрейт динамика так, чтобы не помещался в одну точку, хост прекрасно разбивает поток на несколько транзакций. wireshark-ом это прекрасно видно. Я пытался и на IN что-то сделать (размер точки, скорость опроса, даже в сторону синхронизации смотрел) но, похоже, не выйдет.
Изохронные - это не только для аудио. Нам например нужно было более 600 КБ/сек (размер точки более 600 байт). С гарантированной полосой пропускания.

Тут да, ограничение. Хотя я бы поставил какой-нибудь CDC-ACM и не мучился. Полоса пропускания современных хостов настолько больше предела USB-FS, что уж с этим проблем быть не должно.
jcxz писал(а):
Она же кратна целому количеству SOF. А значит логично её стартовать от счётчика, декрементируемого по SOF.

Всего лишь "совпадает". А начинать новое преобразование логично когда завершилось предыдущее. Или когда предыдущее послано. Интервал между interrupt-IN и interrupt-IN кажется более стабильным, чем между SOF и interrupt-IN.
Не надо лепить SOF куда попало.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Пт дек 13, 2024 20:28:23 
Встал на лапы

Зарегистрирован: Вт фев 15, 2022 21:28:35
Сообщений: 80
Рейтинг сообщения: 0
https://cloud.mail.ru/public/8wGW/YGCiX9YTp


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Пт дек 13, 2024 23:08:27 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 02, 2015 07:47:20
Сообщений: 214
Рейтинг сообщения: 0
https://cloud.mail.ru/public/8wGW/YGCiX9YTp

Изображение
Победа?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Вс дек 15, 2024 13:33:46 
Встал на лапы

Зарегистрирован: Вт фев 15, 2022 21:28:35
Сообщений: 80
Рейтинг сообщения: 0
Если не менять DATA 0/1 , то через кадр сыпятся Toggle error. Все отлично, но прилетает TXERR (Transaction error) в одной SUTUP транзакции. Ну мой драйвер любые повторы делает по событиям от прерывания канала не дожидаясь СОФ, все равно со второй попытки все проталкивается дальше. Если каждый пакетик слать в начале фрейма, то даже NACK-ов нету, а так мышь не успевает что-ли, или как-то надо мониторить конец кадра.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Пн дек 16, 2024 11:45:08 
Это не хвост, это антенна

Карма: -11
Рейтинг сообщений: 160
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1428
Рейтинг сообщения: 0
Если не менять DATA 0/1 , то через кадр сыпятся Toggle error. Все отлично, но прилетает TXERR (Transaction error) в одной SUTUP транзакции. Ну мой драйвер любые повторы делает по событиям от прерывания канала не дожидаясь СОФ, все равно со второй попытки все проталкивается дальше. Если каждый пакетик слать в начале фрейма, то даже NACK-ов нету, а так мышь не успевает что-ли, или как-то надо мониторить конец кадра.
Т.е. - так толком и не заработало и причины ошибок не найдены...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 USB host
СообщениеДобавлено: Ср дек 18, 2024 01:18:31 
Встал на лапы

Зарегистрирован: Вт фев 15, 2022 21:28:35
Сообщений: 80
Рейтинг сообщения: 0
Все, разобрался, работает отлично, без ошибок, даже без NACK-ов и на одном канале. То есть я вообще не задействую второй канал, просто переключаю канал после инициализации мышки под другой тип передач.
Весь обработчик прерывания от мышки уместился в 400 строк. Хрю :?


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

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


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

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


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

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


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