URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 138014
[ Назад ]

Исходное сообщение
"Опубликован открытый USB-стек TinyUSB 0.19"

Отправлено opennews , 06-Окт-25 10:01 
Доступен выпуск проекта TinyUSB 0.19, развивающего кросс-платформенный USB-стек для встраиваемых систем. Предоставляются компоненты USB-стека для USB-хостов (USB Host) и для подключаемых устройств (USB Device).  Код проекта написан на языке Си и распространяется под лицензией MIT...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=64005


Содержание

Сообщения в этом обсуждении
"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 10:01 
А зачем он нужен, если есть usb c?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 10:27 
Да вы что? Наикрутейшая штука для STM и Atmel! Вы просто не в курсе, что это и для чего это.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Смузихлеб забывший пароль , 06-Окт-25 10:46 
> Вы просто не в курсе, что это и для чего это.

это какая-то ужасная тайна, раскрыть которую анон всё-таки не решился ?


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 10:58 
Какая тайна? Это USB стек. Больше и сказать нечего. Можно сделать любое USB устройство из перечисленных на базе любого из перечисленных микроконтроллеров. Вы вообще интересовались, как та же флэшка устроена? Или мышка?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 13:42 
Если в компетенции создать своё usb устройство, то вам не придется идти "на поклон" консорциуму за ID и платить роялти за каждое выпущенное устройство.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено КО , 06-Окт-25 16:18 
Кабеля и устройства к нему подключаемые тоже будете создавать? Или может будете сертификацию подтверждать?
Вещь чисто для энтузиастов со штучными экземплярами, которые ты не сможешь продать

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено pv , 06-Окт-25 18:45 
дело не в компетенции, платят за возможность нарисовать на коробочке точечку с тремя стрелочками и рядом написать USB-компатибле.
никто не запрещает сделать своё устройство, сказать что там инновационная Ultimate Superpuper Bus, что бы это не значило, и выпускать девайсы с любыми пересекающимися VID/PID.

гугл -> philips i2c vs atmel twi


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Neko CWD , 06-Окт-25 10:45 
Это ж либа для протокола. При чём тут разъём?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено анонимз , 06-Окт-25 11:00 
USB c это стек? А я думал это порт.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено pfg21 , 06-Окт-25 11:46 
человек и пароход !! (с) Простоквашино.    
в спецификации есть и описание разъемов и описание программной части обмена данными и много чего еще. доброе утро подован :)

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Илитка , 06-Окт-25 20:20 
Сарказма вы не выкупаете явно, товарищ.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 10:35 
> написан на языке Си

Сколько тут переполнений буферов?


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 11:23 
извините за оффтоп, один вопрос:
- есть ли софтовые решения (для *nix), что позволяют симулировать добавление и извлечение usb-hub из аппаратной конфигурации? аналог "выдернул - вставил обратно"..

столкнулся с usb-хабом/концентратором, который не подхватывается "автоматом" при холодном старте, только после физического извлечения и вставки обратно.. не уверен, что даже если подобное решение существует - оно поможет, т.к. дело, скорее всего, в железе хаба..

спасибо..

p.s.:
в виндоус, кмк, можно удалить хаб из конфигурации, сохранить её и потом провести "ре-скан" оборудования, который должен "найти" удалённое (в device mgr).. не пробовал.. но проблемный хаб не цепляется с холодного старта и в вин10..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено ахахахаха , 06-Окт-25 11:43 
Через proc можно управлять питанием портов, если хаб это умеет.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 13:18 
> Через proc можно управлять питанием портов, если хаб это умеет.

спасибо.. не получается.. и рецепты ниже - не работают:
https://kernel.org/doc/Documentation/usb/power-management.txt


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Stanislavvv , 06-Окт-25 11:44 
Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.
Можно попробовать начать с https://askubuntu.com/questions/342061/power-on-off-usb-ports
Правда, ту поддержку сильно не везде нынче можно найти — на доступных мне компах это получилось только на одном из серверов.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 13:24 
> Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.

спасибо, не в этом случае.. рецепты с kernel.org тоже не работают.. нужно не "linux-only" решение (хаб для опёнка брал)..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Илитка , 06-Окт-25 20:21 
Кто такой опёнок?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 07-Окт-25 07:10 
OpenBSD

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 07-Окт-25 09:57 
> Можно попробовать начать с https://askubuntu.com/questions/342061/power-on-off-usb-ports

ещё раз "спасибо"..
была ссылка на:
https://github.com/hevz/hubpower/raw/refs/heads/master/hubpo...

попробую использовать как референс и убрать зависимости от linux.. но.. как оказалось, тут софтовое управление питанием, несмотря на спек usb-2.0, не поддерживается ни root-хабом, ни проблемной железкой.. к сожалению..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 13:25 
- Анализ логов.
- просмотр в msconfig.
- как устанавливалось устройство. Компетенция авторов драйверов в плане интеграции оборудования.
- Само устройство не проходит протокол бутовой инициализации.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 13:27 
> - Само устройство не проходит протокол бутовой инициализации.

"да!"©


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 16:19 
Проблема в питании, скорее всего с первого раза не открывается ключ из-за проблем с каким-нибудь конденсатором.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 17:39 
> Проблема в питании, скорее всего с первого раза не открывается ключ из-за
> проблем с каким-нибудь конденсатором.

дык о то ж.. поэтому ищу софтовое решение, чтобы работало не только для lin, но и в openbsd.. пытаюсь через интерфейс контроллера что-то нащупать (методом тыка), т.к. нет готовых решений (или не нашёл).. и, кмк, столкнулся с тем, что не все usb-root-hub поддерживают софтовое управление питанием (цель - или выкл/вкл питание в слоте usb через рут-хаб, или как-то пнуть проблемный хаб на повторный инит)..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 13:35 
Для unix смотри сообщения журнала ядра.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 13:45 
> Для unix смотри сообщения журнала ядра.

в том-то и дело, что с холодного старта нет ничего.. сообщения появляются только после того, как его вытянешь и обратно ткнёшь..
пытаюсь что-то наваять через "USB_REQUEST struct usb_ctl_request", не получается.. и чувствую себя в роли обезьяны с гранатой..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 13:57 
Посмотрите в какой конфигурации компилировалось ядро. В Debian это файл /boot/config-*

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 18:15 
Это бессмысленно, устройство в зависоне

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Aliech , 07-Окт-25 01:30 
Товарищ, вангую, что ему (хабу... и устройствам в нём) тупо питания не хватает. Или какое hand-off в настройках фирмвари машины не включено.

Первое могло проявится от того, что когда при старте машины фирмваря опрашивала usb, то слишком много всего одновременно было опрошено в данном хабе, и всем устройствам не хватило питания. Ну и весь хаб в небытие отправился.

Второе - аналогично первому, но фирмваря тупо "не отпустила" хаб. Какой-нибудь костыль для Шиндовс, например.

Начните с питалова.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено smit , 06-Окт-25 14:05 
Драйвер от производителя?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 14:10 
Это самое лучшее прям.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено 1111111 , 06-Окт-25 15:23 
почитай про udev и управление питанием

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 18:13 
Usb-устройства , у которых питание идёт из порта,  следует подключать к компьютеру только после включения питания на компьютере, так как при включении питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор и usb-устройство не понимает как ему соедиться с хостом и виснет. У меня так происходит с usb-адаптером wifi.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено крокодил мимо.. , 06-Окт-25 19:56 
> Usb-устройства , у которых питание идёт из порта,  следует подключать к
> компьютеру только после включения питания на компьютере, так как при включении
> питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор
> и usb-устройство не понимает как ему соедиться с хостом и виснет.
> У меня так происходит с usb-адаптером wifi.

нет.. при ините ядра (это верно и для вин, и для *nix) идёт probe/опрос оборудования.. после получения ответа - конфиг железа (грубо говоря).. подобное поведение хаба (без отклика с холодного старта) - не является нормой.. думаю, что и с вашим адаптером тоже не всё гладко..


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 07-Окт-25 08:27 
Все бы хорошо, но хаб/девайс тоже имеет право опрашивать порт хоста при подключении. И некоторые девайсы распознают пожключение к порту не по питанию (оно может быть внешним! особенно для хаба), а по смене состояния линий порта. Пока девайс не разлядит там "было в подвешенном состоянии, а теперь там есть что-то" можно  питание порта дергать сколько угодно.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 07-Окт-25 12:34 
релюшкой +5 :)

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 14:09 
> а помещаются в очередь, которая разбирается и обрабатывается в контексте выполнения приложения, а не обработчика прерываний.

Но на устройствах без MMU вся память доступна на чтение и запись абсолютно всем, поэтому нет разницы, что поломают, один из сервисов, или обработчик прерывания.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 14:59 
Это т.н. best effort решение
Лучше хоть какой-то дефолт с претензией на "мы подумали о потенциальных проблемах в реальной эксплуатации", чем вообще ничего

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 15:36 
многопоточка без MMU? это где?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено _kp , 06-Окт-25 16:52 
Речь об отложенной обработке прерываний, а это не обязательно свазано с MMU, а скорее для более предсказуемой реакции на потоки прерываний.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 16:53 
При чём здесь MMU и "поломают"? В новости речь про корректную реализацию async-signal safety.

