1 wire: Введение в 1-Wire / Хабр

Содержание

Введение в 1-Wire / Хабр

Первая статья этого цикла тут
Вторая часть этого цикла тут
Третья часть этого цикла тут

Многим из вас, наверняка, знакомо это устройство. Но не все знают, что это микросхема с интерфейсом 1-wire. В таких корпусах (да и не только таких) компания Maxim, ранее Dallas Semiconductor, выпускает целый ряд устройств: термохроны, микросхемы флеш-памяти, ацп, ключи и многое другое.
Всё это – микросхемы с интерфейсом 1-wire.

Коротко

1-wire это интерфейс, позволяющий строить сети из устройств с топологией общая шина, один ведущий – много ведомых. Каждое устройство имеет свой собственный уникальный 64-битный адрес. Для двухсторонней передачи сигналов, несмотря на название, используется два провода: один общий\земля, а второй для питания и передачи данных. В этом и состоит особенность этой сети, что для питания и данных используется один проводник, хотя в некоторых устройствах опционально присутствует третий вывод для подключения внешнего питания.

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

Как это работает?

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

Более-менее общие сведения о 1-Wire можно прочитать в википедии, а если вас заинтересовала специфика и подробности протоколов то можно почитать, например, тут.

Про 1-wire написано достаточно много, но в основном о том как применять и общаться с ними на уровне микроконтроллеров, встраивать в устройства, или просто читать данные с помощью PC, как правило одно-два устройства и на небольших расстояниях. Я не хочу повторяться, а планирую рассказать о том, как мы в современных реалиях на предприятии строили большую сеть, которая на текущий момент охватывает три здания, имеет более 300 1-wire устройств, 3 сервера для сбора и обработки данных и работает 24 часа в сутки 7 дней в неделю, розетки 1-wire установлены в помещениях на ряду с телефонными и ethernet практически в каждой комнате и коридорах.

Так что, если это вам интересно – будем продолжать.

Ссылки по теме

Официальный сайт
Arduino и iButton
Общий обзор протокола
Ещё одна очень популярная статейка

продолжение здесь: тыц

Как устроен однопроводный интерфейс 1-Wire — radiohlam.ru

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

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

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

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

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

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

PDH < 60 мкс), должны сформировать на шине низкий уровень (это и есть сигнал присутствия), длительностью от 60 до 240 мкс (60 мкс < TPDL < 240 мкс), после чего они также отпускают шину.

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

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

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

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

  1. 1 мкс≤TLOW1<15 мкс — время, в течении которого шина притянута к нулю при передаче 1
  2. 60 мкс≤TLOW0<TSLOT — время, в течении которого шина притянута к нулю при передаче 0
  3. 60 мкс≤TSLOT<120 мкс — длительность тайм-слота
  4. TREC>1 мкс — интервал между тайм-слотами

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

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

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

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

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

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

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

Вот и вся теория. Ниже даны ссылки на различные алгоритмы и самопальные девайсы с интерфейсом 1-wire (пока не все, но скоро будут все):

  1. Программная реализация 1-wire Master для AVR
  2. Эмуляция электронного ключа 1-wire на ATTiny2313
  3. Поиск устройств на шине 1-wire
  4. Шлюз «RS2321-wire» на микроконтроллере ATTiny2313 (режим Master)

1-wire на предприятии, программный уровень / Хабр

Первая статья этого цикла тут
Вторая часть этого цикла тут
Третья часть этого цикла тут

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

Серверная часть

У нас есть три сервера в трёх разных зданиях, к которым через RS-232 порт подключены адаптер и сеть 1-wire. На серверах крутится программа, которая через адаптер отдает команду на переключение веток микросхемам DS2409, опрашивает все найденные датчики в этой ветке, затем переключается на следующую ветку, и так по кругу.

Изначально задумывалось выдавать данные о всех датчиках по интерфейсу OPC т.к. он де факто является промышленным стандартом и выведя данные на этот уровень мы получим простые и широкие возможности для интеграции практически с любыми SCADA. Изначально мы искали готовое решение OPC сервера для 1-wire, эти поиски принесли поистине печальные результаты… Несмотря на достаточную распространённость 1-wire, найти подходящий OPC не удалось, да и вообще практически не удалось найти готового.

Зато нашли достаточно интересную штуку: Fastwel UniOPC. Под неё написали свою библиотеку, которая и реализует то что необходимо: сбор данных с датчиков по кругу и выдачу их через OPC, а также после каждого круга сохраняет текущие данные в таблицу на SQL-сервере.

Лирическое отступление:
Кстати, этот проект Fastwel’а, как мне кажется, давно заброшен и не сильно обновляется: поддерживает только OPC-DA, а весьма хотелось бы в нем видеть OPC-XML-DA, всё-таки время движется, технологии идут вперёд, а так — штука весьма простая и полезная.

Раз уж мы рассказываем про программную часть, то сервера все у нас на базе Windows Server (версии кое-где отличаются), а базы данных соответственно MSSQL.

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

Как видно из рисунка, есть два типа клиентов этой системы:

  • 1. операторы — которые видят текущие значения и аварии при выходе параметров за какие-то границы.
  • 2. ответственные люди — которые хотят анализировать историю за разные промежутки времени и, например, сравнивать поведение разных объектов между собой.
Операторская часть

