Статья написана совместно с Денисом Железняковым — ZiBlog.RU
После введения хотелось бы рассказать о взаимодействии устройств ZiChip между собой.
На самом деле этот вопрос для нас был наиболее простым и понятным. Решение было принято быстро и без разногласий (не в пример другим более мелким вопросам, о которых мы спорили, приходя к общему мнению, неделями :)).
Сама идея объединения устройств в сеть возникла из-за желания упростить каждый модуль устройства, сделав их максимально универсальными и заменяемыми.
Таким образом под «устройством» в сети ZiChip мы понимаем, как самостоятельные устройства, так и отдельные модули.
В связи с чем, все устройства в сети должны быть автономны и независимы друг от друга, соответственно, в сети не должно быть ни главного, ни подчиненных устройств. При такой автономности устройств в сети встает вопрос решения коллизий (максимально просто без использования каких-либо специальных аппаратных или программных средств).
Так же важно было иметь возможность настраивать устройства без отключения их от сети и нарушения её работы. Поэтому, было принято решение принять компьютер в купе с управляющей программой за самостоятельное устройство сети.
Выбор интерфейса.
За базовый интерфейс был принят универсальный асинхронный последовательный интерфейс UART, в связи с тем, что данный интерфейс присутствует практически во всех микроконтроллерах и его легко подружить с ПК. Так же он относительно не требовательный к стабильности частоты задающего генератора микроконтроллера (при использовании устройства в узком диапазоне температур можно использовать встроенный в микроконтроллер RC-генератор).
Параметры UART были выбраны следующие:
— скорость обмена 38000 бод;
— 8 бит данных;
— бита четности нет (в протоколе реализован свой контроль целостности посылки — CRC8).
Выбор топологии сети.
Устройств в сети может быть много, а интерфейс UART предназначен для работы в режиме точка-точка нужно было принять решение о реализации мультипроцессорного режима работы протокола.
Как вариант напрашивалось использование аппаратного встроенного в микроконтроллеры мультипроцессорного режима работы, но в этом случае могли-бы возникать проблемы при работе таких устройств как преобразователи для связи с ПК, радио- и bluetooth-модули, микросхемы интерфейсов RS485 и т.д. По этой причине решено было остаться в рамках обычного UART со стандартной длинной данных в 8 бит.
При таком выборе единственный способ избежать коллизий, без использования ресурсов микроконтроллера, построение сети по топологии «кольцо», то есть выход (TxD) первого устройства соединяется со входом (RxD) второго, выход второго со входом третьего и т. д. выход последнего устройства в сети соединяется со входом первого устройства. Каждая посылка, отправленная в такую сеть, передается от устройства к устройству, пока не доберется до своей цели (или не вернется к отправителю, сигнализируя о том, что запрашиваемого устройства нет).
На рисунке показано, что устройства в сети могут иметь произвольную адресацию.
Недостатки такого решения:
— задержка при передаче сообщения по сети (зависит от количества участников сети и времени обработки посылки каждым участником);
— зависимость сети от работоспособности каждого устройства (не работает одно устройство – не работает вся сеть).
По причинам описанным выше, было введено ограничение на максимальное количество участников в сети. На текущий момент ограничение — четырнадцать устройств (плюс ПК).
Взаимодействие устройств внутри сети.
Для однозначной идентификации каждое устройство в сети имеет уникальный адрес (номер).
Как уже было сказано, на текущий момент максимальное количество уникальных адресов в сети (именно адресов, а не устройств, так как в принципе возможна реализация устройств с одинаковым адресом) равно 14.
Устройство, предназначенное для настройки других устройств (ПК, но не обязательно) должно иметь нулевой адрес.
Для отправки широковещательных запросов (одновременно для всех устройств в сети) используется адрес с номером 15.
Устройства, по отношению к соседям в сети, могут выполнять следующие функции:
— Приемники (получатели) – получение данных от других устройств;
— Передатчики (источники) – передача данных другим устройствам;
Таким образом, общая логика взаимодействия устройств принята такой, что для передачи информации от одного устройства другому, устройство источник должно сформировать и передать пакет данных содержащий адрес устройства получателя. Устройства в сети принявшие пакет с адресом отличным от своего должны передать пакет дальше по сети без изменения его содержимого. Если в сети не окажется получателя, то пакет вернётся источнику и для того, чтобы избежать вечного блуждания пакетов в сети в пакет необходимо было ввести ещё и адрес отправителя, по которому источник идентифицирует «свой» пакет и не передает его дальше в сеть.
Заключение.
Сеть ZiChip реализована посредством стандартного UART (3 провода). Сеть замкнута в кольцо и посылки идут только в одном направлении. Если целевого устройства нет – отправленная посылка возвращаются к отправителю. Сеть не имеет главного координирующего устройства – все устройства автономны и могут выдавать данные и отправлять запросы в любое подходящее для себя время.
Читаем в следующей статье о механизме работы устройства ZiChip.