Поскольку асинхронная последовательная связь широко распространена среди электронных устройств даже сегодня, я считаю, что многие из нас время от времени сталкивались с таким вопросом. Рассмотрим электронное устройство D
и компьютер, PC
соединенные последовательной линией (RS-232 или аналогичные) и необходимые для непрерывного обмена информацией . Т.е. PC
каждый посылает командный кадр X ms
и D
отвечает с каждым отчетом о состоянии / телеметрическим кадром Y ms
(отчет может быть отправлен как ответ на запросы или независимо - здесь это не имеет значения). Кадры связи могут содержать любые произвольные двоичные данные . Предполагая, что кадры связи представляют собой пакеты фиксированной длины.
Проблема:
Поскольку протокол является непрерывным, принимающая сторона может потерять синхронизацию или просто "присоединиться" в середине текущего отправленного кадра, поэтому она просто не будет знать, где находится начало кадра (SOF). Если данные имеют различное значение в зависимости от их положения относительно SOF, полученные данные будут повреждены, возможно, навсегда.
Требуемое решение
Надежная схема разграничения / синхронизации для обнаружения SOF с коротким временем восстановления (т. Е. Для повторной синхронизации не требуется, скажем, 1 кадр).
Существующие методы, которые я знаю (и использую некоторые) из:
1) Заголовок / контрольная сумма - SOF как предопределенное значение байта. Контрольная сумма в конце кадра.
- Плюсы: просто.
- Минусы: не надежны. Неизвестное время восстановления.
2) Байтовая начинка:
- Плюсы: надежное, быстрое восстановление, можно использовать с любым оборудованием
- Минусы: не подходит для фиксированной связи на основе кадров
3) Маркировка 9-го бита - каждый байт дополняется дополнительным битом, а SOF помечается, 1
а байты данных помечаются 0
:
- Плюсы: надежное, быстрое восстановление
- Минусы: Требуется аппаратная поддержка. Не поддерживается напрямую большинством
PC
аппаратного и программного обеспечения.
4) Маркировка 8-го бита - вид эмуляции вышеупомянутого, при этом используется 8-й бит вместо 9-го, что оставляет только 7 битов для каждого слова данных.
- Плюсы: надежное, быстрое восстановление, можно использовать с любым оборудованием.
- Минусы: Требуется схема кодирования / декодирования из / в обычное 8-битное представление в / из 7-битное представление. Несколько расточительно.
5) На основе тайм- аута - примите SOF в качестве первого байта после некоторого определенного времени простоя.
- Плюсы: нет данных, просто.
- Минусы: не так надежно. Не будет хорошо работать с плохими системами синхронизации, как, например, Windows PC. Потенциальная пропускная способность.
Вопрос: Какие существуют другие возможные методы / решения для решения проблемы? Можете ли вы указать на недостатки в приведенном выше списке, которые можно легко обойти, удалив их таким образом? Как вы (или вы) разрабатываете свой системный протокол?