На рабочем месте оператора стоит обычный PC под управлением winXP на котором работает SCADA. Одним из первоначальных вариантов было использовать для операторского места панельный компьютер, но это показалось дороговато, да и особо бессмысленно, решили ограничится обычным PC.

Дальше был долгий выбор какую же SCADA использовать. Мы перепробовали демо версии с десятка различных SCADA систем (и наши и не наши тут были и MasterSCADA и Genesis и мнного много различных…). В итоге остановились на LabView. (Для тех кто не знаком, поясню: LabView одна из древнейших разработок SCADA, до сих пор поддерживается и обновляется, умеет очень много чего, очень гибкая)
Нарисовали проект, получилось вот что: пример экрана оператора .

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

Ответственные люди

Для этой группы пользователей было принято решение написать специальное приложение, которое может делать запрос к базе MSSQL и выбирать данный по объектам за заданный промежуток времени, сравнивать их с другим растягивать, масштабировать и всяко-разно анализировать.

Приложение написано на VS2005 и использует весьма популярный компонент ZedGraph.


На этой картинке вы можете видеть один конкретный холодильник, для него два графика, т.к. контролируются два параметра, температура в морозильной камере и в самом холодильнике.

Заключение

В заключение, хочу сказать, что это не окончательный результат, а то что существует и работает на сегодняшний день. В дальнейших планах, мы думаем отказаться от SCADA и OPC потому, что эти технологии используют DCOM, и очень не дружелюбно настраиваются. Думаем перейти на Web-приложения, или просто создать свое приложение, которое будет работать непосредственно с базой. SCADA и OPC технология как решения себя не оправдывает.

Если будут возникать вопросы, то — добро пожаловать )

Железо / Блог компании Rainbow / Хабр


Для одного из проектов по автоматизации потребовалось сделать устройство, которое является подчинённым 1-Wire устройством, принимает команды от мастера и выставляет на своих выходах значение аналогового сигнала в диапазоне от 0 до 10В.
Проанализировав линейку стандартных микросхем 1-Wire от Maxim, стало ясно, что нет микросхемы, которая позволит реализовать подобный функционал.
Потому было принято решение реализовывать 1-Wire slave на микроконтроллере. Надеюсь, данный материал будет интересен и полезен людям, которые делают «умный дом» своими руками, т.к. 1-Wire достаточно популярная шина в подобных проектах. В качестве камня был выбран МК Cortex M0+ ATSAMD20G16 от Atmel, но о реализации в коде расскажем во второй части. Забегая немного вперед, скажу что в третьей части цикла пойдет речь о реализации собственного семейства устройств для линуксовой библиотеки OWFS (One Wire File System). А сегодня расскажем о некоторых аппаратных решениях, к которым мы пришли в процессе разработки.

Речь в основном пойдет о том как подключить ногу микроконтроллера к 1-Wire шине с минимальным вредом для здоровья. Будем двигаться от простого к сложному.
Ничего не делать

Первая проблема, с которой сталкиваешься при попытке собрать 1-Wire устройство на микроконтроллере с ядром Cortex – это уровень питания микроконтроллера 3.3В, в то время как на шине 1-Wire имеем 5В. Можно использовать толерантность ног микроконтроллера к 5В и подключать как есть, прямо к шине. К сожалению, ноги SAM D20 не толерантны к 5-ти вольтам, потому нам этот вариант не подошел, но отметить его, справедливости ради, стоит. Хотя, сажать внешнюю шину напрямую на ногу 3.3В камня идея не самая удачная. Во-первых, есть вероятность нестабильной работы других устройств на шине с паразитным питанием, во-вторых на длинном проводе можно «словить» наводку.
Преобразование уровней


Самый простой вариант — двунаправленный преобразователь уровня на транзисторе. Для него потребуется где-то брать 5В со стороны шины 1-Wire.
Первый вариант — делать 5В на своем устройстве (помимо 3.3В) для «запитки» шины. Как следствие, усложнение схемотехники.
Второй вариант — прокладывать шину 1-Wire в три провода. Третьим проводом идёт линия питания +5В. Из проблем — лишний провод, просадка напряжения на длинном проводе.
Согласование уровней

Если очень не хочется использовать +5В можно разделить сигнальную линию на 2 составляющих (вход и выход)

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

Для того что бы сделать прием данных по 1-Wire более уверенным необходимо сделать крутые фронты импульсов со стороны микроконтроллера. Для этого воспользуемся компаратором от TI LMV331, который обеспечит более точный и резкий переход между логическими «0» и «1», а так же гистерезис 160mV. Еще заменим выходной би-полярный транзистор BC547 на полевой IRLML6346 и поставим защитный TVS диод ESD5Z6 на 6В.

Для данной схемы компаратор потребуется запитать от 5В. Где их можно взять было сказано выше.
Развязанный 1-Wire

Для обеспечения электрической развязки шины 1-Wire и внутренней электроники устройства воспользуемся изолированным транслятором уровней ADuM1201, и изолированным DC/DC конвертор TES 1-1211. Как и в предыдущем случае, линию данных 1-Wire делим на 2 линии: 1W_Rx и 1W_Tx.

DC/DC конвертор с 12 на 5 вольт взят для примера, можно использовать аналогичный 3.3/5.
Остальная схемотехника

Для полноты картины покажем схемотехнику подключения микроконтроллера, а так же выходных аналоговых каналов 0-10В.


