The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

06.10.2025 09:51

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

Для повышения безопасности в TinyUSB не применяются операции динамического выделения памяти. Поддерживается использование в многопоточных приложениях. Для безопасной многопоточной работы все события, связанные с возникновением прерываний, не обрабатываются сразу при поступлении ISR (Interrupt Service Request), а помещаются в очередь, которая разбирается и обрабатывается в контексте выполнения приложения, а не обработчика прерываний. При доступе к совместно используемым ресурсам, таким как FIFO CDC (Communication Device Class), применяются семафоры и мьютексы.

Стек абстрагирован от операционной системы и может использоваться как самодостаточный компонент, не привязанных к функциональности операционных систем. При этом доступны модули для интеграции TinyUSB с ОС FreeRTOS, RT-Thread и Apache Mynewt. Поддерживаются возможности снижения энергопотребления, такие как переход в спящий режим и пробуждение при появлении активности. Имеется начальная реализация протокола PD 3.0 (Power Delivery) для управления передачей электроэнергии через USB Type-C.

TinyUSB позволяет добавлять поддержку собственных классов USB-устройств и хостов без модификации USB-стека. Среди уже поддерживаемых в TinyUSB классов устройств:

  • UAC2 - Audio Class 2.0;
  • BTH HCI - Bluetooth Host Controller Interface;
  • CDC - Communication Device Class;
  • DFU - Device Firmware Update;
  • HID - Human Interface Device (клавиатура, мышь, геймпад);
  • MSC - Mass Storage Class (включая накопители с несколькими логическими устройствами);
  • MIDI - Musical Instrument Digital Interface;
  • MTP/PTP - Media Transfer Protocol;
  • RNDIS, ECM (Ethernet Control Model) и NCM (Network Control Model) - сетевое взаимодействие через USB;
  • USBTMC - Test and Measurement Class;
  • UVC - Video class 1.5;
  • WebUSB.

Поддерживаемые классы USB-хостов:

  • HID - Human Interface Device;
  • MSC - Mass Storage Class;
  • CDC-ACM - Communication Device Class;
  • FTDI, CP210x, CH34x, PL2303 - проброс последовательного порт поверх USB;
  • USB Hub.

