Я программирую STM32F373RCT и пытаюсь создать виртуальное USB-устройство comport. если я отправляю данные со скоростью примерно до 960 бит в секунду (я использовал таймер (50 Гц) и передаю 14 байтов в каждом цикле), связь работает правильно, но если я попытаюсь отправить данные больше, некоторые данные будут потеряны. Мне нужно увеличить скорость передачи данных. Как увеличить?
stm32f3 USB VCP работает нестабильно
Ответы (3)
USB имеет встроенное управление потоком, поэтому вы сможете отправлять данные как можно быстрее, не теряя никаких данных. Ошибка либо в используемом вами стеке USB, либо в коде, который вы используете для отправки данных в стек USB. Если вы сможете определить и исправить эту ошибку, вы сможете отправлять данные намного быстрее, ничего не теряя.
Это может быть ошибка драйвера или связанных с ним настроек. Один из моих проектов, который использует STM32F103 для отправки данных со скоростью ~ 600 КБ / с через USB, когда-то был выполнен с VCP и работал нормально, пока не было обновлено ядро Linux. Новое ядро поставляется с драйвером, который случайным образом отбрасывает данные на высокой скорости, предположительно из-за разных настроек буфера.
Чтобы решить эту проблему, я переключился на libusb
и обрабатывал все BULK-пакеты в пользовательском пространстве. Он работал очень хорошо, как по надежности, так и по задержке (если используется асинхронный API).
Я также создал устройства на базе STM32F103, которые работают с flashrom
и могут передавать данные со скоростью более 800 КБ/с через VCP без любая потеря или проблема, так что я думаю, что это больше о настройке буфера.
Я нашел проблему. В моем коде активны 3 прерывания таймера, и они имеют высокий приоритет. Прерывание USB имеет низкий приоритет. когда USB подключен к компьютеру, новый код остановит прерывания таймеров. USB-связь теперь стабильна. Большое спасибо за ваш комментарий.