Т.к. протокол 1-Wire требует наличие уникального адреса для каждого устройства на шине, на плату ставим 1-Wire UID от Maxim DS2411. Будучи для неё мастером шины будем считывать её UID и использовать его в качестве собственного адреса. У DS2411 код семейства 0x01 (family code — старший байт UID’а). Мы же на сайте OWFS выберем незанятый код семейства для нашего нового устройства и будем подменять первый байт.

Как уже было сказано, во второй части приступим к программной реализации протокола 1-Wire Slave.

1-Wire / Коммуникации / RoboCraft. Роботы? Это просто!

1-Wire – разработан фирмой Dallas Semiconductor (ныне MAXIM) в конце 90-х годов.
Фирменная документация здесь.

Этот интерфейс интересен тем, что для двустороннего обмена требуется всего одна линия! (отсюда и название 🙂

Правда, ещё требуется общий провод (земля), но это вроде как в расчёт не принимается 🙂

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

Вывод DQ устройства представляет собой вход КМОП-логического элемента, который может быть зашунтирован (замкнут на общий провод) полевым транзистором. Сопротивление канала этого транзистора в открытом состоянии — около 100 Ом. Когда транзистор заперт — имеется небольшой ток утечки (примерно 5 мкА) на общий провод.

Обратите внимание, что шина 1-Wire должна быть подтянута отдельным резистором к напряжению питания (может быть от 3V до 5V — нужно уточнять по характеристикам подключаемого устройства).
Сопротивление этого резистора 4.7k, однако, это значение подходит только для достаточно коротких линий.
Если шина используется для подключения устройств на большее расстояние, то сопротивление подтягивающего резистора необходимо уменьшить (сопротивление зависит от величины максимального втекающего тока линии DQ конкретного устройства 1-Wire).

Примечательный момент – некоторые устройства 1-Wire могут использовать т.н. «паразитное питание»/фантомное питание (Parasite power) – т.е. питание устройства осуществляется от линии данных

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

Переходим к тому, как собственно происходит обмен информацией по 1-Wire.

Основные положения:
0. передача информации возможна только выдачей низкого уровня в линию, т.е. замыканием ее на общий провод. В высокий логический уровень линия вернется сама, из-за наличия подтягивающего резистора. (теперь становится понятно, что наличие внешнего подтягивающего резистора – обязательное условие работы 1-Wire)
1. обмен происходит по инициативе ведущего устройства (обычно — микроконтроллера)
2. обмен информацией начинается с подачи импульса сброса (RESET pulse) на линию
3. 1-wire устройства предусматривают «горячее» подключение (мы ведь втыкаем наши ключи-таблетки в в домофон, верно?)
4. при подключении, 1-wire устройство выдаёт в линию DQ импульс присутствия (PRESENCE pulse). Этот же импульс выдаётся при обнаружении сигнала RESET. (при втыкании ключа в домофон — ключ как-бы говорит ему – «вот он я!»)
5. обмен информации ведётся так называемыми тайм-слотами – один слот содержит один бит информации.
6. данные передаются побайтно – бит за битом, начиная с младшего байта. Достоверность данных (проверка отсутствия искажений) гарантируется путем подсчета циклической контрольной суммы (CRC).

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


Как видно по диаграмме — МК формирует импульс RESET, переводя в низкий логический уровень шину 1-Wire и удерживая её не менее 480 микросекунд.
Затем МК “отпускает” шину и напряжение возвращается к высокому логическому уровню (время зависит от ёмкости линии и сопротивления подтягивающего резистора).
Протокол 1-Wire ограничивает это время диапазоном от 15 до 60 микросекунд, что и влияет на выбор подтягивающего резистора (на время возврата линии к высокому уровню большее влияние оказывает ёмкость лини, но, чаще всего, мы изменить её не можем).
Обнаружив импульс RESET, ведомое устройство формирует ответный импульс PRESENCE. Для этого устройство прижимает линию DQ к земле и удерживает от 60 до 240 микросекунд. Затем устройство так же “отпускает” шину.
После этого устройству еще дается время для завершения внутренних процедур инициализации, таким образом, МК должен приступить к любому обмену с устройством не ранее, чем через 480 микросекунд после завершения импульса RESET.
Т.о. процедура инициализации, с которой начинается обмен данными между устройствами, длится минимум 960 микросекунд.

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

Различают 4 типа тайм-слотов:
1. передача «1» от МК,
2. передача «0» от МК,
3. прием «1» от устройства,
4. прием «0» от устройства.

Тайм-слот всегда начинает МК, прижимая шину к земле.
Длительность тайм-слота находится в пределах от 60 до 120 микросекунд.

Между тайм-слотами всегда должен быть интервал не менее 1 микросекунды (определяется параметрами ведомого устройства).

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

Тайм-слот передачи «0» заключается просто в прижимании шины 1-Wire к земле в течение всей длительности тайм-слота.
Передача «1» осуществляется путем «отпускания» шины 1-Wire со стороны МК не ранее чем через 1 микросекунду после начала тайм-слота, но не позже чем через 15 микросекунд.

Ведомое устройство опрашивает уровень в шине 1-Wire в течение временного интервала (показанного в виде серого прямоугольника), т.е. начиная с 15-й микросекунды от начала тайм-слота и заканчивая 60-й микросекундой от начала (для большинства устройств — около 30-й микросекунды от начала тайм-слота).
Заштрихованная область — это область «нарастания» уровня в шине 1-Wire, которая зависит от емкости линии и сопротивления подтягивающего резистора.
Тайм-слоты приема информации отличаются тем, что МК формирует только начало тайм-слота (так же, как при передаче «1»), а затем управление уровнем шины 1-Wire берет на себя устройство, а МК осуществляет ввод этого уровня так же в определенной зоне временных интервалов.
Зона эта, как видно из рисунка, довольно мала. Т.к. заштрихованная область — область неопределенности, поэтому для ввода, микроконтроллеру остается даже не промежуток, а скорее конкретный момент, когда он должен ввести уровень сигнала из линии. Этот момент времени — 14-я или 15-я микросекунда от начала тайм-слота.

Резюмируем:
— МК начинает тайм-слот, прижимая шину 1-Wire к логическому «0» в течение 1 микросекунды.
— Последующий уровень зависит от типа тайм слота: для приема и передачи «1» уровень должен стать высоким, а для передачи «0» — оставаться низким вплоть до конца тайм-слота, т.е. от 60 до 120 микросекунд.
— принимая данные, МК должен считать уровень в шины 1-Wire в промежутке от 13-й до 15-й микросекунде тайм-слота.
— МК должен обеспечить интервал между тайм-слотами не менее 1 микросекунды (лучше — больше, максимальное значение не ограничено).

Для достижения нужных временных интервалов нужно следовать простым правилам:
— все сигналы, которые должен формировать МК, следует формировать по принципу необходимого минимума длительности (т.е. немного больше, чем указанная минимальная длительность)
— от устройства следует ожидать сигналов по принципу наихудшего (т.е. ориентироваться на самые худшие варианты временных параметров сигнала).

Теперь настало время разобраться с протоколом обмена информации 🙂

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

Не трудно посчитать, что устройств одного типа может быть выпущено
281 474 976 710 655 (десятичное представление 0xFFFFFFFFFFFF – 48 бит — 6 байт идентификационного номера) – т.е. 281 биллион – довольно много – ага 🙂

Предположим, что на шине 1-Wire имеется более одного устройства.
В этом случае перед МК встают 2 проблемы: определение количества имеющихся устройств и выбор (адресация) одного конкретного из них для обмена данными.
Номера некоторых устройств наносятся прямо на корпус микросхем (например, для наших ключей-таблеток — iButton), а номера других можно определить при помощи специальных программ или устройств.
Итак, предположим, что мы знаем номера всех устройств 1-Wire на шине.

Алгоритм работы с ними следующий:
1. МК посылает, импульс RESET, и все имеющиеся устройства выдают PRESENCE.
2. МК посылает в шину команду, которую принимают все устройства. Определено несколько общих команд для всех типов 1-Wire-устройств, а так же есть команды, уникальные для отдельных типов устройств.

Общие команды:

Команда	Значение байта	Описание	
SEARCH ROM	0xF0	Поиск адресов - используется при универсальном алгоритме определения количества и адресов подключенных устройств	
READ ROM	0x33	Чтение адреса устройства - используется для определения адреса единственного устройства на шине	
MATCH ROM	0x55	Выбор адреса - используется для обращения к конкретному адресу устройства из многих подключенных	
SKIP ROM	0xCC	Игнорировать адрес - используется для обращения к единственному устройству на шине, при этом адрес устройства игнорируется (можно обращаться к неизвестному устройству)

3. После того, как МК выдаст команду READ ROM, от устройства поступит 8 байт его собственного уникального адреса — МК должен их принять.
Любая процедура обмена данными с устройством должна быть завершена полностью либо прервана посылкой сигнала RESET.

4. Если отправлена команда MATCH ROM, то после нее МК должен передать 8 байт адреса конкретного устройства, с которым будет осуществляться последующий обмен данными.

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

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

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

1-Wire и Arduino
Arduino/CraftDuino/Freeduino можно подружить с 1-Wire, используя библиотеку Jim Studt-а – OneWire.
скачать
— там же можно посмотреть на функции расчёта CRC.

Приложение

Алгоритм поиска устройств 1-Wire

К сожалению, я не смог найти в рунете материалов, которые бы описывали процесс – как собственно ведущее устройство сможет найти несколько устройств, подключённых к линии 1-Wire.
Однако, этот процесс подробно освещён в апноуте (Application Note):
AN187 — 1-Wire Search Algorithm

1. Итак, поиск начинается с импульса RESET от ведущего устройства и принятия PRESENCE от ведомых.
2. Затем, посылается 1 байт команды:
0xF0 – осуществляется поиск всех устройств на линии
или
0xEC – поиск среди устройств, находящихся в состоянии тревоги (alarm state).

3. Устройства отправляют первый бит своего уникального номера.
Если несколько устройств передают свой бит одновременно – результирующий бит на линии получится, как результат операции логического И (AND)
4. следующий бит, который отправляют устройства – это дополнение первого бита
(если первый бит был 1, то будет 0 и наоборот – если был 0 – теперь будет 1)
На основании этих двух битов – ведущее устройство может сделать вывод о первом бите устройств на линии:

5. Далее, МК отправляет бит назад. И теперь продолжат работу только те ведомые устройства у которых этот бит установлен. Если же устройство такого бита не имеет – оно должно перейти в режим ожидания до следующего сигнала RESET.
6. Данная «двубитная передача» повторяется для всех следующих 63 бит ROM.
7. Т.о. все устройства на линии, кроме одного перейдут в состояние ожидания, а код ROM этого единственного устройства будет известен 🙂

Cсылки
Интерфейс 1-Wire — данная замечательная статья использовалась при написании этой заметки
iButton
Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products

http://en.wikipedia.org/wiki/1-Wire
http://ru.wikipedia.org/wiki/Фантомное_питание
http://ru.wikipedia.org/wiki/Порядок_байтов
http://ru.wikipedia.org/wiki/CRC

библиотека Jim Studt-а – OneWire для Arduino

По теме
Интерфейс I2C
SPI

Wire — это… Что такое 1-Wire?

1-Wire (англ. один провод) — двунаправленная шина связи для устройств с низкоскоростной передачей данных (обычно 15,4 Кбит/с, максимум 125 Кбит/с в режиме overdrive), в которой данные передаются по цепи питания (то есть всего используются два провода — один для заземления, а второй для питания и данных; в некоторых случаях используют и отдельный провод питания). Разработана корпорацией Dallas Semiconductor и является её зарегистрированной торговой маркой.

Соответственно, топология такой сети — общая шина. Сеть устройств 1-Wire со связанным основным устройством названа «MicroLan», это также торговая марка Dallas Semiconductor.

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

Достоинства

Одна из привлекательных характеристик шины — тот факт, что для связи с устройством необходимо лишь два провода: на данные и заземление. Для этого интегральная схема включает конденсатор ёмкостью 800 пФ для питания от линии данных (так называемое питание от паразитного источника).

Другая привлекательная характеристика шины — большое расстояние передачи (до 300 метров, при соблюдении ряда условий — специальный кабель IEEE1394 (Firewire), специальный драйвер сети (активная подтяжка с учетом тока в линии), топология общая шина с единым стволом (не свободная топология) [1]), а также изменяемость конфигурации любой сети 1-Wire в процессе её работы.

Реализация

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

Некоторые лабораторные системы и другие системы сбора данных и управляющие системы подключают к устройствам 1-Wire, используя шнуры с модульными разъёмами или с кабелем CAT-5, с устройствами, установленными в разъём, включёнными в небольшую печатную плату, или присоединёнными к исследуемому объекту. В таких системах популярен разъём RJ11 (6P2C или модульные разъёмы 6P4C, обычно используемые для телефонов).

Системы датчиков и приводов могут быть связаны компонентами 1-Wire, каждый из которых включает в себя всё необходимое для функционирования шины 1-Wire. В качестве примера можно привести термометрию, таймеры, датчики напряжений и токов, контролирование батарей, и память. Они могут быть подключены к ПК при помощи преобразователей шины. Последовательные интерфейсы USB, RS-232, и параллельный интерфейс (LPT) являются популярными решениями для соединения MicroLan с ПК. MicroLan также является интерфейсом для микроконтроллеров, таких как Atmel AVR, Parallax BASIC Stamp и семейство Microchip PIC. Однако аппаратной поддержки этой шины, микроконтроллеры (AVR, PIC и другие), как правило не имеют, и работа с шиной реализуется программно, с использованием сторонних библиотек (вроде Arduino и других), либо программист, имея даташит, может разработать сам необходимый функционал.

iButton

iButton на связке ключей

Некоторые устройства доступны в небольших корпусах (MicroCAN), которые выглядят как литиевые батарейки для часов или небольшие конденсаторы, в таких упаковках они называются iButton.

iButton (также известна под названиями Dallas Key, Touch Memory) — стандарт механической упаковки, в котором компонент 1-Wire размещается внутри небольшой «таблетки» из нержавеющей стали и подключается к системам шины 1-Wire посредством розеток с контактами, которые касаются «крышки» и «дна» таблетки. Соединение может быть лёгким, по сравнению со сканированием отпечатка пальца. Кроме того, связь может быть полупостоянной с другим типом разъёма; iButton легко вставляется в него и может быть легко удалён.

Применение

Идентификация личности

Замок и ключ, использующие технологию 1-Wire

Каждая микросхема 1-Wire имеет уникальный номер. Это позволяет использовать устройства iButton в качестве простых идентификаторов личности, например в системах контроля и управления доступом (СКУД). В этом качестве они успешно конкурируют с бесконтактными карточками, использующими технологию RFID.

Имеются устройства iButton с поддержкой криптографии, что позволяет создавать на их основе защищённые хранилища небольших объёмов данных или средства сильной аутентификации. Такие устройства могут конкурировать со смарт-картами в некоторых применениях.

Удалённые датчики физических величин

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

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

Маркировка оборудования

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

Другие применения

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

Ссылки

Примечания

  1. Статья — интерфейс 1-wire

1-Wire. Работа с DS18B20. Часть 1

     Все (и в том числе я) называют DS18B20 цифровым датчиком температуры. Однако это не просто датчик, это программируемый цифровой термометр. Он измеряет температуру в диапазоне от –55 до +125 градусов Цельсия, имеет программируемое температурное разрешение от 9 до 12 бит и позволяет задавать верхний и нижний температурные пороги, в случае превышения которых,  устанавливается флаг аварии. 

   Каждый термометр DS18B20 имеет уникальный 64 битный серийный номер, который используется для его адресации на 1-Wire шине. Это позволяет объединять на одной шине несколько независимо работающих термометров и осуществлять между ними и микроконтроллером обмен данными по 1-Wire протоколу. 

   Также особенностью данного термометра является то, что его можно запитывать не только от источника питания, но и от сигнального провода. Это так называемый режим паразитного питания. В этом режиме для подключения DS18B20 требуется всего два провода — сигнальный и возвратный (земляной, GND).

   Подключение датчика DS18B20 к микроконтроллеру    Схема подключения нескольких датчиков DS18B20 с внешним питанием.     1-Wire шина  должна быть обязательно подтянута к плюсу питания через резистор номиналом 4,7 Ком. Напряжение источника питания от 3 до 5 Вольт.  Подключение DS18B20 к микроконтроллеру. Режим паразитного питания

   Схема подключения датчика DS18B20 в режиме паразитного питания. 

   Вывод Vdd соединяется с GND, а 1-Wire шина дополнительно подключается к источнику питания через полевой транзистор. 

   Когда датчик DS18B20 выполняет преобразование температуры или копирует данные из ОЗУ в EEPROM память, он потребляет ток до 1,5 мА. Этот ток может вызывать недопустимое снижение напряжения на 1-Wire шине. Чтобы этого не происходило, 1-Wire шину на время выполнения этих операций подключают к источнику питания. Для этого и нужен полевой транзистор.   

     Для обмена данными термометр DS18B20 использует 1-Wire протокол (однопроводный протокол). Это низкоскоростной двунаправленный полудуплексный последовательный протокол обмена данными использующий всего один сигнальный провод. Естественно требуется еще и возвратный (земляной) провод, но об этом маркетологи обычно умалчивают. 1-Wire протокол был разработан фирмой Dallas Semiconductor в конце 90-х годов.    

     

   Имеется несколько типов сигналов, определенных 1-Wire протоколом — импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0 и чтение 1. Все эти сигналы, за исключением импульса присутствия, формируются на шине главным устройством — MASTERом . В нашем случае это  микроконтроллер AVR. 

  Принцип формирования сигналов во всех случаях одинаковый. В начальном состоянии 1-Wire шина с помощью резистора подтянута к плюсу питания. Главное устройство «проваливает» на определенное время 1-Wire шину в ноль, затем «отпускает» ее и, если нужно, «слушает» ответ подчиненного (SLAVE) устройства. В нашем случае подчиненное устройство — термометр DS18B20. 

 

  Физически это реализуется так. 

  Операция записи бита: Вывод микроконтроллера устанавливается в режим выхода и на нем устанавливается логический ноль. Выдерживается пауза, длительность которой зависит от значения передаваемого бита (0 или 1), затем вывод переводится в режим входа в состоянии Hi-z и снова выдерживается пауза. 

  Операция чтения бита: Вывод микроконтроллера устанавливается в режим выхода и на нем устанавливается логический ноль. Выдерживается определенная пауза, вывод переводится в режим входа в состоянии Hi-z, выдерживается пауза, а затем микроконтроллер считывает потенциал вывода. 

 

   Все сеансы связи микроконтроллера с датчиком DS18B20 начинаются с сигнала сброса.  Микроконтроллер на 480 мкс «проваливает» 1-Wire шину в ноль, а затем «отпускает» ее. Если к шине подключен термометр DS18B20, то он  обнаруживает положительный перепад и после паузы в 15-60 мкс отвечает микроконтроллеру импульсом присутствия — «проваливает» шину в ноль на время от 60 до 240 мкс. 

  1-Wire. Импульс сброса и присутствия

   Обмен данными по 1-Wire шине происходит последовательно, младшим битом вперед. Передача или прием одного бита данных выполняются в течении фиксированного промежутка времени, так называемого тайм слота (time slot). Различают тайм слоты записи и тайм слоты чтения. Длительность всех тайм слотов должна быть > 60 мкс, а пауза между тайм слотами  > 1 мкс.   

 

   Для передачи нуля микроконтроллер «проваливает» 1-Wire шину на время от 60 до 120 мкс. Затем «отпускает» ее и перед записью следующего бита выдерживает паузу >1  мкс.

   Для передачи единицы микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс,  «отпускает» ее и выдерживает паузу. Пауза должна быть такой, чтобы длительность тайм слота была > 60+1 мкс. 

   1-Wire. Тайм слот записи

   DS18B20 является подчиненным устройством и может передавать данные, только когда микроконтроллер формирует на 1-Wire шине тайм слоты чтения. Для формирования тайм слота чтения микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс, а затем «отпускает» ее, передавая  управление состоянием 1-Wire шины датчику DS18B20. Если DS18B20 передает ноль, он удерживает шину в «проваленном» состоянии (в состоянии логического нуля) до конца тайм слота. Если он передает 1, он оставляет шину в «подтянутом» состоянии. 

   Микроконтроллер может считывать данные датчика DS18B20 через 15 мкс после начала тайм слота чтения. 1-Wire. Тайм слот чтения

% PDF-1.4 % 61 0 объектов > endobj Xref 61 82 0000000016 00000 n 0000002484 00000 н. 0000002601 00000 п. 0000003216 00000 н. 0000003351 00000 п. 0000003486 00000 н. 0000003623 00000 н. 0000004280 00000 н. 0000004306 00000 н. 0000004332 00000 н. 0000004358 00000 n 0000005153 00000 п. 0000005756 00000 н. 0000005869 00000 н. 0000005980 00000 н. 0000008424 00000 н. 0000008566 00000 н. 0000008696 00000 п. 0000008831 00000 н. 0000008944 00000 н. 0000008970 00000 н. 0000009390 00000 н. 0000009416 00000 н. 0000009800 00000 н. 0000009826 00000 н. 0000010402 00000 п. 0000013131 00000 п. 0000016149 00000 п. 0000018772 00000 п. 0000021075 00000 п. 0000023449 00000 п. 0000025932 00000 п. 0000026911 00000 п. 0000029741 00000 п. 0000029769 00000 п. 0000029881 00000 п. 0000035544 00000 п. 0000035613 00000 п. 0000035874 00000 п. 0000037244 00000 п. 0000037498 00000 п. 0000037568 00000 п. 0000037788 00000 п. 0000042431 00000 п. 0000042917 00000 п. 0000042987 00000 п. 0000062271 00000 п. 0000062543 00000 п. 0000066173 00000 п. 0000069793 00000 п. 0000070050 00000 n 0000070120 00000 п. 0000070602 00000 п. 0000071301 00000 п. 0000071886 00000 п. 0000073351 00000 п. 0000073601 00000 п. 0000073671 00000 п. 0000073971 00000 п. 0000074041 00000 п. 0000074305 00000 п. 0000076384 00000 n 0000175801 00000 н. 0000175875 00000 н. 0000176147 00000 н. 0000176221 00000 н. 0000182358 00000 п. 0000182432 00000 н. 0000182620 00000 н. 0000196361 00000 н. 0000196435 00000 н. 0000196768 00000 н. 0000196803 00000 н. 0000196869 00000 н. 0000196985 00000 н. 0000197059 00000 н. 0000208143 00000 н. 0000208473 00000 н. 0000208508 00000 н. 0000208574 00000 н. 0000208690 00000 н. 0000001936 00000 н. прицеп ] >> startxref 0 %% EOF 142 0 объектов > поток xb«e«e`g`y Ā

