Общие положения.
Каждое устройство в сети должно иметь свой уникальный адрес
от 1 до 14. Адрес 15 используется для широковещательного пакета. Адрес 0 зарезервирован для обмена с ПК и настройки сети. Соответственно, сеть может состоять максимум из 14 устройств + ПК. В случае возникновения коллизий (подключения устройств с одинаковыми адресами) существует процедура переназначения адресов устройств.
1 Обмен данными в сети реализован при помощи UART по топологии кольцо, то есть выход (TxD) первого устройства соединяется со входом (RxD) второго, выход второго со входом третьего и т. д. выход последнего устройства в сети соединяется со входом первого устройства.
Скорость обмена фиксированная — 38400 бод.
Размер данных — 8 бит.
Бит четности — нет.
Стоп-бит — 2.
2 Прием и передача данных осуществляется пакетами. Формат пакета одинаков для всех устройств и имеет фиксированную длину — 8 байт.
3 Пакет имеет ряд фиксированных полей:
— идентификатор пакета (00-байт Marker);
— номер отправителя (01-байт RS);
— номер получателя (01-байт RS);
— направление пакета (чтение/запись) (02-байт APD);
— назначение пакета (целевая точка доступа) (02-байт APD);
— поле данных (03-06-байт D0-D3);
— контрольная сумма (07-байт CRC8).
4 Устройство, принявшее пакет, должно его проанализировать и выполнить действия в зависимости от содержания пакета:
4.1 в случае нарушения целостности пакета (ошибка при проверке CRC8) – пакет дальше по сети не передается;
4.2 в случае «чужого» пакета (номер получателя не совпадает с номером принявшего устройства) пакет передается по сети дальше, без каких либо действий в устройстве и изменений в пакете;
4.3 в случае совпадения номера получателя в пакете с номером устройства («свой»), устройство должно обработать пакет в зависимости от его типа и содержания:
— если это пакет передачи данных – записать принятые данные в целевую точку доступа. Дальше по сети пакет не передается;
— если это пакет запроса данных – формируется новый пакет передачи данных к запрашиваемому устройству с запрашиваемыми данными и передается в сеть;
— если это пакет управления – выполняются действия предписанные командой этого пакета.
4.4 в случае приема «общего» пакета, устройство должно:
— передать этот пакет дальше без изменений;
— обработать этот пакет как «свой» (см.выше)
4.5 в случае приема пакета отправленного самим же устройством («родной» — номер отправителя совпадает с номером устройства) пакет дальше не передается – никакие действия не выполняются.
Формат пакета
Номер байта | Имя | Описание | |
00 | Marker | Маркер начала пакета. Всегда равен 0xAA | |
01 | RS (recipient / sender) | bits 0-3 Recipient получатель |
Адрес получателя. Может иметь следующие значения: 0 – передача для ПК 1-14 – адрес устройства; 15 – для всех устройств в сети. |
bits 4-7 Sender отправитель |
Адрес отправителя. Может иметь следующие значения: 0 – передача от ПК 1-14 – адрес устройства; 15 – зарезервировано. |
||
02 | APD (access point / dir) | bits 0-6 access points |
Номер точки доступа 0-127. — Передача данных — точка, для которой передается значение — Запрос данных — точка, значение которой необходимо получитьТочка с номером 0 обязательна для всех устройств и предназначена для конфигурирования устройства и получения информации о нем. |
bit 7 direction |
Направление передачи данных: 1 – запрос данных (request); 0 – передача данных (transmit). |
||
03 | D0 | Поле данных: — При передаче данных поля D0-D3 содержат данные для точки доступа. — При запросе данных — D3 содержит номер точки доступа принимающей ответ от устройства. |
|
04 | D1 | ||
05 | D2 | ||
06 | D3 | ||
07 | CRC8 | Контрольная сумма пакета (участвуют байты с 0 по 6)рассчитывается аналогично Dallas 1-Wire |
00 – ИНИЦИАЛИЗИРУЮЩАЯ КОМАНДА
(Получение всех устройств в сети, вне зависимости от их адресов и присвоения нового адреса при коллизиях)
Получение информации от всех устройств в сети
Поле | Запрос данных от ПК | Ответ 1 от устройства | Ответ 2 от устройства |
RS | 0 | 0 | 240 ($F0) |
APD | 128 | 128 | 0 |
D0 | Счетчик=0 | Счетчик+1 | Счетчик+1 |
D1 | — | — | Версия «железа» |
D2 | — | — | Версия прошивки |
D3 | — | — | Адрес устройства |
1 ПК отправляет широковещательный запрос со счетчиком равным нулю (Запрос данных).
2 Каждое устройство, принявшее запрос:
а) инкрементирует счетчик (Счетчик+1),
б) ретранслирует широковещательный запрос от ПК (с инкрементированным счетчиком) дальше по сети (Ответ 1),
в) формирует и отправляет ответ, содержащий: инкрементированный счетчик (порядковый номер устройства в сети); два байта идентификации и байт адреса устройства (Ответ 2).
3 ПК, отправив широковещательный запрос, начинает ожидание ответов. Первым возвращается широковещательный запрос ПК с количеством устройств в поле счетчика. Далее идут ответы от устройств в порядке следования устройств в сети, поэтому, первый ответ считается от устройства с порядковым номером 1, второй ответ – от устройства с порядковым номером 2 и т.д.
4 Как только ПК принял количество ответов равное количеству устройств в сети, считается, что все устройства отчитались.
Присвоение устройству адреса при помощи адресации порядковым номером
Поле | Передача данных от ПК | Ответ от устройства |
RS | 0 | 0 |
APD | 0 | 0 |
D0 | Счетчик=0 | Счетчик+1 |
D1 | — | — |
D2 | Порядковый номер устройства | Порядковый номер устройства |
D3 | Адрес устройства(для присвоения) | Адрес устройства(для присвоения) |
1 ПК отправляет специальный пакет со счетчиком равным нулю (Передача данных).
2 Каждое устройство, принявшее этот пакет передачи данных:
а) инкрементирует счетчик (Счетчик+1),
б) сравнивает значение счетчика со значением D2:
— если значения РАВНЫ – устанавливает себе новый адрес из D3 и пакет дальше не передается;
— если значения НЕ РАВНЫ – пакет передается дальше (Ответ).
ЗАПИСЬ/ЧТЕНИЕ ТОЧКИ ДОСТУПА УСТРОЙСТВА
Поле | Передача данных для устройства Установка нового значения точки доступа у устройства |
Запрос данных у устройства Получение значения точки доступа устройства |
Ответ от устройства |
RS | от_кого/кому | от_кого/кому | от_кого/кому |
APD | Точка, для которой передаются данные | Точка, значение которой необходимо получить+128 (direction) | Точка, для которой передаются данные(берется с D3-запроса) |
D0 | Данные D0 | — | Данные D0 |
D1 | Данные D1 | — | Данные D1 |
D2 | Данные D2 | — | Данные D2 |
D3 | Данные D3 | Точка, в которую необходимо вернуть значение | Данные D3 |
СЛУЖЕБНЫЕ КОМАНДЫ (ТОЧКА ДОСТУПА 0)
0 – Команда идентификации
Поле | Передача данных для устройства Установка нового адреса (при отсутствии коллизий) |
Запрос данных у устройства Получение информации от устройства |
Ответ от устройства |
RS | от_кого/кому | от_кого/кому | от_кого/кому |
APD | 0 | 128 | Точка для возврата* |
D0 | 0 | 0 | 0 |
D1 | — | — | Версия «железа» |
D2 | — | — | Версия прошивки |
D3 | Новый адрес | Точка для возврата* | Адрес устройства |
* для ZiChip Tuner всегда должно быть равно 0 (нулю)
1 – Команда прямой работы с EEPROM
Поле | Передача данных для устройства Запись данных в EEPROM устройства |
Запрос данных у устройства Чтение данных из EEPROM устройства |
Ответ от устройства | |
RS | от_кого/кому | от_кого/кому | от_кого/кому | |
APD | 0 | 128 | Точка для возврата* | |
D0 | 1 | 1 | 1 | |
D1 | Адрес в EEPROM | Адрес в EEPROM | Адрес в EEPROM | |
D2 | ||||
D3 | Данные | Точка для возврата* | Данные |
* для ZiChip Tuner всегда должно быть равно 1
2 – Команда настройки действий
Поле | Передача данных для устройства | Запрос данных у устройства | Ответ от устройства |
APD | 0 | 128 | Точка для возврата* |
D0 | 2 | 2 | 2 |
D1 | Адрес в области действий (EEPROM) | Адрес в области действий (EEPROM) | Адрес в области действий (EEPROM) |
D2 | |||
D3 | Значение | Точка для возврата* | Значение |
* для ZiChip Tuner всегда должно быть равно 2
3 – Команда работы с ИК-пультом
Поле | Передача данных для устройства | Запрос данных у устройства | Ответ от устройства |
APD | 0 | 128 | Точка для возврата* |
D0 | 3 | 3 | 3 |
D1 | Номер хэша (кнопки) | Номер хэша (кнопки)** | Номер хэша (кнопки) |
D2 | Хэш-код | — | Хэш-код |
D3 | Точка для возврата* |
* для ZiChip Tuner всегда должно быть равно 3
** если D1 = 0xFF – передается хэш-код последней нажатой клавиши ИК-пульта.
4 – Команда включения/отключения диспетчера элементов
Поле | Передача данных для устройства |
APD | 0 |
D0 | 4 |
D1 | 1 – вкл, 0 – выкл |
D2 | — |
D3 | — |
5 – Сброс устройства
Поле | Передача данных для устройства |
APD | 0 |
D0 | 5 |
D1 | — |
D2 | — |
D3 | — |
6 – Команда получения «времени жизни» устройства
Поле | Запрос данных у устройства | Ответ от устройства |
APD | 128 | Точка для возврата* |
D0 | 6 | «Время жизни» устройствав сотых долях секунды |
D1 | — | |
D2 | — | |
D3 | Точка для возврата* |
* для ZiChip Tuner должно быть 6
7 – Команда получения загрузки устройства
Поле | Запрос данных у устройства | Ответ от устройства |
APD | 128 | Точка для возврата* |
D0 | 7 | 7 |
D1 | — | — |
D2 | — | — |
D3 | Точка для возврата* | Загрузка** |
* для ZiChip Tuner должно быть 7
** 0 — 0% … 255 — 100%
В ближайших планах:
– Команда перевода устройства в режим сна.
– Команда чтения/записи флагов
– Команда чтения/записи ячеек памяти