Разработка протокола для команд и данных через последовательный порт - PullRequest
4 голосов
/ 22 июня 2011

Мне нужен (чтобы спроектировать?) Протокол для связи между микропроцессорным регистратором данных и ПК (или аналогичным) через последовательное соединение.Не будет никаких линий управления, единственный способ, которым устройство / ПК может узнать, связаны ли они, по данным, которые они получают.Соединение может быть разорвано и восстановлено в любое время.Последовательное соединение дуплексное.(8n1)

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

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

Буду признателен за любые комментарии по этому подходу и приветствую любые другие предложения, а также общие замечания.

Замечания: я думаю, что мне придется свернуть свои собственные, поскольку мне это нужно длябыть максимально легким.Я буду брать кусочки из протоколов, предложенных в ответах, а также некоторые другие, которые я нашел ... Слип , PPP и HLDC .

Ответы [ 3 ]

8 голосов
/ 22 июня 2011

Вы можете использовать Google Protocol Buffers в качестве формата обмена данными (также проверьте проект C bindings , если вы используете C). Это очень эффективный формат , хорошо подходящий для таких задач.

3 голосов
/ 19 февраля 2015

Микроконтроллерная межсоединительная сеть (MIN) предназначена именно для этой цели: крошечные 8-разрядные микроконтроллеры, говорящие с чем-то другим.

Код лицензирован MIT, есть встроенный C, а также реализации Python:

https://github.com/min-protocol/min

1 голос
/ 22 июня 2011

Я бы не стал изобретать что-то с нуля, возможно, вы могли бы использовать что-то из прошлого, например ZMODEM или одного из его кузенов? Большинство проблем, о которых вы упомянули, были решены, и, возможно, есть ряд других случаев, о которых вы еще даже не говорили.

Подробная информация о zmodem: http://www.techfest.com/hardware/modem/zmodem.htm

А исходный код c находится в открытом доступе.

...