.

1-Wire · Темы GitHub · GitHub

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграция
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • Мобильный
    • Отзывы клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Исследуйте GitHub →
    учиться и внести свой вклад
    • Темы
    • Коллекции
    • Тенденции
    • Learning Lab
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Форум сообщества
.

orgua / OneWireHub: эмулятор ведомого устройства OneWire

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграция
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • Мобильный
    • Отзывы клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Исследуйте GitHub →
    учиться и внести свой вклад
    • Темы
    • Коллекции
    • Тенденции
    • Learning Lab
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Форум сообщества
    • GitHub Education
.

1-Wire — Википедия

1-Wire bzw. One-Wire или Eindraht-Bus beschreibt eine serielle Schnittstelle der Firma Dallas Semiconductor Corp., die mit einer Datenader (DQ) auskommt, die sowohl as Stromvers Emporgung als und genzt als Sende- Der Begriff 1-Wire ist irführend, weil zudem noch eine Masse-Verbindung (GND) erforderlich ist. Diese Masseverbindung wird bei Knopf-förmigen Anordnungen über eine gegenseitige Isolation der Gehäusehälften erreicht.Tatsächlich werden immer zwei physische Leiterverbindungen benutzt (GND, DQ).

Verfügbar sind integrierte Bausteine ​​zur Temperaturmessung, Akkuüberwachung, Echtzeituhr, kleine Speicher и т. Д. Die Technik wurde zur Kommunikation zwischen den Komponenten eines Gerätes entwickelt, z. B. zur Erfassung des Akkuzustandes in einem mobilen Datenerfassungsgerät (КПК).