В новом выпуске расширен API для устройств и хостов. В реализации USB-хоста появилась поддержка устройств с несколькими конфигурациями. Добавлена поддержка микроконтроллеров и плат:

  • ESP32-H4, ESP32-C5, ESP32-C61;
  • STM32U0, STM32WBA, STM32N6;
  • AT32F405, AT32F403A, AT32F415, AT32F423;
  • CH32V305 и CH32V20x (USB host);
  • MCXA156 SDK 2.16 и FRDM-MCXA156.


  1. Главная ссылка к новости (https://github.com/hathach/tin...)
  2. OpenNews: Выпуск Ventoy 1.1.07, инструментария для загрузки произвольных систем с USB-носителей
  3. OpenNews: Intel реализовал поддержку eUSB2V2 для ядра Linux
  4. OpenNews: Уязвимость в подсистеме Linux-ядра USB Gadget, потенциально позволяющая выполнить код
  5. OpenNews: Атака на заблокированный ПК через USB
  6. OpenNews: В USB-драйверах из состава ядра Linux выявлено 15 уязвимостей
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64005-tinyusb
Ключевые слова: tinyusb, usb
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:01, 06/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –26 +/
    А зачем он нужен, если есть usb c?
     
     
  • 2.3, Аноним (3), 10:27, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Да вы что? Наикрутейшая штука для STM и Atmel! Вы просто не в курсе, что это и для чего это.
     
     
  • 3.6, Смузихлеб забывший пароль (?), 10:46, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Вы просто не в курсе, что это и для чего это.

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

     
     
  • 4.7, Аноним (3), 10:58, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Какая тайна? Это USB стек. Больше и сказать нечего. Можно сделать любое USB устройство из перечисленных на базе любого из перечисленных микроконтроллеров. Вы вообще интересовались, как та же флэшка устроена? Или мышка?
     
  • 4.23, Аноним (23), 13:42, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Если в компетенции создать своё usb устройство, то вам не придется идти "на поклон" консорциуму за ID и платить роялти за каждое выпущенное устройство.
     
     
  • 5.38, КО (?), 16:18, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Кабеля и устройства к нему подключаемые тоже будете создавать? Или может будете сертификацию подтверждать?
    Вещь чисто для энтузиастов со штучными экземплярами, которые ты не сможешь продать
     
  • 5.49, pv (?), 18:45, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    дело не в компетенции, платят за возможность нарисовать на коробочке точечку с тремя стрелочками и рядом написать USB-компатибле.
    никто не запрещает сделать своё устройство, сказать что там инновационная Ultimate Superpuper Bus, что бы это не значило, и выпускать девайсы с любыми пересекающимися VID/PID.

    гугл -> philips i2c vs atmel twi

     
  • 2.5, Neko CWD (?), 10:45, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Это ж либа для протокола. При чём тут разъём?
     
  • 2.8, анонимз (?), 11:00, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    USB c это стек? А я думал это порт.
     
     
  • 3.15, pfg21 (ok), 11:46, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    человек и пароход !! (с) Простоквашино.    
    в спецификации есть и описание разъемов и описание программной части обмена данными и много чего еще. доброе утро подован :)
     
     
  • 4.53, Илитка (?), 20:20, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Сарказма вы не выкупаете явно, товарищ.
     

  • 1.4, Аноним (4), 10:35, 06/10/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –3 +/
     
  • 1.10, крокодил мимо.. (-), 11:23, 06/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    извините за оффтоп, один вопрос:
    - есть ли софтовые решения (для *nix), что позволяют симулировать добавление и извлечение usb-hub из аппаратной конфигурации? аналог "выдернул - вставил обратно"..

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

    спасибо..

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

     
     
  • 2.12, ахахахаха (?), 11:43, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Через proc можно управлять питанием портов, если хаб это умеет.
     
     
  • 3.17, крокодил мимо.. (-), 13:18, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Через proc можно управлять питанием портов, если хаб это умеет.

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

     
  • 2.13, Stanislavvv (ok), 11:44, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.
    Можно попробовать начать с https://askubuntu.com/questions/342061/power-on-off-usb-ports
    Правда, ту поддержку сильно не везде нынче можно найти — на доступных мне компах это получилось только на одном из серверов.
     
     
  • 3.19, крокодил мимо.. (-), 13:24, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Иногда, при наличии аппаратной поддержки, можно выключить и включить usb-порт.

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

     
     
  • 4.54, Илитка (?), 20:21, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Кто такой опёнок?
     
     
  • 5.63, Аноним (63), 07:10, 07/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    OpenBSD
     
  • 3.65, крокодил мимо.. (?), 09:57, 07/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Можно попробовать начать с https://askubuntu.com/questions/342061/power-on-off-usb-ports

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

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

     
  • 2.20, Аноним (23), 13:25, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    - Анализ логов.
    - просмотр в msconfig.
    - как устанавливалось устройство. Компетенция авторов драйверов в плане интеграции оборудования.
    - Само устройство не проходит протокол бутовой инициализации.
     
     
  • 3.21, крокодил мимо.. (-), 13:27, 06/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.39, Аноним (39), 16:19, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Проблема в питании, скорее всего с первого раза не открывается ключ из-за проблем с каким-нибудь конденсатором.
     
     
  • 4.44, крокодил мимо.. (-), 17:39, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Проблема в питании, скорее всего с первого раза не открывается ключ из-за
    > проблем с каким-нибудь конденсатором.

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

     
  • 2.22, Аноним (23), 13:35, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Для unix смотри сообщения журнала ядра.
     
     
  • 3.24, крокодил мимо.. (?), 13:45, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Для unix смотри сообщения журнала ядра.

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

     
     
  • 4.26, Аноним (23), 13:57, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотрите в какой конфигурации компилировалось ядро. В Debian это файл /boot/config-*
     
  • 4.46, Аноним (46), 18:15, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это бессмысленно, устройство в зависоне
     
  • 4.61, Aliech (ok), 01:30, 07/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Товарищ, вангую, что ему (хабу... и устройствам в нём) тупо питания не хватает. Или какое hand-off в настройках фирмвари машины не включено.

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

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

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

     
  • 2.27, smit (??), 14:05, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Драйвер от производителя?
     
  • 2.29, Аноним (29), 14:10, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это самое лучшее прям.
     
  • 2.33, 1111111 (?), 15:23, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    почитай про udev и управление питанием
     
  • 2.45, Аноним (46), 18:13, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Usb-устройства , у которых питание идёт из порта,  следует подключать к компьютеру только после включения питания на компьютере, так как при включении питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор и usb-устройство не понимает как ему соедиться с хостом и виснет. У меня так происходит с usb-адаптером wifi.
     
     
  • 3.52, крокодил мимо.. (-), 19:56, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Usb-устройства , у которых питание идёт из порта,  следует подключать к
    > компьютеру только после включения питания на компьютере, так как при включении
    > питания на компьютере в usb-порт на интерфейсные контакты подаётся случайный мусор
    > и usb-устройство не понимает как ему соедиться с хостом и виснет.
    > У меня так происходит с usb-адаптером wifi.

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

     
     
  • 4.64, Аноним (64), 08:27, 07/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Все бы хорошо, но хаб/девайс тоже имеет право опрашивать порт хоста при подключении. И некоторые девайсы распознают пожключение к порту не по питанию (оно может быть внешним! особенно для хаба), а по смене состояния линий порта. Пока девайс не разлядит там "было в подвешенном состоянии, а теперь там есть что-то" можно  питание порта дергать сколько угодно.
     

  • 1.28, Аноним (28), 14:09, 06/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > а помещаются в очередь, которая разбирается и обрабатывается в контексте выполнения приложения, а не обработчика прерываний.

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

     
     
  • 2.31, Аноним (31), 14:59, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это т.н. best effort решение
    Лучше хоть какой-то дефолт с претензией на "мы подумали о потенциальных проблемах в реальной эксплуатации", чем вообще ничего
     
  • 2.35, Аноним (35), 15:36, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    многопоточка без MMU? это где?
     
  • 2.41, _kp (ok), 16:52, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Речь об отложенной обработке прерываний, а это не обязательно свазано с MMU, а скорее для более предсказуемой реакции на потоки прерываний.
     
  • 2.42, Аноним (42), 16:53, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    При чём здесь MMU и "поломают"? В новости речь про корректную реализацию async-signal safety.

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

     
  • 2.50, Аноним (50), 18:47, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В микроконтроллерах зачастую бывает PMU - защита на уровне диапазонов адресов.
     

  • 1.32, Аноним (32), 15:02, 06/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > написан на языке Си

    Хм....

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

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

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

     
     
  • 2.34, Аноним (35), 15:34, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > С++? Там хоть смартпойнтеры есть.

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

     
  • 2.37, Аноним (37), 16:07, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > смартпойнтеры

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

     
  • 2.43, _kp (ok), 16:58, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На простых контроллерах, для которых этот стек и делается, активное использование памяти из кучи, вызывает её прогрессирующую фрагментацию, и возрастанием  шанса на ошибку при выделении непрерывного блока памяти запрошенного размера.
    Это проблема не С/С++, а конкретной платформы, и реализации на ней.

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

     
     
  • 3.58, Аноним (58), 23:49, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Все верно, но сихейтерам лишь бы уколоть язык лишний раз.
     

  • 1.40, Фамилия (?), 16:27, 06/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    JFYI когда у меня встал вопрос поиска USB стэка, мне TinyUSB не понравился, а понравился вот этот стэк: https://github.com/cherry-embedded/CherryUSB . По мне, CherryUSB более простой и понятный. Он более прямолинейный что ли, и более структурированный. И из-за этого выглядит простым. Я его легко подключил в FreeRTOS и написал драйвер для своей релизации USB host'а в ПЛИСине. Пока копался там, никаких отвращений не испытывал.
     
     
  • 2.47, Аноним (46), 18:26, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем самому в Плис делать?
     
     
  • 3.60, Фамилия (?), 00:31, 07/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну что за вопросы на ресурсе про опен сорс, энтузиазм и ЧСВ :) Просто делаю пет-проект, "убийцу" wacom/huion/remarkable с экраном, где в ПЛИСину на собственном HDL запихиваю всё что мне нужно, в том числе USB хост свой написал. Месяц свободных вечеров потратил на это. Получилось, вроде, по ресурсам даже меньше, чем у опен-сорсных USB 1.1 хостов в интернетах (у меня получилось всего лишь 290 LUTов на xc6slx25).
     
  • 2.59, Аноним (58), 23:55, 06/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Большое спасибо, пока бегло ознакомился, выглядит реально хорошо. Тоже какое-то время искал простой, но функциональный юсб стэк, чтоб еще и хорошо был написан. Спасибо!
     

  • 1.62, Аноним (62), 06:37, 07/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как USB стек может быть кроссплатформенным? Ведь usb стек это по определению мост между контроллером и системой.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру