Андроид. Windows. Антивирусы. Гаджеты. Железо. Игры. Интернет. Операционные системы. Программы.

Протокол dallas 1 wire crc8 18h. Канальный уровень протокола

1-Wire – протокол передачи данных в обе стороны по одному проводу.

Данный протокол разработан корпорацией Dallas Semiconductor (сейчас Maxim Integrated) в далёких 90-х, но активно используется и сейчас: именно на 1-Wire работает большинство "таблеток" - домофонных чипов (DS1990A), карточек доступа, а также через 1-Wire общаются популярные датчики температуры (DS18S20 и DS18B20), транзисторные ключи (DS2405 , DS2406), программируемые порты ввода-вывода (DS2408), АЦП и ЦАП, часы реального времени (DS2417) и многое другое.

Режим связи в этом протоколе – асинхронный и полудуплексный (об этом подробнее ), а также "остроконечный" (при отсылке многобайтовых целых передача идёт от младшего байта к старшему).

При этом у нас всегда есть ведущий – одно устройство на шине, которое отсылает команды, и ведомые – устройства, которые эти команды принимают и отвечают на них, если необходимо; каждое из ведомых устройств подключается непосредственно к общей шине.

Ещё раз подчеркнём – на шине может быть только ОДИН ведущий – иначе возникнут конфликты, когда оба ведущих будут тянуть одеяло на себя (на самом деле, есть некоторые приёмы организации сетей 1-Wire в режиме мультимастера – например, с помощью ветвителя сети DS2409 – но в "обычной" жизни все-таки предпочтительней иметь только одного ведущего на шине).

Протокол 1-Wire хорош тем, что не сложен в реализации и требует для связи всего два-три провода (шина данных, земля и при необходимости питание); однако при этом он не лишён и недостатков – этот протокол весьма чувствителен ко времени и к помехам. Также 1-Wire не предназначена для передачи больших объёмов информации и для скоростного обмена данными – максимальная скорость 9600 Бод/с.

Протокол 1-Wire описывает физический, канальный, сетевой и транспортный уровни взаимодействия (см. модель OSI).
На физическом уровне даются описания способов подключения, требования к шине данных и питанию и т.д.
Канальный уровень описывает способы чтения и передачи битов по протоколу.
Сетевой уровень описывает способы адресации к различным устройствам на линии.
Наконец, транспортный уровень описывает функциональные команды, используемые устройствами 1-Wire.

Физический уровень протокола

Рисунок 1. Пример подключения ведущего и ведомых устройств по протоколу 1-Wire.

К слову, о питании – согласно даташиту, шина данных должна быть подтянута к питанию резистором 4.7 кОм, однако данный номинал используется при относительно коротких линиях; если же расстояние между устройствами достаточно велико, то сопротивление резистора можно уменьшить.

Канальный уровень протокола