Die Knopf-förmigen Anordnungen sind verbreitet als mechanisch besonders einfache auf die Trägerperson bezogen Authentisierungsfaktoren vor all an Kassenterminals.

One-Wire-Schnittstelle in der Anwendung eines elektronischen Schlosses an einer Tür
  • Die Verbindung arbeitet seriell und twoirektional, d. час mit einer gemeinsamen Datenleitung für Senden und Empfangen.
  • Die Datenübertragung erfolgt asynchron, d. час es wird kein Taktsignal übertragen.
  • Übertragen wird im Halbduplexverfahren, d. час entweder wird ein Block gesendet, oder es wird ein Block empfangen, jedoch nicht beides zugleich.
  • Die Übertragung erfolgt nach dem One-Master / Multi-Slave Prinzip, d.час es können pro Bus nur ein Master (Steuereinheit), aber bis zu 100 Slaves (Sensoren, Speicher etc.) eingesetzt werden.
  • Jeder Slave wird durch eine 64-Bit-ROM-ID adressiert. Лучше всего использовать 8-Bit-Family-Code, einer 48-Bit-Seriennummer (Unique-Device-ID) sowie einer 8-Bit-CRC-Prüfsumme.
  • Die Slaves versorgen sich über einen internen Kondensator, der über die Datenleitung aufgeladen wird. Eine externe Spannungsversorgung ist nicht notwendig.
  • 1-Wire ist eine Spannungsschnittstelle.Die Spannung ist geräteabhängig zwischen 2,8 und 6 Volt.