Грубо говоря, поместив в README фразу "...thread-safe... interrupt events are deferred then handled in the non-ISR task function", разработчики дают понять что имеют элементарную квалификацию писать драйвера с ISR-обработчиками (а также программы с fork(), обработчики сигналов и много чего ещё).


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 18:47 
В микроконтроллерах зачастую бывает PMU - защита на уровне диапазонов адресов.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 15:02 
> написан на языке Си

Хм....

> Для повышения безопасности в TinyUSB не применяются операции динамического выделения памяти.

А... вот как они сделали.
Наверное единственный способ добиться хоть какой-то безопасности.

Интересно чего не С++? Там хоть смартпойнтеры есть.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 15:34 
> С++? Там хоть смартпойнтеры есть.

Надо рассказать приплюснутым, пусть попробуют использовать. А то какой-то раст придумали те, кто не смог справку stl осилить.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 16:07 
> смартпойнтеры

в С вместо этого есть defer через расширения компилятора https://thephd.dev/c2y-the-defer-technical-specification-its...


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено _kp , 06-Окт-25 16:58 
На простых контроллерах, для которых этот стек и делается, активное использование памяти из кучи, вызывает её прогрессирующую фрагментацию, и возрастанием  шанса на ошибку при выделении непрерывного блока памяти запрошенного размера.
Это проблема не С/С++, а конкретной платформы, и реализации на ней.

То есть, это оптимизция для работы на том, что есть, из популярных платформ. ;)


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 23:49 
Все верно, но сихейтерам лишь бы уколоть язык лишний раз.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено _kp , 07-Окт-25 10:58 
Например на ESP32(без PSRAM) и STM32 есть проблемы с фрагметацией кучи.
Ибо там не настолько много памяти, что бы почти половину "зарезервировать" ради дефрагментации кучи.
Кстати, выше что то говорили про Раст? На ESP32 у него точно те же самые проблемы с фрагментацией кучи, как и в С++. Ибо это проблема не языка, а именно платформы, и проблем  реализации на ней.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Фамилия , 06-Окт-25 16:27 
JFYI когда у меня встал вопрос поиска USB стэка, мне TinyUSB не понравился, а понравился вот этот стэк: https://github.com/cherry-embedded/CherryUSB . По мне, CherryUSB более простой и понятный. Он более прямолинейный что ли, и более структурированный. И из-за этого выглядит простым. Я его легко подключил в FreeRTOS и написал драйвер для своей релизации USB host'а в ПЛИСине. Пока копался там, никаких отвращений не испытывал.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 18:26 
А зачем самому в Плис делать?

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Фамилия , 07-Окт-25 00:31 
Ну что за вопросы на ресурсе про опен сорс, энтузиазм и ЧСВ :) Просто делаю пет-проект, "убийцу" wacom/huion/remarkable с экраном, где в ПЛИСину на собственном HDL запихиваю всё что мне нужно, в том числе USB хост свой написал. Месяц свободных вечеров потратил на это. Получилось, вроде, по ресурсам даже меньше, чем у опен-сорсных USB 1.1 хостов в интернетах (у меня получилось всего лишь 290 LUTов на xc6slx25).

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 06-Окт-25 23:55 
Большое спасибо, пока бегло ознакомился, выглядит реально хорошо. Тоже какое-то время искал простой, но функциональный юсб стэк, чтоб еще и хорошо был написан. Спасибо!

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Аноним , 07-Окт-25 06:37 
Как USB стек может быть кроссплатформенным? Ведь usb стек это по определению мост между контроллером и системой.

"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Фамилия , 07-Окт-25 16:23 
> Ведь usb стек это по определению мост между контроллером и системой.

Когда говорится про USB стек, то имеется в виду поддержка енумерации, хабов, классов USB (mass storage, serial, ...). Это всё делается чисто программно без привязки к конкретной платформе.


"Опубликован открытый USB-стек TinyUSB 0.19"
Отправлено Джон Титор , 07-Окт-25 11:31 
Это весьма удобно. Ранее никаких стеков не было - люди разные либы собирали в "стек" для поддержки разных протоколов и возможностей чипов.

>> Как USB стек может быть кроссплатформенным?

А я вот смотрю документацию:
TinyUSB полностью потокобезопасен, помещая все события запросов на обслуживание прерываний (ISR) в центральную очередь, а затем обрабатывая их позже в контекстной функции задачи, не связанной с ISR. Он также использует семафор/мьютекс для доступа к общим ресурсам, таким как буфер FIFO класса коммуникационных устройств (CDC). Поэтому стек должен использовать некоторые базовые API ОС. Следующие ОС уже поддерживаются «из коробки».

No OS
FreeRTOS
RT-Thread: repo
Mynewt Из-за системы сборки пакетов Newt примеры MyNewt лучше размещать в его собственном репозитории.