Читать (или разбирать прочитанное) надо по 1 байту. И собирать последовательность.
Ожидать что Вы прочитаете сразу и всегда правильный ответ целиком - ошибка.
Делаем машину состояний, которая по шагам считывает байты из входного потока и составляет пачку. Далее считаем CRC и разбираем её уже логически (адрес, команда, данные, есть ли такой адрес, можно ли читать/писать и т.п).
Даже при использовании пакет-ориентированных протоколов, например TCP, пачка может, внезапно, быть из 2 частей.