Анализ данных UART с разделением по времени

Пытаясь правильно выполнить обратный инжиниринг и декодировать данные в соединении UART, я пришел к следующим выводам относительно формата полученных данных.

Данные отправляются в «пакетах». Каждый пакет ограничен только временем (пробелами) между передачами.Пакеты имеют переменную длину. Длина указывается третьим байтом в последовательности.Данныене формируется с использованием любых специальных символов или внеполосных сигналов, но действительный пакет данных может быть (предполагается, что) действительным на основе последнего байта, который является значением контрольной суммы кадра.

При использовании логического анализатора легко различить пакеты. Однако подача данных через UART в программу делает разграничение пакетов невозможным. Все полученные данные ставятся в очередь операционной системой. Хотя некоторые обработчики могут быть добавлены для запуска событий получения данных, это не гарантирует, что данные, доступные в очереди uart ОС, будут представлять собой целый пакет.

Есть ли лучшие практики для разделения таких данных?

Приложение:

Мое текущее решение (с огромными накладными расходами и большим количеством ошибок):

Начиная с первого байта в очереди, попробуйте разобрать кадр. Если указанный в кадре размер больше 0x20 (нет пакетов размером более 32 байт, включая заголовок и контрольную сумму), то текущий «начальный байт» считается недействительным и отбрасывается, а распознавание продолжается со следующего байта и т. Д.)

Другое решение, над которым я работаю, - это использование микроконтроллера для анализа данных и их правильного формирования, как внутри, так и вне полосы. Это лучшее решение, поскольку такой чувствительный ко времени протокол должен требовать ОСРВ. Но, тем не менее, должен быть способ реализовать это на нормальной ОС.

Логический анализатор: (Первый и второй байты НЕ постоянны. Я вычел, что первый байт является адресом (или, возможно, временным интервалом, а второй байт - типом пакета).

Ответы на вопрос(1)

Ваш ответ на вопрос