Интерфейс связи устройств ZiChip

Общие положения.

Каждое устройство в сети должно иметь свой уникальный адрес
от 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%

 

В ближайших планах:
– Команда перевода устройства в режим сна.
– Команда чтения/записи флагов
– Команда чтения/записи ячеек памяти