Viele 1-Wire-Geräte lassen Betriebsspannungen zwischen 2,8 В и 5,5 В zu. Einige Geräte erlauben hingegen nur 3,0 V bis 3,7 V. Daher sollte unbedingt das Datenblatt beachtet werden. Je nach Baustein liegt die Stromaufnahme der 1-Wire-Geräte zwischen 2 Mikroampere und wenigen Milliampere.

Eine Besonderheit von 1-Wire-Geräten ist die verbundene Spannungsversorgung aus der Gegenstation. Hierbei geschieht die Versorgung der Slaves über die Datenleitung: Bei inaktiver Kommunikation (Idle-State) liegt die Datenleitung auf +5 V High -Pegel und lädt einen Speicherkondensator, welcher in jedem 1-Wire-Integration is.Während der Kommunikation wird der Bus durch die Geräte (Devices) на Low gepulst. Während der Low -Pulse wird der Slave aus seinem Kondensator gespeist. Je nach Ladezustand kann der Kondensator Low -Zeiten bis ca. 960 мкс überbrücken.

Der 1-Wire-Bus wird über einen Pull-up-Widerstand, der in der Regel zwischen 1 и 2,2 kΩ liegt, auf High -Pegel gezogen. Die Größe sollte je nach Anzahl der Geräte und Leitungslänge entsprechend angepasst werden.Um Störungen und Probleme zu vermeiden, sind die Werte der Pull-up-Widerstände unbedingt в den Datenblättern nachzulesen.

