Продолжаю серию статей по постройке сети датчиков, коорая медленно перерастает в Умный дом, предыдущая статья тут: viewtopic.php?f=3&t=86
Описание протокола
Структура Протокола
Стартовые байты – передаются всегда в начале пакета, имеются всегда одно и тоже значение 0xF0,0xFF. Служат для разбора поступивших данных и разделения потока данных на пакеты.
Пакет данных – непосредственно сами полезные данные, могут иметь длину до 24 байт и не могут быть пустыми. Значение 24 обусловлено ограничения буфера nRF24L01 в 32 байта. Для не «радио» устройство в принципе не критично.
Чек сумма – рассчитывает по принципу контрольной суммы по AppNot 27 от Maxim. Исторически был использован от первого устройства который работал с ds18b20. Используется для контроля принятого пакета на целостность.
Стоповые байты – передаются всегда в конце пакета данных, имеют всегда одно и тоже значение 0xF0,0xFE. Служат для разбора поступивших данных и разделения потока данных на пакеты.
По rs485 все данные передаются в бинарном виде, представление в шестнадцатеричном виде далее будет употребляться с постфиксом «h».
Для двухбайтных данных в Пакете данных, сначала идет младший, потом старший байт.
Применяется следующий общий принцип формирования протокола:
1. собирается Пакет данных;
2. рассчитывается CRC для собранного пакета данных;
3. дописывается стартовый байт;
4. дописываем стоповый байт.
Далее описываются все части Пакета данных.
Структура Пакета данных
ID устройства отправителя (передатчика) – представляет собой два байта содержащие уникальный идентификатор устройства, передавшего данные. Поле не может быть пустым или иметь значение равное нулю. Идентификатор устройства задается в прошивке и должен быть уникальным в рамках всей сети.
ID устройства получателя (приёмника) - представляет собой два байта содержащие уникальный идентификатор устройства которому предназначены данные. Поле не может быть пустым но может содержать идентификатор 0x00,0x00, это считается широковещательной передачей, адресованное всем устройствам, но такие команды устройства по умолчанию не обрабатывают.
Команда – представляет собой один байт характеризующий назначение Пакета данных и принципа, и структуры разбора Параметров Пакета данных. Значение поля имеет уникальное значение в рамках всей сети. Например, запрос температуры и ответ содержащий температуру будут иметь разные значения в поле Команда. Это позволяет реализовать уникальный обработчик для каждого Пакета данных в зависимости от значения Команды.
Параметры команды – представляет собой набор байтов и зависит от кода команды, поле предназначено для передачи какой-либо информации для конкретной команды и содержит обычно значения с датчиков или управляющие параметры запросов (канал, ID датчиков и т.д.)
Структура ID устройства
Представляет собой два байт содержащих уникальный идентификатор устройства, передавшего или адресата Пакета данных. В первом байте седьмой бит отвечает за Тип канала по которому переданы данные:
0 - передано из rs485;
1 - передано из радиоканала (NRF24L01).
Тип канала используется для маршрутизации Пакетов данных между радио каналом и проводным rs485. По принципу, если в Пакете данных у получателя Тип устройства – радиоканал, то такие Пакеты данных передаются в радиоэфир.
Оставшиеся семь бит и второй байт используется для указания Типа устройства.
Перечень Типов устройств (красным выделены уже реализованные)
Структура Команды
Примеры:
P.S. Все примеры даны для реальных устройств, чтобы было понимание деталей протокола. В описании всех команд (таблицы) не указано поле со стартовым, стоповым байтами и crc (для сокращения размера документа). В команде для Hercules, эти байты приведены, т.е. в нем полная команда на которую должно ответить устройство или эмулировать его ответ.
Все запросы и ответы приведены для формата, который использует Hercules SETUP utility: http://www.hw-group.com/products/hercules/index_en.html. Не забываем ставить галку HEX справа от текста команды!
Проверять CRC удобно используя вот этот калькулятор: http://tomeko.net/online_tools/crc8.php?lang=en
Квитанция (подтверждение на запрос)
Команда для Hercules SETUP utility: F0FF020104010108F0FE
Ping устройства «контроллер ds18b20» от Logger
Команда для Hercules SETUP utility: F0FF0201040102EAF0FE
Ответ на «Ping» устройства от контроллера ds18b20 на Logger
Команда для Hercules SETUP utility: F0FF0401020103F9F0FE
Запрос на отправку температуры с датчиков ds18b20
Команда для Hercules SETUP utility: F0FF0201040104003DF0FE
Отправка температуры от ds18b20 всем
Команда для Hercules SETUP utility: F0FF040100000528f2602402000022e20431F0FE
Установка задержки опроса датчиков температуры ds18b20 для контроллер ds18b20
Команда для Hercules SETUP utility: F0FF020104010828004FF0FE
Установка скорости передачи данных в 1920 бод для контроллера ds18b20
Команда для Hercules SETUP utility: F0FF020104010B004B7AF0FE
Включить вывод отладки в USART для контроллера ds18b20
Команда для Hercules SETUP utility: F0FF020104010CF5F0FE
ВЫключить вывод отладки в USART
Команда для Hercules SETUP utility: F0FF020104010DABF0FE