Имеется железка, которая реализует класс USB CDC. Она посылает с некоторой периодичностью пакеты данных длиной 32 байта. Максимальный размер пакета конечной точки BULK как раз 32 байта. Таким образом каждый пакет данных приходит целиком и они не могут перемешаться на этапе передачи по USB. Чисто гипотетически если работать через libusb, то проблем быть не должно.
Но я пытаюсь работать через QtSerialPort и данные приходят не очень хорошо. Я делаю port->read(buffer, 32) в обработчике сигнала readyRead. В итоге сразу после открытия порта до первого пакета GUI висит (вероятно, Linux закешировал несколько последних байт и сигнал readyRead сработал сразу после открытия порта, но 32 байта не набралось, поэтому повис блокирующий вызов). И данные выдаются неверные (скорее всего съехало разбиение на 32-байтовые пакеты).
В общем, надо как-то отключить буферизацию и сбросить все буферы после открытия, а потом читать по 32 байта.