Результат оказался плачевным. Устройство отвечает почти ровно на половину запросов, а на остальное не отвечает. На осциллографе диаграмма тоже как-то странно выглядит -- вроде ответы есть, но один ответ длинный, а другой -- короткий.
Поставил точку остановки на место, где генерируется ошибка "нет ответа", и посмотрел, что пришло. Оказалось, что ответ прекрасно пришёл, но в нём написано, что длина поля данных составляет 0 байт. То есть, я выгребал слишком быстро.
А такой вариант я не предусмотрел. Первичная проверка целостности у меня делалась по длине пакета. И минимальная возможная длина соответствовала одному входящему значению. Если длина меньше, пакет считался заведомо неполным! А зря.
Я уменьшил возможную длину пакета, а также ввёл дополнительный статус, кроме "пакет неполный", "сумма не совпадает" и "пакет полный". Теперь пакет может быть "полный, но пустой".