Da der 1-Wire-Bus im Gegensatz zu vielen anderen Bussystemen keine отдельной Leitung für das Taktsignal besitzt, muss ein vorgegebenes Timing eingehalten werden. Die Synchronization erfolgt bei jedem Bit mit der vom Master erzeugten fallenden Flanke. Um eine logische 1 zu schreiben, wird der Bus vom Master für 1 до 15 мкс auf Low -Pegel gezogen, bei einer logischen 0 für 60 до 120 мкс.Zum Lesen zieht der Master wie beim «Write 1» Signal den Bus für 1 bis 15 μs auf Low -Pegel und der Slave hält für die Übertragung einer logischen 0 den Bus darüber hinaus auf Low . Für einen Reset sendet der Master ein Low -Pegel mit einer Dauer von 480 мкс. Ein Slave zeigt seine Anwesenheit an, indem er innerhalb von 60 μs danach den Bus für mindestens 60 μs auf Low zieht.

Die 1-Wire-Geräte besitzen zusätzlich noch einen Overdrive -Modus, der es ermöglicht, weitaus höhere Übertragungsraten zu erzielen.Um im Overdrive-Modus eine logische 1 zu erzeugen, muss nur noch lediglich für 1–2 μs ein Low -Pegel anliegen, für eine logische 0 sind im Overdrive-Modus schon 6 μs ausreichend. Um einen Reset zu erzeugen, reichen schon 48 μs aus. Ist das Reset-Signal länger as 80 μs, so gehen die 1-Wire-Geräte in den Regular Betriebsmodus, Ansonsten bleiben sie im Overdrive-Modus.

