Кстати, вот второй протокол чик, вроде мне зайдёт в один проект, завтра буду курить, но по переписке похоже на нужную вещь.
Я не совсем понял зачем твоё шаманство нужно с изменением первых 2х байт посылки и как это прокуривает приёмник?
я юзаю один уникальный символ как стартовый + синхронизирующий. до того обсуждения юзал 0xFF (все единицы, потом гарантированно один стоповый бит вставляется аппаратно - есть за что зацепиться). сейчас понял, что нужно его изменить на биточередующийся, например 0xAA - будет надежней. Но не суть.
Идея в том, что стартовый байт - уникальный, в теле пакета встретиться не имеет права. А как это обеспечить, если бинарные данные? А тогда вводим еще один, другой, служебный символ. Если в теле пакета встретился совпадач со стартовым, то он заменяется на пару служебный + любой другой. Если встретился совпадающий со служебным - то шлется два служебных. Примерно как сделано форматирование с обработке строк в си: '\0' = 0x00, '\\' = \