ИИ

Бинарный протокол TBFP: особенности и сферы применения

Краткое резюме

TBFP — это простой бинарный протокол, разработанный для работы с микроконтроллерами и тестирования различных интерфейсов. Он работает по принципу master-slave и используется для временных нагрузочных тестов, отладки оборудования и проверки кабелей.

В нашем отделе существует 12 различных бинарных протоколов. Мы попытались создать один универсальный, но в итоге у нас появился 13-й протокол. Всем разработчикам известен этот старый анекдот. В данной статье я хочу рассказать о простом бинарном протоколе, который я разработал много лет назад для практических нужд при работе с микроконтроллерами. Я назвал его TBFP (Trivial Binary Frame Protocol). Обычно TBFP используется для тестирования интерфейсов, таких как BLE, RS485, LoRa, RS232, GFSK, UWB, CAN, UART, LIN, 1wire, 100 BASE-T1 и других. Этот протокол применяется для временных нагрузочных тестов, испытаний, отладки оборудования, проверки кабелей, тестов на потерю данных и т. п. По сути, TBFP является временным и кустарным аналогом ICMP. TBFP работает по принципу master-slave, общение происходит в диалоговом режиме: запрос — ответ. **Основные понятия:** * Пакет — массив байтов с бинарной структурой известного типа данных. * Little-Endian — способ хранения переменных в памяти, при котором младший байт идёт первым. * Payload — полезные данные, передаваемые пакетом. * Преамбула — константные данные в начале пакета, сигнализирующие приёмнику о начале протокольного пакета. * Пакетная синхронизация — метод определения границ пакетов в потоке байтов в реальном времени. **Требования к протоколу:** * Протокол должен быть бинарным. * Протокол должен быть предельно простым, чтобы минимизировать вероятность сбоев. * Пакет должен иметь преамбулу (синхробайты), причём преамбула должна быть настраиваемой. * Должен быть порядковый номер пакета (Sequence Number) разрядностью не менее 16 бит. * Должно быть поле, указывающее длину полезных данных. * Многобайтовые поля в заголовках следует передавать в формате Little Endian. * В пакете должна быть контрольная сумма CRC, расположенная в конце пакета. * Должен быть идентификатор типа полезных данных. * Должно быть подтверждение принятого пакета, которое можно отключить. * Должна быть предусмотрена повторная отправка в случае отсутствия подтверждения (ReTx), которую также можно отключить. * Пакетная синхронизация должна осуществляться по преамбуле и по time-stamp(у). * Должен быть периодический Hello пакет для каждой node (keep alive messages). * Должен быть сторожевой таймер на потерю соединения. * Протокол должен позволять обновлять прошивку, перезагружать плату, настраивать RTC, читать и записывать физическую память, передавать свои пакеты и выполнять другие операции с электронной платой. Я постарался сделать так, чтобы структура пакета TBFP не менялась слишком сильно, как в случае с UDS. Преамбула занимает 1 байт и необходима для программного распознавания начала пакета.

Фильтры и сортировка