Пакетный протокол обмена данными

Сб 23 Октябрь 2010 by admin

Общее описание протокола

В данной статье будет рассмотрен  пакетный протокол обмена данными по любому последовательному интерфейсу. Он поддерживает как соединение типа точка-точка, так и работу в сети.

Работа по протоколу синхронная, в сети может присутствовать только один мастер и неограниченное количество подчиненных устройств. Если быть точнее, количество устройств в сети ограничено цифрой 255, т.к. на адрес отводится один байт.

За счет использования синхронного режима работы, обеспечивается гарантированная доставка сообщений. Каждое сообщение имеет подтверждение.

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

Плюсы текстовой передачи:

  • Отсутствие необходимости подмены байт при совпадении со значением служебных (байт-стаффинг);
  • Возможность работы из любой терминальной программы.

Техническая реализация

Рассмотрим формат сообщения:

[text]: 00 11 22 33 .. 33 44 0D 0A
| |  |  |  |        |  |  |
| |  |  |  |        |  |  EOF
| |  |  |  |        |  CR
| |  |  |  DATA     CRC
| |  |  LEN
| |  CMD
| ADDRESS
SOF[/text]

SOF - стартовый байт, в моем варианте соответствует символу ":" (двоеточие), позволяет однозначно идентифицировать начало пакета данных;

ADDRESS - адрес подчиненного устройства;

CMD - код команды;

LEN - длина полезных данных;

DATA - полезные данные;

CRC - контрольная сумма пакета, вычисленная по алгоритму CRC8;

CR, EOF - два байта, соответствующие концу пакета (0x0D - возврат каретки, 0x0A - перевод строки).

Длина сообщения в данной реализации ограничена 255 байтами, для ее увеличения необходимо модифицировать формат пакета, увеличив количество байт, отвечающих за передачу длины полезных данных и использовав CRC16 или CRC32 для контроля целостности данных.

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

На данный момент, протокол на стороне МК реализован на платформах MSP430F1x и MSP430F2x. На стороне ПК протокол реализован с виде DLL-библиотеки, написанной на языке C#.

Благодарности

Идеи для реализации протокола были мной взяты из проектов WAKE и FreeMODBUS.