Im Regären Betriebsmodus sind durch die oben aufgeführten Timingbedingungen Datenraten von bis zu 16,3 KBit / s möglich.Умеренность Der Overdrive-Modus beschleunigt выше 142 Кбит / с.

Die Verkabelung kann über ein einfaches Kabel bzw. eine einzelne Leitung auf einer Platine erfolgen. Mit einem passiven Pull-up-Widerstand sind so Leitungslängen von bis zu 100 m mit 150 1-Wire-Geräten möglich. Durch die Kontrolle der Slew Rate und durch einen aktiven Pull-up-Widerstand ist es sogar möglich, Leitungslängen von bis zu 300 m mit 500 1-Wire-Geräten zu realisieren. Die Qualität der Masseverbindung als Rückleitung über das allgemeine Erdpotential muss unter Betriebsbedingungen geprüft werden.

Die Signale im folgenden Diagramm wurden von einem FPGA as Master und Einem DS2432 (EEPROM) as Slave erzeugt und mit einem Logikanalysator gemessen. Das Signal 1-wire output stellt das изолировать Ausgangssignal des Masters dar; 1-проводный вход ist das gemessene 1-Wire-Bussignal; bei einem High des Signals время выборки входа найти сообщение 1-Wire-Bussignals для Master statt.

1 Wire Reset-, Schreib- und Lese-Beispiel mit DS2432-EPROM

iButton ® : Der registrierte Standard basiert auf der gleichen Technik.Er beschreibt die Kommunikation zu Geräten в Knopfzellengröße.

  • DS18B20 Датчик температуры hoher Genauigkeit
  • DS2408: 8-битный ввод-вывод-Baustein mit 12 Anschlüssen im 16-Pin-Gehäuse
  • DS2417: RTC ( R eal T ime C lock = Echtzeituhr) mit 6 Anschlüssen
  • DS2438: Smart Battery Monitor mit Temperatur- / Spannung- / Strom- / Ladungsmessung, Zeitmesseinheit und 40 Byte EEPROM mit 6 Anschlüssen im 8-Pin-Gehäuse
  • DS2756: Smart Battery Monitor mit Temperatur- / Spannung- / Strom- / Ladungsmessung, Zeitmesseinheit, IO-Port / Interruptausgang и 96 байтов EEPROM + 8 байтов RAM с 8 Anschlüssen
  • DS28EC20: 20480-битная EEPROM Speicher mit 3 Anschlüssen
,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *