и таки нашёл проблему, которая хз из-за чего возникает. Когда надо прочитать 4 байта, и проверить что они есть необходимо делать задержку, причём внушительную, иначе программа куда-то уплывает
Помню что из-за прерываний и переключений между процессами, при работе с com-портом после вычитки 16 байт была задержка в 10мс. А максимальный бодрейт работающий без задержек был 230400. И это особенность винды, о которой есть тема на stackoverflow и ещё парочке зарубежных форумов. Но обходилось это ограничение вроде только у чипов FTDI и драйвером определённой версии.