Обмен информацией ведётся так называемыми временными, или тайм-слотами (60 мкс): один тайм-слот служит для обмена одним битом информации. Данные передаются бит за битом, начиная с младшего бита младшего байта – это, кстати, достаточно часто приводит к ошибкам у новичков – кажется, что нужно передавать данные слева направо, так, как они хранятся в памяти (то есть, следите за словами: кажется, что нужно начинать со старшего бита младшего байта (вы уже запутались, да?) – но нет! При передаче по 1-Wire, например, двухбайтового числа порядок передачи будет таким:
Имеем число 1023410 – в двоичном виде выглядит так: 00100111 11111010 2
В памяти (так как у нас "остроконечный" порядок хранения данных) выглядит так: 11111010 00100111.
А передача по 1-Wire будет выглядеть так:
0→1→0→1→1→1→1→1→1→1→1→0→0→1→0→0
Если вы запутались так же, как и я – самое время выпить чая с шоколадкой и немного утрясти все в голове.

Идём дальше. При обмене информацией ведущий инициирует каждую связь на битном уровне. Это означает, что передача каждого бита, независимо от направления (передача или приём), должна быть инициирована ведущим. Шина данных по умолчанию подтягивается к "единице", поэтому для начала как приёма, так и для передачи ведущий опускает линию в "ноль" на некоторое время.

Внимание : ни ведущий, ни ведомые не выставляют на шине "единицу" - это черевато коротким замыканием: если одно устройство выставит на шине "1", а другое – "0"; поэтому как ведущий, так и ведомый могут использовать только два состояния: "на выход в ноль" и "z-состояние" (на вход без подтяжки). Подтяжка к питанию осуществляется резистором (!).

Рассмотрим 5 основных команд для связи по шине 1-Wire: "Запись 1", "Запись 0", "Чтение", "Сброс" и "Присутствие". При этом на рисунках красным выделено управление линией от ведущего, синим – управление линией от ведомого, черным – освобожденная линия (с помощью подтяжки шина автоматически переходит в "единицу").

Сигнал "Запись 1" . Ведущий устанавливает низкий уровень в течение 1…15 мкс. После этого, в течение оставшейся части временного слота он освобождает шину.

Сигнал "Запись 0" . Ведущий формирует низкий уровень в течение не менее 60 мкс, но не дольше 120 мкс.

Сигнал "Чтение" . Ведущий устанавливает низкий уровень в течение 1…15 мкс. После этого подчинённый, если хочет передать 0, удерживает шину в низком состоянии до 60 мкс; если же подчинённых хочет передать 1, то он просто освобождает линию. Ведущий обычно сканирует состояние шины по истечении 15 мкс после установки низкого уровня на шине.

Так, ведомый удерживает линию к земле, если хочет передать "0", и просто отпускает линию, если хочет передать "1".
Таким образом при чтении получаем следующие диаграммы.

Сигнал "Чтение при получении 1" :

Сигнал "Чтение при получении 0" :

Основные проблемы, которые возникают при реализации чтения-записи – это проблемы со временем, то есть "невыдерживание", или наоборот, "передерживание" временных задержек при чтении линии. Возникают эти проблемы из-за того, что часто не делают поправку на медленность языков программирования высокого уровня. Особенно это касается различных "дополнительных" функций и ништяков. Подробнее

Сигнал "Сброс/присутствие" . Здесь временные интервалы импульсов отличаются. Ведущий устанавливает низкий уровень в течение 8 временных слотов (480 мкс), а затем освобождает шину. Данный длительный период низкого состояния называется сигнал "Сброс".
Если на шине присутствует подчинённый, то он должен в течение 60 мкс после освобождения ведущим шины установить низкий уровень длительностью не менее 60 мкс. Данный отклик носит название "Присутствие". Если такой сигнал не обнаруживается, то ведущий должен полагать, что нет подключённых устройств к шине и дальнейшая связь невозможна.
Данная связка сигналов всегда начинает любой обмен информацией между устройствами.
Помимо этого, нужно учитывать, что любое ведомое устройство после получения питания сразу же выдаёт сигнал присутствия.
Сигнал же "Сброс" позволяет ведущему досрочно завершить обмен информацией – например, если датчик температуры передаёт нам всю свою память, а нам нужны только первые два байта, которые содержат значение температуры, то после получения этих двух байт микросхема просто может опустить линию в ноль на нужное количество времени – датчик поймет, что больше ничего пересылать не нужно.

О реализации: обычно необходимо запрограммировать микроконтроллер как ведущее устройство, поэтому есть несколько советов: микроконтроллеру стоит генерировать сигналы (опускание шины к земле) чуть больше необходимого минимума по времени, а ответы от ведомых устройств ждать по наихудшим прогнозам – тогда взаимодействие по протоколу будет оптимальным.
При этом ведущему нужно не забывать периодически проверять состояние линии данных - то, что она возвращается в подтянутое состояние с течением времени – а то может возникнуть ситуация, например, что какой-нибудь ведомый сломался и коротит, например, линию в ноль – и в принципе, протокол не проверяет данную проблему сам, ошибки может и не возникнуть – но об этом чуть ниже.

Сетевой и транспортный уровни протокола

Рассмотрим "более высокий" уровень протокола 1-Wire – последовательность действий при взаимодействии ведущего и ведомого, а также основные команды. При этом нужно отметить, все данные, в том числе команды, отсылаются побитно последовательно, начиная с младшего бита.

Алгоритм взаимодействия:

  1. Ведущий посылает на линию сигнал reset ("Сброс"). После линия освобождается для "ответных действий". Если на шине присутствует ведомый, то в течение 60 мкс он сообщает о "присутствии".
    Если же ведущий не получает отклика-"присутствия", то он считает, что подключённых к шине устройств нет.
  2. Далее следует сетевой уровень протокола: ведущий должен определить, к какому из устройств на шине данных он будет дальше обращаться. Данный выбор обеспечивается отсылкой одной из ROM-команд (длиной в 1 байт), которые работают с уникальными кодами устройств:
    • Search ROM ($F0) – "поиск ROM". Если коды подключённых устройств не известны, то эта команда позволяет ведущему определить их. Подробное описание данной команды представлено ниже.
    • Read ROM ($33) – "чтение ROM" – команда используется, если мы точно знаем, что у нас только одно подчинённое устройство (например, только один датчик температуры или один домофонный ключ), тогда для считки его кода можно не париться с поиском ROM. При получении данной команды все ведомые устройства на шине отсылают свой уникальный код.
    • Skip ROM ($CC) – "пропуск ROM". Это команда используется, когда необходимо дать команду всем устройствам на шине – например, нужно, чтобы все подключённые датчики одновременно считали температуру.
    • Match ROM ($55) – "совпадение ROM". Используется для выбора конкретного подчинённого устройства на шине. После отсылки команды ведущий передаёт 64-разрядный код. По завершении только тому подчинённому устройству, которое приняло свой идентификатор, разрешается отвечать после приёма следующего импульса сброса – остальные же молча ждут импульса сброса.
    Естественно, для отдельных устройств какие-то ROM-команды могут добавляться.
  3. Если были отправлены команды "Match ROM" или "Skip ROM", то далее ведущий отправляет какую-либо функциональную команду – это уже транспортный уровень протокола; при этом набор функциональных команд и дальнейшее поведение (должен ли ведущий быть готов принимать данные от выбранного ведомого устройства, например) зависит от конкретного устройства 1-Wire.

Так, например, если у нас есть микроконтроллер и DS18S20 – датчик температуры, и мы хотим получить от этого датчика значение температуры, то алгоритм работы будет следующим:

  1. МК отсылает импульс сброса
  2. - так как датчик у нас на линии один, то нам нет необходимости работать с "адресами"
  3. МК отсылает функциональную команду "Convert T" - по этой команде датчик температуры начнёт однократное температурное преобразование; результат же этого преобразования будет записан в память датчика
  4. МК ждёт, пока датчик закончит преобразование (ведомое устройство никоим образом не может само сообщить, что оно "освободилось", поэтому микроконтроллер просто ждёт время, указанное в даташите)
  5. МК отсылает импульс сброса
  6. Датчик отвечает импульсом приветствия
  7. МК отсылает адресную команду "Skip ROM"
  8. МК отсылает функциональную команду "Read Scratchpad" - по этой команде датчик отсылает 9 байт своей памяти
  9. МК считывает нужное количество байт (значение температуры содержится в первых двух)
  10. При необходимости МК завершает сеанс связи, отсылая импульс сброса

При этом нужно помнить, что ведомые устройства могут поломаться и, например, опускать линию всегда на 0. Допустим, у нас так закоротило датчик температуры в термостате печки. Тогда, если ведущий не проверит, что линия возвращается в единицу, то вероятна следующая ситуация:

  1. МК отсылает импульс сброса
  2. Датчик коротит линию на ноль – МК обнаруживает, что есть импульс приветствия
  3. МК отсылает адресную команду "Skip ROM" - не проверяя при этом линию, конечно
  4. МК отсылает функциональную команду "Convert T" - датчик всё ещё в коме
  5. МК ждёт
  6. МК отсылает импульс сброса
  7. история повторяется, датчик отсылает ноль
  8. МК отсылает адресную команду "Skip ROM"
  9. МК отсылает функциональную команду "Read Scratchpad"
  10. МК считывает нужное количество байт - и получает, естественно, все нули. Даже если мы считываем всю память вместе с CRC, CRC от нуля будет равно нулю – то есть ошибки не произойдет МК конвертирует температуру, получает ноль, отправляет команду нагревать печь. И так до бесконечности!

Выглядит все это довольно печально – и черевато большими проблемами! Так что на протокол полагайся, но сам не плошай.

Вернёмся к алгоритму взаимодействия ведущего и ведомого по протоколу. Как видно, реализовать работу ведущего устройства не так уж сложно – при этом есть как уже готовые библиотеки с кодом, так и аппаратные реализации – например, от той же фирмы Maxim Integrated. Так, например, для AVR-ок написан целый даташит для реализации 1-Wire .

А вот реализовать ведомое устройство не так уж просто – и если библиотеки существуют (например, ), то аппаратных реализаций именно протокола 1-Wire мне не встречалось. Принцип же работы ведомых устройств подробно описан в их документации, обычно в виде блок-схемы.

Существует целый ряд устройств, использующих интерфейс 1-Wire, - так, например, всем известная "таблетка" - домофонный ключ – работает в большинстве случаев именно через данный протокол: микроконтроллер в замке просто спрашивает уникальный код "таблетки", и если этот код содержится в списке разрешённых устройств, микроконтроллер открывает замок.

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

Уникальные коды устройств 1-Wire

Пару слов об уникальных кодах устройств, с которыми и работают ROM-команды. Каждое "одноварное" устройство имеет свой 64-хбитный код, состоящий из трёх частей:

Младший байт – это код семейства, к которому относится устройство, 6 следующих байт – уникальный в семействе серийный номер, ну и наконец, старший байт – это CRC, который служит для проверки правильности приёма всего кода. Так, например, на родных даллосовских (сейчас максимовских) "таблетках" часть уникального кода – а именно, 48-битный серийный номер – пишется на металле в шестнадцатиричном виде (все дружно посмотрели на свои домофонные ключи).

Рассмотрим подробнее, какие коды семейств устройств 1-Wire бывают:

Код семейства (HEX) Устройство iButton Описание
01 DS1990A, DS1990R, DS2401, DS2411 Уникальный серийный номер-ключ
02 DS1991 Мультиключ, 1152-битная защищённая EEPROM
04 DS1994, DS2404 4 КБ NV RAM + часы, таймер и будильник
05 DS2405 Одиночный адресуемый ключ
06 DS1993 4 КБ NV RAM
08 DS1992 1 КБ NV RAM
09 DS1982, DS2502 1 КБ PROM
0A DS1995 16 КБ NV RAM
0B DS1985, DS2505 16 КБ EEPROM
0C DS1996 64 КБ NV RAM
0F DS1986, DS2506 64 КБ EEPROM
10 DS1920, DS1820, DS18S20, DS18B20 Датчик температуры
12 DS2406, DS2407 1 КБ EEPROM + двухканальный адресуемый ключ
14 DS1971, DS2430A 256 бит EEPROM и 64 бита PROM
1A DS1963L 4 КБ NV RAM + счётчик циклов записи
1C DS28E04-100 4 КБ EEPROM + двухканальный адресуемый ключ
1D DS2423 4 КБ NV RAM + внешний счётчик
1F DS2409 Двухканальный адресуемый ключ с возможностью коммутации на возвратную шину
20 DS2450 Четырёхканальный АЦП
21 DS1921G, DS1921H, DS1921Z Термохронный датчик с функцией сбора данных
23 DS1973, DS2433 4 КБ EEPROM
24 DS1904, DS2415 Часы реального времени
26 DS2438 Датчик температуры, АЦП
27 DS2417 Часы реального времени с прерыванием
29 DS2408 Двунаправленный 8-разрядный порт ввода/вывода
2C DS2890 Одноканальный цифровой потенциометр
2D DS1972, DS2431 1 КБ EEPROM
30 DS2760 Датчик температуры, датчик тока, АЦП
37 DS1977 32 КБ защищённой паролем EEPROM
3A DS2413 Двухканальный адресуемый коммутатор
41 DS1922L, DS1922T, DS1923, DS2422 Термохронные и гигрохронные датчики высокого разрешения с функцией сбора данных
42 DS28EA00 Цифровой термометр с программируемым разрешением, возможностью работать в режиме подключения к последовательному каналу и программируемыми портами ввода/вывода
43 DS28EC20 20 КБ EEPROM

NV RAM – Non-Volatile Random-Access Memory (энергонезависимое ОЗУ)
PROM – Programmable Read-Only Memory (однократно программируемое ПЗУ)
EEPROM – Electrically Erasable Programmable Random-Access Memory (электрически стираемое перепрограммируемое ПЗУ)

1-Wire — однопроводный низкоскоростной интерфейс, разработанный фирмой Dallas Semiconductor (сейчас она является подразделением фирмы MAXIM) для двунаправленного обмена данными с различными периферийными устройствами (датчики температуры, электронные ключи, аккумуляторы).

Это довольно дешёвый и надёжный интерфейс, для устройств, не требующих быстрого обмена большим количеством данных. Он позволяет обмениваться данными на скорости до 15,4 кбит/с в обычном режиме и до 125 кбит/с в режиме «overdrive» (в статье мы будем рассматривать обычный режим). При использовании специальных проводов (IEEE1394 — Firewire) расстояние передачи данных может составлять до 300 м.

Как физически устроен сам интерфейс? Да очень просто, — смотрим рисунок слева. В микрухах реализованы порты 1-wire, которые состоят из высокоомного приёмника и передатчика на полевом транзисторе с открытым стоком, подключенные к одному общему выводу (вывод порта 1-wire). Типовой ток утечки закрытого выходного полевика составляет 5 мкА. Снаружи реализована шина 1-wire. Она состоит из одного сигнального провода (поэтому интерфейс и назван однопроводным), подтянутого через резистор (типовое значение 5,1 кОм) к питанию (к плюсу) и одного провода, подключенного к общему проводу (то есть к минусу).

Обмен данными осуществляется по принципу Master-Slave (ведущий-ведомый), соответственно устройства с интерфейсом 1-wire бывают двух типов: «Master» (ведущее устройство) и «Slave» (ведомое устройство). Как правило в качестве «Мастера» выступает контроллер (или компьютер, через специальное устройство сопряжения), а в качестве «Слэйвов» — различные периферийные устройства.

На одну шину 1-wire можно подключить множество (до 2 48) slave-устройств, поскольку каждое такое устройство имеет уникальный 48-битный серийный номер, который вместе с байтом «CRC» и байтом «family code» (определяющим тип устройства) образует уникальную 64-битную метку. Ведущий на шине 1-wire должен быть один.

Питаться устройства с интерфейсом 1-wire могут как от независимого источника, так и от сигнального провода. Если в устройствах используется КМОП-архитектура, то диапазон напряжений питания может быть довольно широкий, но, при подключении на одну шину, питание всех устройств должно быть примерно одинаковым (чтобы уровни напряжения правильно распознавались приёмниками). В основном используются TTL-уровни (соответственно, пятивольтовое питание). Ещё хотелось бы добавить, что выход, реализованный на полевике с низким током утечки, — это специальная заточка под питание от сигнальной линии. Если у вашего устройства будет внешнее питание — никто не мешает вам организовать порт 1-wire, например, на биполярном транзисторе с открытым коллектором. Аналогично, резистор 5,1 кОм — тоже не догма, его значение может варьироваться в зависимости, например, от ёмкости линии.

Теперь давайте подробнее расмотрим механизм передачи данных на уровне протокола.

Во первых, необходимо отметить, что всем обменом на шине управляет «Мастер». Только мастер решает — когда и с каким устройством он хочет поговорить и когда устройство должно посылать или принимать очередной бит. «Слэйвы» синхронизируются с «Мастером» по спаду на сигнальной линии и далее отсчитывают интервалы до тех или иных своих действий по внутреннему счётчику. Единственное самостоятельное действие, разрешённое «Слэйву» — это выдача сигнала «Presence» (импульс присутствия), который он выдаёт сразу после подключения на шину, чтобы обозначить своё присутствие. Кроме этого, «Мастер» может сформировать на шине сигнал «Ресет», после которого все «Слэйвы» на шине должны ресетнуться и также ответить «Мастеру» сигналом «Presence».

Диаграммы сигналов «Reset» и «Presence» приведены на рисунке слева. Синим цветом обозначено состояние активности «Мастера» (когда он притягивает уровень на шине к нулю), красным цветом обозначено состояние активности «Слэйва» (когда «Слэйв» притягивает уровень на шине к нулю), серым цветом обозначено состояние, когда «Мастер» и «Слэйв» неактивны (сигнал через резистор подтянут к питанию).

Чтобы всё было понятно — опишем то, что нарисовано на этом рисунке, словами. Итак, чтобы сформировать сигнал «Reset», — «Мастер» должен притянуть уровень на шине к нулю на время не менее 480 мкс и не более 960 мкс (480 мкс ≤ T RSTL < 960 мкс). После этого он должен отпустить шину и, не менее, чем на 480 мкс, прекратить свою активность на шине (T RSTH > 480 мкс). «Слэйвы», не ранее, чем через 15 мкс, но и не позднее, чем через 60 мкс после того, как «Мастер» отпустит шину (15 мкс < T PDH < 60 мкс), должны сформировать на шине низкий уровень (это и есть сигнал присутствия), длительностью от 60 до 240 мкс (60 мкс < T PDL < 240 мкс), после чего они также отпускают шину.

После того как «Мастер», получив сигнал «Presence», понял, что на шине есть «Слэйвы» — он может начинать с этими «Слэйвами» обмен данными. Данные по шине передаются побитово, младшим битом вперёд. 0 и 1 кодируются уровнями напряжения на сигнальном проводе (0 — низкий уровень напряжения, 1 — высокий уровень напряжения).

Каждый бит передаётся в установленном временном промежутке, называемом тайм-слотом. Начало каждого тайм-слота (как я уже говорил) определяет «Мастер», притягивая шину к низкому уровню. Время между тайм-слотами не регламентировано, то есть один бит можно передать, условно говоря, сейчас, а другой, скажем, через 5 минут, ничего страшного при этом не произойдёт и данные не потеряются.

Выборка данных «Слэйвом» и «Мастером» происходит в разные временные интервалы, относительно начала тайм-слота, поэтому мы отдельно рассмотрим варианты передачи данных в направлениях «Мастер» ⇒ «Слэйв» (тайм-слот записи) и «Слэйв» ⇒ «Мастер» (тайм-слот чтения).

Тайм-слот записи показан на рисунке слева. Как и ранее, синим цветом обозначена активность «Мастера», красным — активность «Слэйва» и серым — моменты, когда линия подтянута к питанию через резистор.

  1. 1 мкс≤T LOW1 <15 мкс — время, в течении которого шина притянута к нулю при передаче 1
  2. 60 мкс≤T LOW0
  3. 60 мкс≤T SLOT <120 мкс — длительность тайм-слота
  4. T REC >

Поясню этот рисунок несколько подробнее. Итак, для того, чтобы «Слэйв» распознал начало тайм-слота — «Мастер» должен удерживать сигнал на шине равным нулю в течении времени T LOW1 . После этого, но не позднее 15 мкс от начала тайм слота, «Мастер» должен установить на шине уровень сигнала, соответствующий передаваемому биту. То есть, если он хочет передать 1, то он должен отпустить шину через какой-то промежуток времени от начала тайм-слота, чтобы до начала «Окна выборки» сигнал успел установиться в единицу. Если же «Мастер» хочет передать ноль, то он просто должен так и оставить линию притянутой к нулю. В течении «Окна выборки» сигнал на линии не должен меняться, потому что в любой момент в течении этого времени сигнал может быть считан «Слэйвом». «Окно выборки» заканчивается через 60 мкс от начала тайм-слота. После окончания окна выборки и до окончания тайм-слота — «Мастер» должен отпустить шину, чтобы сигнал вернулся к высокому уровню. Понятно, что отпускать шину актуально только в том случае, если «Мастер» передавал 0, если же он передавал 1, то ему нужно просто дождаться окончания тайм-слота.

Тайм-слот чтения показан на рисунке справа.

  1. 1 мкс≤T LOWR <15мкс — время, в течении которого шина притянута к нулю
  2. T RDV =15 мкс — момент окончания «Окна выборки»
  3. 0 мкс≤T RELEASE <45 мкс — время, в течении которого «Слэйв» должен отпустить шину
  4. 60 мкс≤T SLOT <120 мкс — длительность тайм-слота
  5. T REC >1 мкс — интервал между тайм-слотами

Здесь всё происходит следующим образом: «Мастер» притягивает шину к нулю, чтобы обозначить начало тайм-слота. Пока линия притянута к нулю — «Слэйв» должен либо тоже притянуть линию к нулю, если хочет передать ноль, либо оставить линию свободной, если хочет передать единицу. После того, как «Мастер» отпустит шину (через время T LOWR), — начинается «Окно выборки» и «Мастер» может считывать с шины значение бита. Далее, после окончания «Окна выборки», «Слэйв» должен в течении времени T RELEASE отпустить шину.

Хотелось бы уточнить, что «Мастер» должен не сразу читать уровень на шине после того, как отпустит её, а через некоторое время, которое необходимо для того, чтобы исключить влияние ёмкости линии (если «Слэйв» передаёт 1, то, из-за наличия этой ёмкости, напряжение не может вырасти мгновенно после отпускания шины «Мастером»). С учётом этого, «Мастеру» наиболее целесообразно сделать промежуток, в течении которого он удерживает шину на низком уровне, как можно короче (чтобы увеличить себе окно выборки), а читать данные с шины как можно ближе к концу «окна выборки» (таким образом можно будет работать с линиями, имеющими бОльшую ёмкость).

В самих устройствах, отдельные передаваемые биты собираются в команды, данные и так далее, но это уже более высокий уровень протокола, который мы здесь рассматривать не будем, поскольку он в разных устройствах может быть разным (соответственно и смотреть его надо в даташите на конкретный девайс).

  1. Эмуляция электронного ключа 1-wire на ATTiny2313

Технология достаточно старая и широко употребляемая

Изначально, выведена на рынок компанией Dallas - Все помнят таблетки для домофонов iButton- это оно

Устройство соединяется с контроллером по одному проводу (кроме общего) - отсюда название. Большое преимущество в том, что каждый чип имеет свой адрес, что позволяет термометры соединять просто параллельно

Я провел массу экспериментов с данным стандартом. Изначально, предполагая очень широко использовать его для управления Умным Домом

Хуже всего, если для управления 1-wire шиной не использовать никаких специализированных контроллеров (подключение напрямую к PIN у Arduino устройств) - в этом случае, проблемы возникают уже при длине кабеля более 3-х метров

Для моих целей такое расстояние не подходило, поэтому я использовал I2C to 1-wire мост DS2482-100

Стоимость чипа на Aliexpress менее 100 руб, чип имеет аппаратный драйвер шины с режимом strong-pullup, что в разы увеличивает надежность работы системы.

Альтернативные решения, как правило, используют USB контроллеры шины 1-Wire на основе DS2490 но это подразумевает использование компьютера в составе контура управления. По опыту, надежность комплексного решения, включающего в себя PC, операционную систему, ПО, сетевую инфраструктуру, в любом случае ниже решения, локализованного в пределах одного контроллера. Поэтому ответственные задачи регулирования я реализовывал таким образом, что это регулирование происходит автономно, контроллером.

У себя я использую шлейф длиной около 150 м.

Термометры опрашиваются, относительно, устойчиво, что позволило предельно дешево и управляемо реализовать систему управления теплыми полами. Но сбои в считывании значений датчиков присутствуют. (В особенности, когда задействовано диммирование освещения или работает приточная вентиляция с фазовой регулировкой мощности нагревательного элемента)

Контроллер опрашивает датчики циклично, поэтому, единичные сбои не влияют на функционирование.

Кроме термометров, я пробовал использовать самую разнообразную перефирию, вооружившись Datasheet - ами написав множество процедур для управления следующими чипами и устройствами на их базе:

Если коротко - себя это не оправдало

Основная проблема - все же не очень хорошая помехозащищенность

Борьба с помехами в сети 1-Wire

Это, пожалуй, самое непростое в данной технологии. Описываю свой опыт:

  • Шину 1-Wire прокладывайте на расстоянии от высоковольтных проводов, трансформаторов LED освещения и проводов LED освешения (провода дают сильную помеху за счет того, что сила тока велика и используется ШИМ модулирование)
  • Не надо использовать экранированную витую пару. Я проложил STP 5-й категории, но при попытке заземлить экран - связь полностью теряется. Предполагаю, что это связано с увеличением емкости проводника.
  • По отзывам, невитая пара (самый дешевый двужильный провод) дает лучший результат.
  • Хороший опыт - подтягивать дальний конец провода через резистор 3-4 КОм к стабилизированному фильтрованному источнику питания 5Вольт.
  • Отводы от шины в 2-3 метра, в целом, не ухудшают качества работы системы, но прилично упрощают монтаж.


Последовательные интерфейсы фактически стали основными в современных приборных и бортовых сетях. Один из наиболее широко используемых интерфейсов такого рода – 1-Wire, представленный в 1990-х годах компаний Dallas Semiconductor (ныне –Maxim/Dallas). Этот интерфейс использует каждый, кто с ключом-таблеткой подходит к двери подъезда. Несмотря на солидный возраст, 1-Wire не утратил актуальности и сегодня благодаря своей универсальности, простоте и удобству использования.

Как устроен 1-Wire Интерфейс 1-Wire был предложен фирмой Dallas Semiconductor в конце 90-х годов прошлого века. Системы 1-Wire привлекательны благодаря легкости монтажа, низкой стоимости устройств, возможности распознавать устройство при подключении к функционирующей сети, большому числу устройств в сети и т.д.

Типичная система 1-Wire состоит из управляющего контроллера (мастера или ведущего) и одного или нескольких устройств (ведомых), присоединенных к общей шине


Устройства подключаются к шине по схеме с открытым стоком и подтягивающим резистором (см. рис.1). Уровень сигналов в шине – от 3 до 5 В. В пассивном состоянии в линии поддерживается высокий уровень напряжения. Все сигналы формируются с помощью замыкания сигнальной шины на землю (низкий уровень напряжения).

Большинство устройств 1-Wire поддерживают две скорости передачи данных: стандартную – около 15 кбит/с и повышенную (overdrive) около 111 кбит/с. Понятно, что чем выше скорость, тем больше ограничений на длину шины и число подключаемых к ней устройств. Режим передачи данных по шине 1-Wire полудуплексный: мастер и ведомые устройства передают данные по очереди. Каждая транзакция через интерфейс 1-Wire начинается с того, что мастер передает импульс Reset. Для этого он переводит напряжение в шине на низкий уровень и удерживает его в этом состоянии в течение 480 мкс

Затем мастер отпускает шину, и подтягивающий резистор возвращает напряжение к высокому логическому уровню. Все ведомые
устройства, обнаружив сигнал Reset и дождавшись его окончания, передают свой сигнал – Presence. Он представляет собой сигнал низкого уровня длительностью 100 200 мс. Устройство может генерировать сигнал Presence и без импульса Reset например, таким способом оно сообщает о
себе при подключении к шине

После передачи импульса Presence устройство 1-Wire готово к приему команд. Весь информационный обмен в шине происходит под управлением мастера. Для передачи каждого бита выделяется специальный временной промежуток (таймслот) длительностью порядка 80 мкс. В начале каждого таймслота
мастер переводит линию на нулевой уровень. Если далее мастер хочет передать 0, он удерживает напряжение на низком уровне как минимум 60 мкс (рис.3а). При передаче единицы мастер удерживает нулевое напряжение 5 – 6 мкс, азатем отпускает линию и выжидает примерно 60 мкс до начала формирования следующего тайм-слота

Если мастер ожидает данные от ведомых устройств, он также обозначает начало тайм-слота, обнуляя линию на 5 – 6 мкс, после чего перестает удерживать низкое напряжение и в течение короткого времени слушает линию. Если устройство хочет передать ноль, оно само обнуляет линию сразу после регистрации импульса начала тайм-слота. Если устройству нужно передать единицу, оно никаких действий не производит. Отметим, что приведенные
значения временных интервалов соответствуют стандартной скорости передачи данных через интерфейс 1-Wire. В режиме overdrive эти интервалы соответственно уменьшаются.

Весь обмен на шине 1-Wire происходит посредством специальных команд. Их число для каждого типа устройств различно. Но есть и минимальный набор стандартных команд, которые поддерживают все 1-Wire-устройства – так
называемые ROM-команды.

Формат команд прост – идентификатор команды (1 байт), за которым могут следовать данные (идентификатор устройства, полезные данные и т.п.). Все устройства в сети знают длину каждой команды.

Последовательность инициализации шины 1-Wire

Информация о значении битов в адресах устройств 1-Wire

У каждого устройства 1-Wire есть 64-разрядный идентификатор (ID). Он состоит из 8-разрядного кода семейства, который идентифицирует тип устройства и поддерживаемые им функции, 48-разрядного серийного номера и 8-битного поля кода циклического избыточного контроля (CRC-8). ID вводится при изготовлении устройства и хранится в ПЗУ. Фирма Maxim гарантирует, что один раз использованный адрес никогда не повторится в другом устройстве. В самом деле, 48 бит – это 2,81 1014 различных чисел. Если производить 1000 миллиардов (1012) различных устройств ежегодно, то все серийные номера можно использовать не ранее чем через 281 год и это только для одного семейства.

Весь обмен командами инициирует мастер. Начало нового цикла транзакций он отмечает командой Reset, и, получив подтверждение, выбирает устройство специальной командой MATCH ROM, передавая ее идентификатор (5516) и 64 бита ID адресуемого устройства. Получив такую команду, ведомое устройство
с данным ID ожидает новых команд от мастера, а все остальные остаются в пассивном состоянии до следующей команды Reset. В системе с одним устройством можно не передавать ID, используя команду SKIP ROM. В результате ведомое устройство считает себя выбранным без получения адреса.

После того, как мастер выбрал устройство для взаимодействия, можно начинать процесс управления этим устройством и обмена данными с ним. Для этого используются команды, которые специфичны для каждого типа устройств.

Но чтобы начать работу с определенным устройством, мастер должен знать его ID. Если в системе только одно ведомое устройство, его адрес можно определить с помощью команды READ ROM. В ответ на команду READ ROM устройство передает свой 64-битный адрес

Передача информационных битов по шине 1-Wire: а – мастер передает сигналы, б мастер считывает сигналы

Если же в системе несколько устройств с неизвестными ID, попытка спользовать команду READ ROM приводит к коллизии. В этом случае для пределения адресов используется специальный алгоритм поиска, в основе которого лежит команда SEARCH ROM . Мастер передает команду SEARCH ROM. В ответ все устройства, подключенные к шине, высылают младший бит своего адреса. Свойства шины 1-Wire таковы, что при одновременной передаче сигналов всеми устройствами результат будет равен логическому

Чтение адреса устройства

И значений всех посланных битов. Следовательно, суммарный отклик равен 1, только когда сигналы от всех устройств равны 1. После приема первого бита адреса мастер инициирует следующий тайм-слот, в котором устройство передает инвертированный первый бит. Сопоставляя значения результатов запроса истинного и инверсного битов, можно получить некую информацию о значениях первых битов адресов устройств (см. таблицу).

Таким образом, при комбинациях 0 1 и 1 0 мастер знает значение первого бита адреса, фиксирует его и по той же схеме может переходить к определению следующего. После получения инверсного бита мастер передает определенный
бит ведомым устройствам. Если его значение совпадает со значением текущего бита из адреса устройства, то устройство продолжает участвовать в поиске и выдает в ответ следующий бит своего адреса. Если не было "расхождения", то значение выставляемого мастером бита определено. В случае расхождения мастер посылает нулевой бит. Такая последовательность – чтение бита адреса и инверсного бита, передача бита мастером – повторяется для последующих 63
битов адреса. Таким образом, алгоритм поиска последовательно исключает все устройства, пока не остается одно последнее – его адрес и определяется в первом цикле поиска.

Способы использования микросхемы DS2490: в составе внешнего USB – 1-Wire адаптера (а); внутри главного компьютера (б); в составе USB-хаба (в)


После того, как адрес первого устройства определен, поискпродолжается для следующего устройства. Алгоритм запоминает место последнего расхождения и выбирает другую ветвь дерева поиска (мастер посылает в этом месте бит с другим значением). Процесс продолжается до тех пор, пока не будет пройдена ветвь, соответствующая последнему устройству. В итоге поиска становятся известны адреса всех устройств, подсоединенных к шине, и их число.

Отметим, что возможность идентификации и быстрого включения в сеть только что подключенного устройства делает 1-Wire эффективным решением для многих приложений. На практике это означает, что прибор достаточно просто подключить к сети, и все дальнейшие транзакции произойдут автоматически. Например, так можно считать данные из памяти датчика, прочитать код электронной метки или электронного ключа, принять массив значений от приборной сети и т.п.

Не менее важно, что сеть 1-Wire относится к самосинхронизирующимся, т.е. не требует отдельной линии для передачи тактовых сигналов. И, конечно, огромное число ID подключаемых устройств выгодно выделяет ее на фоне других последовательных сетей.

Элементная база

Для реализации интерфейса 1-Wire фирма Maxim/Dallas предлагает ряд устройств. В роли мастера интерфейса может выступать как ПК, так и специализированные микроконтроллеры. Соответственно, в ассортименте Maxim/Dallas присутствуют устройства, которые обеспечивают переход к 1-Wire интерфейсу от стандартных интерфейсов компьютера (например, USB и RS232), управляющего работой устройств 1-Wire. Так, микросхема DS2490 служит мостом между интерфейсами USB и 1-Wire . DS2490 используется в системах 1-Wire несколькими способами: входит в состав адаптера USB – 1-Wire, который подсоединяется к USB-порту главного компьютера напрямую кабелем или через USB-хаб (рис.5а); встраивается в главный компьютер (рис.5б) или же в USB-хаб.

Домофонный ключ с iButton


Некоторые устройства могут не только соединять 1-Wire с другими интерфейсами, но также брать на себя часть функций мастера шины 1-Wire. Одно из таких устройств – DS2482-100. Это мост между интерфейсами I2C и 1-Wire. Микросхема DS2482-100 преобразует протоколы между управляющим I2C микроконтроллером (мастером) и ведомыми 1-Wire устройствами. По отношению к этим устройствам DS2482-100 выступает в роли мастера. С помощью встроенных таймеров DS2482-100 формирует фронты передаваемых по шине сигналов, снимая эту нагрузку с управляющего микроконтроллера. Для того чтобы оптимизировать форму сигналов, DS2482-100 контролирует скорости нарастания и уменьшения напряжения в линии и предоставляет дополнительные программируемые функции, которые помогают согласовать параметры сигналов и особенности ведомых устройств.

Микросхема DS2482-800 аналогична по функциям DS2482-100, но может работать с восемью шинами 1-Wire. В качестве моста между интерфейсами RS232 и 1-Wire можно применять микросхему DS2480B. Устройства 1-Wire соединяются с помощью витой пары различных типов или даже обычным телефонным проводом.

Некоторые применения 1-Wire

Перечень устройств, поддерживающих 1-Wire, и их применений весьма велик , поэтому полностью описать его в данной статье невозможно. Приведем лишь несколько примеров наиболее распространенных применений технологий 1-Wire.

Наличие уникальных 64-битных адресов позволяет широко использовать устройства 1-Wire в системах аутентификации. Здесь они часто применяются в устройствах iButton. Это микросхема с введенным на этапе производства 64-битных адресом, заключенная в круглый корпус из нержавеющей стали диаметром 16 мм (MicroCAN). Такие устройства функционируют, например, в домофонных ключах.

Микросхемы с поддержкой 1-Wire (например, DS2401, DS2431, DS28E01-100) используются также для идентификации картриджей принтеров, медицинских сенсоров, емкостей с реагентами и др. Преимущество микросхем 1-Wire в том, что для контроля идентифицируемого устройства нужен всего один контакт. Такие микросхемы заключены в специальный плоский корпус (SFN – Single Flat No lead) размером 6 × 6мм, который облегчает их присоединение к устройству.

Еще одно распространенное применение 1-Wire – системы автоматизации. В первую очередь это системы многоточечного измерения температуры различных сред и мониторинга теплового режима помещений. Температуру можно измерять датчиками производства той же Maxim/Dallas. Наиболее популярный из них – цифровой термометр DS18S20. Он имеет разрешение 9 бит и измеряет температуру в диапазоне от -55 до 125°C. Точность измерений составляет 0,5°C в диапазоне -10…85°C. Поскольку каждый термометр, как и любое устройство 1-Wire, имеет уникальный 64-битный адрес, к одной шине 1-Wire можно подключать множество таких приборов.

Таким образом, благодаря своим выигрышным возможностям – один провод для передачи данных и управления устройствами, подсоединение устройств через один контакт, питание подключенных устройств по проводу передачи данных, наличие у каждого устройства уникального адреса, низкая стоимость
элементной базы – интерфейс 1-Wire широко представлен в самых различных изделиях современной электроники.

Разработчиком платформы 1-Wire является Dallas Semiconductor Corporation (US). В 2001 году она была приобретена гигантом мировой микроэлектроники фирмой Maxim Integrated Products (US). Платформа включает серию микросхем и устройств iButton на их основе, а также различные адаптеры, наборы для макетирования и программное обеспечение.

Производство микросхем и устройств iButton является исключительной прерогативой фирмы Maxim, их клонирование другими производителями политикой лицензирования не предусмотрено. В то же время сторонние фирмы разрабатывают и производят на основе микросхем данной платформы разнообразные модули для систем автоматизации, адаптеры, контроллеры, системы макетирования, а также ПО.

Рис.1. Компоненты платформы 1-Wire.

Платформа разрабатывалась с конца 80-х до конца 90-х годов и предназначалась для задач контактной идентификации объектов, в т.ч. с функциями измерения и регистрации температуры, влажности, параметров автономного электропитания, а также с функциями съема, хранения и переноса данных. Широко распространенным образцом такого рода применения является ключ-таблетка для домофона. Менее известным, но также широко распространенным является использование платформы 1-Wire для решения задач идентификации и регистрации параметров картриджей, материнских плат, биологических объектов, идентификации и защиты от несанкционированного доступа различных боксов, контейнеров и т.п. Суть данного целевого назначения и принципа действия отражена в термине «Touch Memory» (контактная память), который часто используют для упоминания устройств iButton. Подробную информацию о штатных областях применения и достоинствах платформы 1-Wire можно найти на следующих страницах сайта фирмы Maxim Integrated:

Несмотря на такое изначально узкоцелевое назначение, платформа 1-Wire по своим технико-экономическим характеристикам оказалась весьма подходящей для бюджетных решений определенных категорий АСУ ТП. Продвижение платформы в нишу автоматизации явилось предпосылкой ее использования в дальнейшем и в системах «умного» дома, в первую очередь в системах контроля микроклимата и метеоусловий, что обусловлено составом датчиков. Особо по вкусу платформа пришлась мелким частным компаниям и разного рода умельцам, разработавшим для нее ряд программных средств, контроллеров, периферийных модулей, а также создавшим ряд проектов домашней автоматизации.

Оценки доли платформы на рынке систем домашней автоматизации отсутствуют.

Базовыми решениями, на которых основана платформа, являются следующие:

A. Двухпроводный интерфейс.

Вместе с тем в устройствах, имеющих функцию автономной регистрации данных, т.е. без подключения к магистрали, предусматривается внутренний источник питания (литиевая батарейка), а питание устройств с повышенным потреблением производится от внешнего источника по отдельной линии.

Ограничение магистрали всего двумя линиями позволяет обеспечить гарантированный контакт внешних цепей устройства iButton с цепями контактного устройства магистрали «легким движением руки», т.к. для этого требуется механическое сопряжение всего двух пар элементов. Именно в этом, собственно говоря, и заключается главное достоинство «двухпроводности» применительно к первоначальным задачам платформы 1-Wire.

B. Индикация подключения в горячем режиме.

Протокол 1-Wire предусматривает выдачу устройством, поключаемым к магистрали в горячем режиме, импульса, оповещающего о появлении на магистрали нового устройства. Необходимость такого оповещения также дикутется особенностями целевого назначения платформы, поскольку обмен с устройством iButton должен инициироваться в момент его подключения к магистрали.

C. Уникальный идентификатор устройства

Каждая микросхема 1-Wire содержит уникальный 64-битный код, записываемый на этапе производства. Данный код позволяет индивидуализировать все выпускаемые устройства 1-Wire, для чего производитель гарантирует отсутствие одинаковых кодов (аналогично MAC-адресам сетевых адаптеров). При подключении к магистрали данный код считывается контроллером и используется для идентификации связанного с этим устройством объекта, а также для определения типа устройства. При подключении к магистрали нескольких устройств их коды могут использоваться в качестве их адресов, что позволяет строить технологические сети, получившие название MicroLAN.

Замечание. Для задач автоматизированного управления, к которым, в том числе, относятся и задачи «умного дома», данные решения не дают каких-либо преимуществ. Так, нет ощутимой разницы при использовании в современном интерьере двухпроводного и, например, четырехпроводного кабеля, тем более, что использование исполнительных устройств все равно потребует отдельной линии питания. Также не актуальна для домашней автоматики возможность подключения устройства в «горячем» режиме, если только это не ключ электронного замка. Использование же в качестве адреса устройства его идентификатора вместо установки фиксированного, регламентированного проектом, вообще сопряжено с определенными неудобствами наладки и ремонта сети, хотя разработчик и предлагает соответствующие алгоритмы самонастройки и адаптации, а также возможность установки с помощью внешних перемычек для ряда устройств дополнительного 4-х битного локального адреса. Пригодность платформы для отдельных ниш автоматизации вытекает из ее дешевизны, простоты применения, наличия в составе ряда востребованных датчиков, устройств сопряжения со стандартными интерфейсами, драйверов для распространенных операционных систем, а также наличием возможности расширения функционала за счет применения элементной базы общего назначения.

Сеть на базе протокола 1-Wire имеет централизованную архитектуру. Информационный обмен происходит под управлением центрального контроллера - «мастера», остальные сетевые устройства имеют статус «слэйв» (рис.3). В качестве контроллера сети может использоваться любое программируемое устройство, имеющее внешний интерфейс. Для согласования контроллеров с магистралью 1-Wire в составе программно-технических средств платформы имеются адаптеры и драйверы для проводных последовательных интерфейсов RS-232, RS-485, I2C, SPI, Ethernet, для параллельного интерфейса LPT, а также для Wi-Fi.

Рис.3. Конфигурация сети MicroLAN на базе протокола 1-Wire

Топология сети может иметь как линейную, так и ветвящуюся древовидную структуру. Основные параметры интерфейса 1-Wire следующие:

  • максимальная длина магистрали при использовании витой пары - до 300 м;
  • максимальное количество абонентов на магистрали максимальной длины - до 250;
  • скорость обмена по магистрали максимальной длины - до 16,3 кбит/c;

Для магистрали рекомендуется ипользовать стандартную витую телефонную пару CAT5. В случае использования стандартного телефонного провода с двумя парами вторую пару использовать для других целей не рекомендуется во избежание увеличения емкости линии, т.е. в случае подачи внешнего питания на устройства желателен отдельный кабель.

Обмен данными по магистрали включает три фазы (рис.4):

  • фазу сброса, включающую импульс сброса от контроллера и ответный импульс подтверждения присутствия от абонента (абонентов);
  • фазу выборки устройства, включающую команду его выборки (по коду, без кода, групповую, поиска) и его код, если командой он предусмотрен;
  • фазу записи/чтения данных, включающую код команды и данные.

Рис.4. Циклограмма обмена данными

Логика всех устройств тактируется отрицательным фронтом сигналов контроллера как в режиме записи, так и в режиме чтения. Биты кодируются длительностью положительного импульса: «1» передается длинным импульсом, а «0» - коротким. В режиме записи все импульсы данных формируются контроллером. В режиме чтения контроллер формирует последовательность единиц, а абонент накладывает на них свою маску нулей (рис.5).

Рис.5. Тактирование и кодирование на физическом уровне

Более подробные сведения об архитектуре магистрали 1-Wire приведены в следующих официальных документах фирмы Maxim:

Архитектура ЗУ и регистров периферийных устройств платформы организована таким образом, что совокупность всех сетевых устройств может быть представлена как единая файловая система, что позволяет работать с сетью как с интегрированным носителем данных. Описание ее структуры приведено в AN114 1-Wire File Structure .

Номенклатура микросхем платформы 1-Wire и устройств iButton включает как простые носители кода идентификации, так и носители кода идентификации с дополнительными функциями, в т.ч.

  • с функциями различных типов ЗУ - Memory EPROM, EEPROM, ROM, NV SRAM ;
  • с функциями измерения температуры - Temperature Sensors ;
  • с функциями мониторинга, защиты и конфигурирования элементов электропитания - Battery Monitors, Protectors, and Selectors и Battery ID and Authentication ;
  • с функциями хронирования - Timekeeping & Real-Time Clocks ,
а также интерфейсные микросхемы для сопряжения контроллеров с магистралью 1-Wire - 1-Wire Interface Products .

Вся схемотехника, реализующая архитектуру, уже заложена в микросхемах платформы. При разработке периферийных устройств разработчику остается только добавить обвязку для сопряжения с датчиками, актюаторами и устройствами индикации, элементы защиты внешних цепей и, если потребуется, элементы внешнего электропитания. При разработке интерфейсных адаптеров необходима, соответственно, обвязка для сопряжения микросхем - драйверов магистрали с интерфейсом контроллера сети. На рис. 6 в качестве примера приведен фрагмент схемы модуля дискретного ввода-вывода фирмы ЭлИн.

Рис.6. Фрагмент схемы модуля дискретного ввода-вывода фирмы ЭлИн

На базе комплектующих 1-Wire, выпускаемых фирмой Maxim, производится достаточно большое разнообразие конструктивно и функционально законченных устройств для систем автоматизации, в т.ч. для «умного» дома. Такие устройства включают различные адаптеры и серверы магистрали, модули ввода-вывода дискретных и аналоговых сигналов, датчики, кабели и пр. Номенклатура, характеристики и цены таких устройств приведены на сайтах их производителей, к числу наиболее известных из которых относятся:

Наиболее развитую номенклатуру OEM-устройств, включающую в т.ч. и управляемые розетки для коммутации электропитания, предлагает НТЛ ЭлИн. За рубежом наибольшей популярностью пользуются модули фирмы Embedded Data Systems. Однако в целом число OEM-производителей невелико, они не относятся к категории «гигантов» индустрии средств автоматизации и, кроме того, в значительной степени ориентированы на рынок домашних умельцев.

Рис.7. Примеры OEM-модулей 1-Wire

Фирма Maxim Integrated предоставляет для программирования систем на базе 1-Wire библиотеки API и SDK для широкого ряда платформ - персональных компьютеров с ОС Windows/Linux/MacOS, мобильных устройств, микроконтроллеров, .NET и JAVA. Их общее описание приведено в AN155 , а описание конкретных пакетов со ссылками на скачивание дистрибутивов и документации приведено в следующих документах:

Предлагается также программный cканер сети OneWire Viewer , позволяющий находить и идентифицировать подключенные к сети устройства и отображать полный перечень их параметров и данных.

Из сторонних разработок наибольший интерес представляют следующие:

Существует также большое число специализированных программ, разрабатываемых под узкие задачи (см., например, для модулей НТЛ ЭлИн).

Похожие публикации