Статья написана совместно с Денисом Железняковым — ZiBlog.RU
После введения хотелось бы рассказать о взаимодействии устройств ZiChip между собой.
На самом деле этот вопрос для нас был наиболее простым и понятным. Решение было принято быстро и без разногласий (не в пример другим более мелким вопросам, о которых мы спорили, приходя к общему мнению, неделями :)).
Сама идея объединения устройств в сеть возникла из-за желания упростить каждый модуль устройства, сделав их максимально универсальными и заменяемыми.
Таким образом под «устройством» в сети ZiChip мы понимаем, как самостоятельные устройства, так и отдельные модули.
В связи с чем, все устройства в сети должны быть автономны и независимы друг от друга, соответственно, в сети не должно быть ни главного, ни подчиненных устройств. При такой автономности устройств в сети встает вопрос решения коллизий (максимально просто без использования каких-либо специальных аппаратных или программных средств).
Так же важно было иметь возможность настраивать устройства без отключения их от сети и нарушения её работы. Поэтому, было принято решение принять компьютер в купе с управляющей программой за самостоятельное устройство сети.
Выбор интерфейса.
За базовый интерфейс был принят универсальный асинхронный последовательный интерфейс UART, в связи с тем, что данный интерфейс присутствует практически во всех микроконтроллерах и его легко подружить с ПК. Так же он относительно не требовательный к стабильности частоты задающего генератора микроконтроллера (при использовании устройства в узком диапазоне температур можно использовать встроенный в микроконтроллер RC-генератор).
Параметры UART были выбраны следующие:
— скорость обмена 38000 бод;
— 8 бит данных;
— бита четности нет (в протоколе реализован свой контроль целостности посылки — CRC8).
Выбор топологии сети.
Устройств в сети может быть много, а интерфейс UART предназначен для работы в режиме точка-точка нужно было принять решение о реализации мультипроцессорного режима работы протокола.
Как вариант напрашивалось использование аппаратного встроенного в микроконтроллеры мультипроцессорного режима работы, но в этом случае могли-бы возникать проблемы при работе таких устройств как преобразователи для связи с ПК, радио- и bluetooth-модули, микросхемы интерфейсов RS485 и т.д. По этой причине решено было остаться в рамках обычного UART со стандартной длинной данных в 8 бит.
При таком выборе единственный способ избежать коллизий, без использования ресурсов микроконтроллера, построение сети по топологии «кольцо», то есть выход (TxD) первого устройства соединяется со входом (RxD) второго, выход второго со входом третьего и т. д. выход последнего устройства в сети соединяется со входом первого устройства. Каждая посылка, отправленная в такую сеть, передается от устройства к устройству, пока не доберется до своей цели (или не вернется к отправителю, сигнализируя о том, что запрашиваемого устройства нет).
На рисунке показано, что устройства в сети могут иметь произвольную адресацию.
Недостатки такого решения:
— задержка при передаче сообщения по сети (зависит от количества участников сети и времени обработки посылки каждым участником);
— зависимость сети от работоспособности каждого устройства (не работает одно устройство – не работает вся сеть).
По причинам описанным выше, было введено ограничение на максимальное количество участников в сети. На текущий момент ограничение — четырнадцать устройств (плюс ПК).
Взаимодействие устройств внутри сети.
Для однозначной идентификации каждое устройство в сети имеет уникальный адрес (номер).
Как уже было сказано, на текущий момент максимальное количество уникальных адресов в сети (именно адресов, а не устройств, так как в принципе возможна реализация устройств с одинаковым адресом) равно 14.
Устройство, предназначенное для настройки других устройств (ПК, но не обязательно) должно иметь нулевой адрес.
Для отправки широковещательных запросов (одновременно для всех устройств в сети) используется адрес с номером 15.
Устройства, по отношению к соседям в сети, могут выполнять следующие функции:
— Приемники (получатели) – получение данных от других устройств;
— Передатчики (источники) – передача данных другим устройствам;
Таким образом, общая логика взаимодействия устройств принята такой, что для передачи информации от одного устройства другому, устройство источник должно сформировать и передать пакет данных содержащий адрес устройства получателя. Устройства в сети принявшие пакет с адресом отличным от своего должны передать пакет дальше по сети без изменения его содержимого. Если в сети не окажется получателя, то пакет вернётся источнику и для того, чтобы избежать вечного блуждания пакетов в сети в пакет необходимо было ввести ещё и адрес отправителя, по которому источник идентифицирует «свой» пакет и не передает его дальше в сеть.
Заключение.
Сеть ZiChip реализована посредством стандартного UART (3 провода). Сеть замкнута в кольцо и посылки идут только в одном направлении. Если целевого устройства нет – отправленная посылка возвращаются к отправителю. Сеть не имеет главного координирующего устройства – все устройства автономны и могут выдавать данные и отправлять запросы в любое подходящее для себя время.
Читаем в следующей статье о механизме работы устройства ZiChip.
@GetChiper
Интересная идея по построению сети, жду продолжения 🙂
Во время чтения статьи, тоже возникали вопросы, на которые ответы нашел в комментариях. Все понятно, подход и назначение сети. Очень правильно считаю, вы придумали. Понятно что городить на этом аля «умный дом» бессмысленно, НО очень ценно то что при разработке какого то блока для того же умного дома на «одной печатке» ( в одном большом блоке ) Можно будет без особого труда соединить несколько функциональных. БРАВО!!! Удачи в дальнейшей разработке!
неблагодарное дело. во первых, всегда будет шанс что что-то забыто и синее пламя 200V на месте где только что был МК, во вторых, помехи такие, что никто не гарантирует надёжность.
тогда уж сразу сеть строить на базе wifi. китайский модуль Serial-wifi стоит нынче меньше 10 баксов с доставкой.
Было бы не плохо реализовать данную сеть ZiChip через сеть 220В, и управлять светом или нагрузками без использования лишних проводов…
ясно. ну как говорится: пожуём — увидим!
тут кстати не столько сама шина интересна, их и правда в МК встроено богато и замутить сеть можно на любой из имеющихся (кстати пробежался по даташитам, аттини в массе не имеют ничего кроме UART, и это печально), сколько протокол обмена. Мне увы ваша шина точно не подойдёт, но задача описания протокола обмена стоит остро, плодить кучу разношёрстных форматов данных и пытаться потом в этом разобраться — тупик, нужен одинаковый формат сообщения, что от датчика температуры, что от роботизированного привода трёх-осевого, иначе примерно на половине проекта потеряется знание как работает то, с чего начиналось…
Вот это абсолютно тот ход мыслей который был у нас с Денисом в начале разработки! У нас тоже было одно устройство в котором должно было быть абсолютно все. Но чуть позже мы пришли к мысли, что в нашем понимании «абсолютно все» это настолько узкий кусочек применения устройства, а нагромождать на одном кристалле еще что-то сверху просто не хватало ножек, или памяти, или скорости, или еще чего.
Вот с этого понимания и получилась сеть свободного набора устройств.
На самом деле изюминка ZiChip не в создании сети устройств. С этим, например, замечательно справляется и I2C, и 1Wire интерфейсы (и аппаратно они в МК поддерживаются) — зачем придумывать то, что сделано до тебя гораздо лучше чем ты бы мог сделать?
ZiChip — это очень простой способ «собирать» кубики-устройства в что-то функционально законченное.
В итоге получается устройство с определенным набором функционала и выход в виде стандартизованной шины — это буквально Ваши слова, только без «имеющий любые входы для абсолютно разных применений».
Не скажу, что уже все железобетонно определено, но базовые моменты нами обжевывались ооочень дотошно.
Подумал тут. atmega25/45/85 стоят порядка полудоллара, attiny в том же диапазоне. Не имело ли смысла сделать универсальный контроллер шины, состоящий из 3-4 компонентов и занимающий пол квадратного сантиметра текстолита, и имеющий любые входы для абсолютно разных применений и выход в виде стандартизованной шины?
Да, будет некоторое усложнение. Но плюсов в таком подходе тоже немало.
@ZiB
1. это понятно что не стояло. как обычно аппетит приходит во время еды. В том смысле что изначально надо закладывать с запасом, чтоб потом не пытаться расширить не расширяемое, когда приспичит. Но дело ваше конечно. Вам в любом случае виднее чего вы хотели 🙂
2. Да, беспроводный модуль было бы интересно.
3. Чтоб не обвешивать стены проводами — каждый выключатель — устройство, каждый источник — оно-же. 14 достигается только влёт и это только освещение.
При разработке и реализации сети изначально не ставились эпические цели, типа, неограниченного количества устройств, большая скорость и т.д. для этих целей уже есть огромное количество протоколов и пытаться сделать им конкурента — просто глупая идея. Суть данной сети позволить ею пользоваться (а главное формировать готовое устройство из кусочков-модулей) без каких либо особых знаний в программировании и электронике. Еще достоинство этой сети простота ее реализации и незначительное потребление ресурсов МК. Слоган ZiChip такой — Каждый сможет пользоваться! 🙂
@MEG
1) Таких задач не стояло.
2) Согласен, но проводной вариант пока остается такой. Я сам планирую использовать для связи модулей nRF24L01, но пока руки не дошли до них.
3) Вот тут я не понял, это где вы наберете такое кол-во устройств ?
Можно конечно разбивать устройства на очень мелкие модули, но это бессмысленно.
Так-то идея хорошая и нужная. Но сразу бросается в глаза:
1. на дворе 2013 год. 38000 бод на 14 устройств не позволяют говорить о любом серьёзном применении хоть каким-то боком связанным с мультимедиа. Даже картинка или пиктограмма выводящаяся на ЖК часов/термометра или чего-то подобного ввергнет сеть на много секунд в ступор.
2. И правда любой оторвавшийся резистор или програмная ошибка любого узла приводят к отказу всей сети. Далее, чтоб найти в чём дело — надо проверить все 14 устройств. По другому найти сбойное невозможно.
3. Любая автоматика требующая сети разнообразных устройств упрётся в количество 14 практически сразу. Например даже автоматика освещения двух-трёх комнатной квартиры с выключателями и прочим сразу перевалит за это число.