Протокол обмена по UART

From r-wiki
Jump to: navigation, search

Общая информация

В документе приведено описание протокола обмена с оборудованием R-CALL по последовательному интерфейсу. В частности, приведено описание протокола для пультов серии ПА и беспроводного адаптера БПА, оснащенных USB интерфейсом. Основные характеристики интерфейса:

  • физический и канальный интерфейс – USB;
  • логический интерфейс – Virtual COM Port;
  • скорость обмена по UART – 56700, режим 8N1.

В устройствах с платой МРК (модуль радиоканала) версии до 4.0 установлен преобразователь USB-UART FT323BM (FTDI Chip), свежие версии драйверы под различные ОС доступны на сайте производителя.

Начиная с версии PCB 4.0 в МРК устанавливается конвертер USB-COM CP2102 (Silicon Labs). Драйверы доступны на сайте производителя.

После установки необходимых драйверов при подключении устройства к компьютеру в системе будет появляться дополнительный последовательный порт, по которому производится обмен данными с устройством.

Поле размер, байт) Описание
HEADRER0 1 Маркер начала (0xAF)
HEADRER1 1 Маркер начала (0xFA)
LEN 2 (uint16_t) Длина всего пакета (от маркера начала до CRC)
MSGDATA LEN-6 Данные сообщения
CRC16 2 Контрольная сумма

Обмен с пультами серии ПА/ПВ в версией ПО МРК до 4.0 происходит по протоколу версии 1.0. Начиная с ПО версии 4.0 поддерживается команды протокола версии 2.0. Узнать версию ПО можно с помощью команды SP_GET_DEV_INFO.

Разделение на версии 1.0 и 2.0 протокола сделано для того, что бы обеспечить совместимость разрабатываемого нового ПО с ранее выпущенным оборудованием и, одновременно, ввести новые функции, т.к. простое добавление новых команд в протокол делает невозможным создание "прозрачного" серверного ПО для оборудования с унифицированным сетевым интерфейсом (есть вариант с проверкой версии оборудования самим серверным ПО).

Команда Код Описание БПА ПА-1/2/5/10-И ПП-5/10
Команды протокола R-SP 1.0
SP_GET_DEV_INFO 0x10 Проверка подключения и определение типа устройства X X X
SP_SET_DEFAULTS 0x30 Установка параметров по умолчанию X X X
SP_DATETIME 0x31 Установка/чтение даты и времени X X
SP_RF_NET_PARAMS 0x32 Установка/чтение группы и номера устр-ва X X
SP_CFG 0x33 Установка/чтение настроек X X
SP_LOG_CTRL 0x40 Чтение параметров архива событий и его сброс (начиная с версии ПО МРК 2.4.0) X X
SP_GET_LOG_ITEM 0x41 Чтение элемента архива (начиная с версии ПО МРК 2.4.0) X X
SP_SEND_PGR_CALL 0x51 Передача вызова на пейджер X X X
SP_EVENT 0x48 Вывод принятого сообщения X X
SP_FREQ_CTRL 0xF1 Установка/чтение коэффициента коррекции частоты (только для производителя!) X X
Команды, поддерживаемые начиная с версии протокола R-SP 2.0
SP_SEND_ADV_CALL 0x52 Расширенная передача сообщения X X X

Описание команд

SP_SETDEFAULTS

Направление: хост -> устройство. Команда устанавливает настройки устройства в значения по умолчанию (список настроек и их значения зависят от устройства). Запрос: в запросе передается один байт, равный значению кода команды - 0x30.

Поле Размер, байт Описание
Cmd 1 Код сообщения (0x30)

Ответ: в ответ устройство должно вернуть такую же команду.

SP_DATETIME

Направление: хост <-> устройство. Команда предназначена для установки и чтения времени/даты устройства.

Запрос:

Поле Размер, байт Описание
Cmd 1 Код команды (0x31)
Ctrl 1 Бит 0: 0 - чтение; 1 - запись
YearMonth 1 Биты 7..4 - год; биты 3..0 - месяц
Day 1 День месяца
Hour 1 Часы
Min 1 Минуты
Sec 1 Секунды

Ответ устройства: в ответ устройство посылает такую же команду, как и в запросе; в ответе содержится прочитанное из устройства дата и время.

SP_LOG_CTRL (формат команды с версии МРК 2.4.0)

Направление: хост <-> устройство.

Запрос:

Поле Размер, байт (тип) Описание
Cmd 1 Код команды (0x40)
Ctrl 1 Бит 1: 1 – сброс архива
LogLen 2 (uint16_t) Кол-во записей в архиве
LogMaxLen 2 (uint16_t) Максимально хранимое кол-во записей в архиве
CurPos 2 (uint16_t) Индекс последней записи в архиве

Для сброса архива необходимо установить 1-й бит поля Ctrtl, в результате происходит обнуление счетчика LogLen, а текущий индекс записи CurPos становится равен -1. При добавлении каждой записи значения LogLen и CurPos увеличиваются на 1. После достижения максимального адреса происходит проворачивание индекса CurPos и запись начинается с индекса 0. Значение LogLen не обнуляется и продолжает увеличиваться. По сути, архив событий представляет собой кольцевой буфер размером LogMaxLen.

Ответ: в ответ на эту команду устройство возвращает такую же команду, как и в запросе, но с заполненными полями LogLen, LogMaxLen и CurPos.

SP_GET_LOG_ITEM (формат команды с версии МРК 2.4.0)

Направление: хост <-> устройство.

Команда чтения записи из архива событий устройства с указанным индексом.

Запрос:

Поле Размер, байт (тип) Описание
Cmd 1 Код команды (0x41)
RecIdx 2 (uint16_t) Индекс запрашиваемого события

Ответ:

Поле Размер, байт (тип) Описание
Cmd 1 Код команды (0x41)
RecIdx 2 (uint16_t) Индекс запрашиваемого события
Event sizeof(TEvent) Событие

В ответе передается хранящаяся в архиве запись события по индексу RecIdx в виде структуры TEvent, содержащей в своем поле Data структуру TEvData_RFMsg.

Начиная с версии ПО МРК 4.0 в ответе на команду SP_GET_LOG_ITEM для каждого события в поле Status структуры Event передается поле data из структуры TMsg. В сообщениях посылки вызова и сброса c кодами 0x4 и 0x5 в этом поле содержится номер стола.

SP_EVENT

Направление: хост <- устройство.

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

Поле Размер, байт (тип) Описание
Cmd 1 Код команды (0x48)
RecNum 2 (uint16_t) 0x0000
Event (TEvent) Событие

Начиная с версии ПО МРК 4.0 в поле Status структуры Event передается значение data из принятого сообщения TMsg.

SP_SEND_ADV_CALL

Направление: хост -> устройство (БПА/ПА).

При получении команды устройство формирует и передает в эфир сообщение с заданными в команде в структуре TEvData_RFMsg и в поле data реквизитами.

Поле Размер, байт (тип) Описание
Cmd 1 Код команды (0x52)
RecNum (TEvData_RFMsg) Данные передаваемого в эфир сообщения TMsg
data 1 (uint8_t) Поле data передаваемого сообщения TMsg

Структуры, типы и определения

typedef struct 
{
  TDateTime   dt;
  U8          Code;
  U8          Status;
  U8          Data[4];
} TEvent;
class TEvData_RFMsg
{
public:

  U8  dev_info;            // Grp (2), DestDevClass (3), SrcDevClass (3)
  U8  dest_addr;           // 
  U8  src_addr;            // 
  U8  msg;                 // Msg (8)
}