Умный дом: протокол

Мои поделки
Ответить
TechMike
Site Admin
Сообщения: 227
Зарегистрирован: Вт окт 06, 2009 3:37 pm
Контактная информация:

Умный дом: протокол

Сообщение TechMike »

Продолжаю серию статей по постройке сети датчиков, коорая медленно перерастает в Умный дом, предыдущая статья тут: viewtopic.php?f=3&t=86

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

Структура Протокола
1_Protocol.jpg
1_Protocol.jpg (26.04 КБ) 12347 просмотров
Стартовые байты – передаются всегда в начале пакета, имеются всегда одно и тоже значение 0xF0,0xFF. Служат для разбора поступивших данных и разделения потока данных на пакеты.
Пакет данных – непосредственно сами полезные данные, могут иметь длину до 24 байт и не могут быть пустыми. Значение 24 обусловлено ограничения буфера nRF24L01 в 32 байта. Для не «радио» устройство в принципе не критично.
Чек сумма – рассчитывает по принципу контрольной суммы по AppNot 27 от Maxim. Исторически был использован от первого устройства который работал с ds18b20. Используется для контроля принятого пакета на целостность.
Стоповые байты – передаются всегда в конце пакета данных, имеют всегда одно и тоже значение 0xF0,0xFE. Служат для разбора поступивших данных и разделения потока данных на пакеты.
По rs485 все данные передаются в бинарном виде, представление в шестнадцатеричном виде далее будет употребляться с постфиксом «h».
Для двухбайтных данных в Пакете данных, сначала идет младший, потом старший байт.
Применяется следующий общий принцип формирования протокола:
1. собирается Пакет данных;
2. рассчитывается CRC для собранного пакета данных;
3. дописывается стартовый байт;
4. дописываем стоповый байт.

Далее описываются все части Пакета данных.
Структура Пакета данных
2_DataPacket.jpg
2_DataPacket.jpg (25.74 КБ) 12347 просмотров
ID устройства отправителя (передатчика) – представляет собой два байта содержащие уникальный идентификатор устройства, передавшего данные. Поле не может быть пустым или иметь значение равное нулю. Идентификатор устройства задается в прошивке и должен быть уникальным в рамках всей сети.
ID устройства получателя (приёмника) - представляет собой два байта содержащие уникальный идентификатор устройства которому предназначены данные. Поле не может быть пустым но может содержать идентификатор 0x00,0x00, это считается широковещательной передачей, адресованное всем устройствам, но такие команды устройства по умолчанию не обрабатывают.

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

Структура ID устройства
Представляет собой два байт содержащих уникальный идентификатор устройства, передавшего или адресата Пакета данных. В первом байте седьмой бит отвечает за Тип канала по которому переданы данные:
0 - передано из rs485;
1 - передано из радиоканала (NRF24L01).
Тип канала используется для маршрутизации Пакетов данных между радио каналом и проводным rs485. По принципу, если в Пакете данных у получателя Тип устройства – радиоканал, то такие Пакеты данных передаются в радиоэфир.
Оставшиеся семь бит и второй байт используется для указания Типа устройства.
Перечень Типов устройств (красным выделены уже реализованные)
3_DeviceType.jpg
3_DeviceType.jpg (68.71 КБ) 12347 просмотров
Структура Команды
4_Cmd.jpg
4_Cmd.jpg (183.4 КБ) 12347 просмотров

Примеры:
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


Квитанция (подтверждение на запрос)
5_Example.jpg
5_Example.jpg (29.77 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF020104010108F0FE

Ping устройства «контроллер ds18b20» от Logger
6_Example.jpg
6_Example.jpg (29.79 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF0201040102EAF0FE

Ответ на «Ping» устройства от контроллера ds18b20 на Logger
7_Example.jpg
7_Example.jpg (29.67 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF0401020103F9F0FE

Запрос на отправку температуры с датчиков ds18b20
8_Example.jpg
8_Example.jpg (38.02 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF0201040104003DF0FE

Отправка температуры от ds18b20 всем
9_Example.jpg
9_Example.jpg (68.5 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF040100000528f2602402000022e20431F0FE

Установка задержки опроса датчиков температуры ds18b20 для контроллер ds18b20
10_Example.jpg
10_Example.jpg (41.31 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF020104010828004FF0FE

Установка скорости передачи данных в 1920 бод для контроллера ds18b20
11_Example.jpg
11_Example.jpg (39.52 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF020104010B004B7AF0FE

Включить вывод отладки в USART для контроллера ds18b20
12_Example.jpg
12_Example.jpg (31.8 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF020104010CF5F0FE

ВЫключить вывод отладки в USART
13_Example.jpg
13_Example.jpg (32.07 КБ) 12347 просмотров
Команда для Hercules SETUP utility: F0FF020104010DABF0FE
Ответить