Доступен выпуск проекта TinyUSB 0.19, развивающего кросс-платформенный USB-стек для встраиваемых систем. Предоставляются компоненты USB-стека для USB-хостов (USB Host) и для подключаемых устройств (USB Device). Код проекта написан на языке Си и распространяется под лицензией MIT...Подробнее: https://www.opennet.me/opennews/art.shtml?num=64005
А зачем он нужен, если есть usb c?
Да вы что? Наикрутейшая штука для STM и Atmel! Вы просто не в курсе, что это и для чего это.
> Вы просто не в курсе, что это и для чего это.это какая-то ужасная тайна, раскрыть которую анон всё-таки не решился ?
Какая тайна? Это USB стек. Больше и сказать нечего. Можно сделать любое USB устройство из перечисленных на базе любого из перечисленных микроконтроллеров. Вы вообще интересовались, как та же флэшка устроена? Или мышка?
Если в компетенции создать своё usb устройство, то вам не придется идти "на поклон" консорциуму за ID и платить роялти за каждое выпущенное устройство.
Кабеля и устройства к нему подключаемые тоже будете создавать? Или может будете сертификацию подтверждать?
Вещь чисто для энтузиастов со штучными экземплярами, которые ты не сможешь продать
дело не в компетенции, платят за возможность нарисовать на коробочке точечку с тремя стрелочками и рядом написать USB-компатибле.
никто не запрещает сделать своё устройство, сказать что там инновационная Ultimate Superpuper Bus, что бы это не значило, и выпускать девайсы с любыми пересекающимися VID/PID.гугл -> philips i2c vs atmel twi
Это ж либа для протокола. При чём тут разъём?
USB c это стек? А я думал это порт.
человек и пароход !! (с) Простоквашино.
в спецификации есть и описание разъемов и описание программной части обмена данными и много чего еще. доброе утро подован :)
Сарказма вы не выкупаете явно, товарищ.
> написан на языке СиСколько тут переполнений буферов?
извините за оффтоп, один вопрос:
- есть ли софтовые решения (для *nix), что позволяют симулировать добавление и извлечение usb-hub из аппаратной конфигурации? аналог "выдернул - вставил обратно"..столкнулся с usb-хабом/концентратором, который не подхватывается "автоматом" при холодном старте, только после физического извлечения и вставки обратно.. не уверен, что даже если подобное решение существует - оно поможет, т.к. дело, скорее всего, в железе хаба..
спасибо..
p.s.:
в виндоус, кмк, можно удалить хаб из конфигурации, сохранить её и потом провести "ре-скан" оборудования, который должен "найти" удалённое (в device mgr).. не пробовал.. но проблемный хаб не цепляется с холодного старта и в вин10..
Через proc можно управлять питанием портов, если хаб это умеет.
> Через proc можно управлять питанием портов, если хаб это умеет.спасибо.. не получается.. и рецепты ниже - не работают:
https://kernel.org/doc/Documentation/usb/power-management.txt
Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.
Можно попробовать начать с https://askubuntu.com/questions/342061/power-on-off-usb-ports
Правда, ту поддержку сильно не везде нынче можно найти — на доступных мне компах это получилось только на одном из серверов.
> Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.спасибо, не в этом случае.. рецепты с kernel.org тоже не работают.. нужно не "linux-only" решение (хаб для опёнка брал)..
Кто такой опёнок?
OpenBSD
> Можно попробовать начать с 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-хабом, ни проблемной железкой.. к сожалению..
- Анализ логов.
- просмотр в msconfig.
- как устанавливалось устройство. Компетенция авторов драйверов в плане интеграции оборудования.
- Само устройство не проходит протокол бутовой инициализации.
> - Само устройство не проходит протокол бутовой инициализации."да!"©
Проблема в питании, скорее всего с первого раза не открывается ключ из-за проблем с каким-нибудь конденсатором.
> Проблема в питании, скорее всего с первого раза не открывается ключ из-за
> проблем с каким-нибудь конденсатором.дык о то ж.. поэтому ищу софтовое решение, чтобы работало не только для lin, но и в openbsd.. пытаюсь через интерфейс контроллера что-то нащупать (методом тыка), т.к. нет готовых решений (или не нашёл).. и, кмк, столкнулся с тем, что не все usb-root-hub поддерживают софтовое управление питанием (цель - или выкл/вкл питание в слоте usb через рут-хаб, или как-то пнуть проблемный хаб на повторный инит)..
Для unix смотри сообщения журнала ядра.
> Для unix смотри сообщения журнала ядра.в том-то и дело, что с холодного старта нет ничего.. сообщения появляются только после того, как его вытянешь и обратно ткнёшь..
пытаюсь что-то наваять через "USB_REQUEST struct usb_ctl_request", не получается.. и чувствую себя в роли обезьяны с гранатой..
Посмотрите в какой конфигурации компилировалось ядро. В Debian это файл /boot/config-*
Это бессмысленно, устройство в зависоне
Товарищ, вангую, что ему (хабу... и устройствам в нём) тупо питания не хватает. Или какое hand-off в настройках фирмвари машины не включено.Первое могло проявится от того, что когда при старте машины фирмваря опрашивала usb, то слишком много всего одновременно было опрошено в данном хабе, и всем устройствам не хватило питания. Ну и весь хаб в небытие отправился.
Второе - аналогично первому, но фирмваря тупо "не отпустила" хаб. Какой-нибудь костыль для Шиндовс, например.
Начните с питалова.
Драйвер от производителя?
Это самое лучшее прям.
почитай про udev и управление питанием
Usb-устройства , у которых питание идёт из порта, следует подключать к компьютеру только после включения питания на компьютере, так как при включении питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор и usb-устройство не понимает как ему соедиться с хостом и виснет. У меня так происходит с usb-адаптером wifi.
> Usb-устройства , у которых питание идёт из порта, следует подключать к
> компьютеру только после включения питания на компьютере, так как при включении
> питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор
> и usb-устройство не понимает как ему соедиться с хостом и виснет.
> У меня так происходит с usb-адаптером wifi.нет.. при ините ядра (это верно и для вин, и для *nix) идёт probe/опрос оборудования.. после получения ответа - конфиг железа (грубо говоря).. подобное поведение хаба (без отклика с холодного старта) - не является нормой.. думаю, что и с вашим адаптером тоже не всё гладко..
Все бы хорошо, но хаб/девайс тоже имеет право опрашивать порт хоста при подключении. И некоторые девайсы распознают пожключение к порту не по питанию (оно может быть внешним! особенно для хаба), а по смене состояния линий порта. Пока девайс не разлядит там "было в подвешенном состоянии, а теперь там есть что-то" можно питание порта дергать сколько угодно.
релюшкой +5 :)
> а помещаются в очередь, которая разбирается и обрабатывается в контексте выполнения приложения, а не обработчика прерываний.Но на устройствах без MMU вся память доступна на чтение и запись абсолютно всем, поэтому нет разницы, что поломают, один из сервисов, или обработчик прерывания.
Это т.н. best effort решение
Лучше хоть какой-то дефолт с претензией на "мы подумали о потенциальных проблемах в реальной эксплуатации", чем вообще ничего
многопоточка без MMU? это где?
Речь об отложенной обработке прерываний, а это не обязательно свазано с MMU, а скорее для более предсказуемой реакции на потоки прерываний.
При чём здесь MMU и "поломают"? В новости речь про корректную реализацию async-signal safety.Грубо говоря, поместив в README фразу "...thread-safe... interrupt events are deferred then handled in the non-ISR task function", разработчики дают понять что имеют элементарную квалификацию писать драйвера с ISR-обработчиками (а также программы с fork(), обработчики сигналов и много чего ещё).
В микроконтроллерах зачастую бывает PMU - защита на уровне диапазонов адресов.
> написан на языке СиХм....
> Для повышения безопасности в TinyUSB не применяются операции динамического выделения памяти.
А... вот как они сделали.
Наверное единственный способ добиться хоть какой-то безопасности.Интересно чего не С++? Там хоть смартпойнтеры есть.
> С++? Там хоть смартпойнтеры есть.Надо рассказать приплюснутым, пусть попробуют использовать. А то какой-то раст придумали те, кто не смог справку stl осилить.
> смартпойнтерыв С вместо этого есть defer через расширения компилятора https://thephd.dev/c2y-the-defer-technical-specification-its...
На простых контроллерах, для которых этот стек и делается, активное использование памяти из кучи, вызывает её прогрессирующую фрагментацию, и возрастанием шанса на ошибку при выделении непрерывного блока памяти запрошенного размера.
Это проблема не С/С++, а конкретной платформы, и реализации на ней.То есть, это оптимизция для работы на том, что есть, из популярных платформ. ;)
Все верно, но сихейтерам лишь бы уколоть язык лишний раз.
Например на ESP32(без PSRAM) и STM32 есть проблемы с фрагметацией кучи.
Ибо там не настолько много памяти, что бы почти половину "зарезервировать" ради дефрагментации кучи.
Кстати, выше что то говорили про Раст? На ESP32 у него точно те же самые проблемы с фрагментацией кучи, как и в С++. Ибо это проблема не языка, а именно платформы, и проблем реализации на ней.
JFYI когда у меня встал вопрос поиска USB стэка, мне TinyUSB не понравился, а понравился вот этот стэк: https://github.com/cherry-embedded/CherryUSB . По мне, CherryUSB более простой и понятный. Он более прямолинейный что ли, и более структурированный. И из-за этого выглядит простым. Я его легко подключил в FreeRTOS и написал драйвер для своей релизации USB host'а в ПЛИСине. Пока копался там, никаких отвращений не испытывал.
А зачем самому в Плис делать?
Ну что за вопросы на ресурсе про опен сорс, энтузиазм и ЧСВ :) Просто делаю пет-проект, "убийцу" wacom/huion/remarkable с экраном, где в ПЛИСину на собственном HDL запихиваю всё что мне нужно, в том числе USB хост свой написал. Месяц свободных вечеров потратил на это. Получилось, вроде, по ресурсам даже меньше, чем у опен-сорсных USB 1.1 хостов в интернетах (у меня получилось всего лишь 290 LUTов на xc6slx25).
Большое спасибо, пока бегло ознакомился, выглядит реально хорошо. Тоже какое-то время искал простой, но функциональный юсб стэк, чтоб еще и хорошо был написан. Спасибо!
Как USB стек может быть кроссплатформенным? Ведь usb стек это по определению мост между контроллером и системой.
> Ведь usb стек это по определению мост между контроллером и системой.Когда говорится про USB стек, то имеется в виду поддержка енумерации, хабов, классов USB (mass storage, serial, ...). Это всё делается чисто программно без привязки к конкретной платформе.
Это весьма удобно. Ранее никаких стеков не было - люди разные либы собирали в "стек" для поддержки разных протоколов и возможностей чипов.>> Как USB стек может быть кроссплатформенным?
А я вот смотрю документацию:
TinyUSB полностью потокобезопасен, помещая все события запросов на обслуживание прерываний (ISR) в центральную очередь, а затем обрабатывая их позже в контекстной функции задачи, не связанной с ISR. Он также использует семафор/мьютекс для доступа к общим ресурсам, таким как буфер FIFO класса коммуникационных устройств (CDC). Поэтому стек должен использовать некоторые базовые API ОС. Следующие ОС уже поддерживаются «из коробки».No OS
FreeRTOS
RT-Thread: repo
Mynewt Из-за системы сборки пакетов Newt примеры MyNewt лучше размещать в его собственном репозитории.