Цитата(Alex_Golubev @ Jan 25 2018, 08:59)

Я так думаю какие-то массивы данных переполняются.
Мне кажется, вы не совсем понимаете парадигму работы USB. Устройство не передаёт данные хосту! Оно кладёт данные у себя в "заветную нычку" (конечную точку) и ждёт пока хост их сам заберёт. Если забрал, то можно ещё положить. Если не забирает, то накапливайте данные вне "нычки" или выкидывайте, тут уж вам решать сколько данные "не протухают".
Цитата(Alex_Golubev @ Jan 25 2018, 08:59)

Хочу еще узнать, что за:
/* Device Status */
#define USBD_STATE_SUSPENDED 4
Это когда хост не проявляет никакой активности на шине. Например, устройство отключили в диспетчере устройств. Можно переводить процессор в режим энергосбережения. Если не стоит задача микроамперы ловить, то можно забить. Хост сам даст RESET когда захочет с вами поработать.
Цитата(SanvaldYV @ Jan 29 2018, 12:30)

#define USBD_STATE_SUSPENDED 4 - по названию понятно, что перевод в некое остановленное состояние, но не знаю в каких случаях хост выполняет перевод подключенного девайса в состояние suspend и выводит из этого состояния (resume), у меня при работе с CDC такое состояние не возникало
Это состояние более низкого уровня. Выход из SUSPEND происходит через RESUME, RESET и Enumeration. Пока "жив CDC" не может быть суспенда.