0xAA55 (или что-то похожее) в качестве заголовка ставь, а в конце пакета фиксированного размера контрольную сумму. )
оу. подумал и вспомнил. как-то в той беседе несколько недель назад все больше думал о синхронизации битрейтов и фаз приемо-передатчиков на физическом уровне - и почему-то переубедил себя, что 0xAA/0x55 лучше всего юзать в качестве начала пакета. и что я, осёл, когда-то по глупости сделал признаком начала 0xFF.
Ага, ща! Не нужно никаких 0xAA/0x55 и вообще ничего, кроме 0xFF не следует использовать. Т.к. на аппаратном уровне всем приемникам вполне достаточно одного (ну пусть даже через многа байт) перепада из 1 в 0 и обратно, чтобы подстроить свои часики. Это вполне обеспечивается последовательностью: стоп-бит, старт-бит, первый бит байта в единичке. Все, засинхронизировали частоты/фазы на много байт вперед.
Теперь пытаемся разобрать где же там все-таки началы-концы байтиков? И тут становится понятно, что если в посылке не встречается байт из полных нулей или единиц, то большущая, недопустимо большущая вероятность съехать по битам - особенно, когда посылки одинаковые. Итого имеем единственный вариант признака начала пакета, он же - синхронизатор часов UART, он же синхронизатор начала байта - это 0xFF. Собсна именно это у меня и работает уже много лет. И да, с другими вариантами были проблемы приема чуши со сдвинутыми битами.
Спасибо, я кончил)