1 wire. Интерфейс 1-Wire: полное руководство по протоколу и реализации на микроконтроллерах AVR

Что такое интерфейс 1-Wire. Как работает протокол 1-Wire. Какие команды используются в 1-Wire. Как реализовать драйвер 1-Wire на микроконтроллере AVR. Какие существуют варианты реализации 1-Wire на AVR.

Содержание

Что такое интерфейс 1-Wire и в чем его особенности

1-Wire — это однопроводной интерфейс передачи данных, разработанный компанией Dallas Semiconductor. Его ключевые особенности:

  • Для обмена данными используется всего один сигнальный провод и общий провод
  • По одному проводу осуществляется и питание устройств, и двунаправленная передача данных
  • К одной шине можно подключить множество устройств
  • Каждое устройство имеет уникальный 64-битный идентификатор
  • Низкая скорость передачи данных (до 16.3 кбит/с)
  • Расстояние передачи до 300 метров

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

Принцип работы протокола 1-Wire

Обмен данными по шине 1-Wire осуществляется по следующему принципу:


  1. В исходном состоянии на шине высокий уровень, обеспечиваемый подтягивающим резистором
  2. Передача начинается с импульса сброса (Reset) от мастера — шина переводится в низкий уровень на 480 мкс
  3. Slave-устройства отвечают импульсом присутствия (Presence) длительностью 60-240 мкс
  4. Передача битов данных осуществляется в слотах по 60 мкс
  5. Логический 0 передается удержанием низкого уровня в течение всего слота
  6. Логическая 1 передается коротким импульсом низкого уровня в начале слота

Таким образом, мастер всегда инициирует обмен и задает тайминги, а подчиненные устройства синхронизируются с ним.

Основные команды протокола 1-Wire

В протоколе 1-Wire определены следующие базовые команды для работы с ROM-памятью устройств:

  • READ ROM (0x33) — чтение 64-битного идентификатора устройства
  • MATCH ROM (0x55) — выбор конкретного устройства по идентификатору
  • SKIP ROM (0xCC) — обращение ко всем устройствам на шине
  • SEARCH ROM (0xF0) — поиск идентификаторов всех устройств на шине

Эти команды позволяют адресоваться к отдельным устройствам на шине и получать их уникальные идентификаторы. После ROM-команд следуют специфичные для каждого типа устройств функциональные команды.


Варианты реализации драйвера 1-Wire на микроконтроллерах AVR

Существует несколько способов реализации драйвера 1-Wire на микроконтроллерах AVR:

  1. Программная реализация с использованием одного вывода GPIO
  2. Реализация на основе UART с программным опросом
  3. Реализация на основе UART с использованием прерываний

Каждый вариант имеет свои преимущества и недостатки, которые нужно учитывать при выборе.

Программная реализация драйвера 1-Wire на AVR

Программная реализация драйвера 1-Wire на AVR имеет следующие особенности:

  • Использует только один вывод GPIO микроконтроллера
  • Не требует дополнительного оборудования, кроме подтягивающего резистора
  • Позволяет реализовать несколько шин 1-Wire на одном микроконтроллере
  • Требует точного программного формирования временных интервалов
  • Во время обмена данными прерывания должны быть запрещены

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

Реализация драйвера 1-Wire на основе UART

Реализация драйвера 1-Wire с использованием UART имеет ряд преимуществ:


  • Аппаратное формирование временных интервалов модулем UART
  • Меньший размер кода драйвера
  • Возможность работы с разрешенными прерываниями
  • Автоматизация приема и передачи до 255 бит данных

Недостатками являются необходимость использования двух выводов микроконтроллера (TX и RX) и потребность во внешней схеме согласования уровней. Реализация на UART может быть с программным опросом или на прерываниях.

Выбор оптимального варианта реализации 1-Wire

При выборе способа реализации драйвера 1-Wire следует учитывать следующие факторы:

  • Количество доступных выводов микроконтроллера
  • Требуемая скорость обмена данными
  • Возможность использования прерываний
  • Объем доступной памяти программ
  • Наличие свободных аппаратных модулей UART

Для простых применений подойдет программная реализация. Для более требовательных задач лучше использовать вариант на основе UART с прерываниями.

Заключение

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



AVR318: мастер шины 1-Wire | avr

• Поддерживается протокол Dallas 1-Wire® на стандартной скорости.
• Реализация совместима со всеми микроконтроллерами AVR.
• Может быть выбрана работа по опросу или по прерываниям.
• Вариант с опросом не требует никакой аппаратуры микроконтроллера.

Здесь приведен перевод даташита Atmel AVR318: Dallas 1-Wire® master [1].

[Введение]

Устройства Dallas 1-Wire® уникальны тем, что для обмена данными им требуется только один сигнальный провод и общий провод. И подача питания, и передача данных в обоих направлениях осуществляется только по 1 проводу (отсюда и пошло название шины 1-Wire). Устройства 1-Wire завоевали заслуженную популярность в качестве электронных ключей (ключи-таблетки iButton серий DS1990) и датчиков температуры (DS18B20).

Для того, чтобы микроконтроллер смог обмениваться данными по протоколу 1-Wire, нужен только 1 вывод порта ввода/вывода GPIO. Этот апноут показывает, как можно реализовать мастера шины 1-Wire на микроконтроллере AVR в двух вариантах: либо чисто программно (вариант с опросом), либо с задействованием модуля USART (UART).

[Немного теории: как работает протокол Dallas 1-Wire]

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

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

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

Обмен сигналами по шине 1-Wire разделен на слоты по 60 мкс. В течение одного слота передается один бит данных. На длительность слота существуют большие допуски от номинала, что позволяет упростить и удешевить изготовление slave-устройств. Однако все равно от master требуется высокая точность в формировании интервалов времени шины, чтобы обеспечить возможность обмена данными со slave-устройствами с разной базой времени. Так что очень важно укладываться в лимиты времени, описанные в следующих секциях. Более подробно про протокол 1-Wire на русском языке можно почитать в статье [2].

Базовые сигналы шины 1-Wire

Устройство master (микроконтроллер) начитает любую процедуру обмена на шине путем притягивания сигнала шины к лог. 0. Это означает, что при передаче каждого бита, независимо от направления передачи, мастер всегда инициирует передачу бита. Это всегда осуществляется переводом шины master-ом в лог. 0, что синхронизирует логику времени участников обмена шины. Имеется 5 базовых команд для обмена по шине 1-Wire: «Write 1», «Write 0», «Read», «Reset» и «Presence».

Write 1. Этот сигнал показан на рис. 1. Master переводит шину в состояние лог. 0 на время от 1 до 15 мкс. Затем master отпускает шину на оставшееся время слота.

Рис. 1. Команда-сигнал «Write 1».

Write 0. Этот сигнал показан на рис. 2. Master переводит шину в состояние лог. 0 на время как минимум 60 мкс, но не дольше 120 мкс.

Рис. 2. Команда-сигнал «Write 0».

Read. Команда чтения показана на рис. 3. Master переводит шину в лог. 0 на время от 1 до 15 мкс. После этого устройство slave удерживает шину в состоянии лог. 0, если оно хочет передать 0. Если slave хочет передать 1, то оно не будет захватывать шину, шина останется непритянутой к земле за время слота, и на ней будет прочитана лог. 1. Таким образом, master должен прочитать состояние шины через 15 мкс после того, как шина была притянута к лог. 0 в момент начала слота. С точки зрения master формирование команды Write 1 точно такое же, как и сигнала Read. Реальный вид сигнала будет зависеть от внутреннего состояния slave-устройства, а не от сигнала master, который управляет шиной одинаково для сигналов Write 1 и Read.

Рис. 3. Команда-сигнал «Read».

Reset/Presence. Сигналы Reset (сброс) и Presence (присутствие на шине) взаимосвязаны, поэтому здесь они показаны совместно (см. рис. 4). Имейте в виду, что на картинке длительность сигналов показана условно, на самом деле масштаб может отличаться. Сначала master переводит шину в лог. 0 на время как минимум 8 тайм-слотов (т. е. 480 мкс), и затем освобождает её. Этот интервал называется сигналом Reset. Если на шине присутствует подключенное устройство slave, то оно должно после сигнала Reset выдать на шину импульс лог. 0 через 60 мкс после отпускания master-ом шины, и удерживать лог. 0 в течение как минимум 60 мкс. Этот ответ называется сигналом Presence. Если на шине не появился сигнал Presence, то мастер должен предположить, что к шине не подключено никакое подчиненное устройство, так что дальнейший обмен данными невозможен.

Рис. 4. Сигналы «Reset» и «Presence».

Программное генерирование сигналов. Генерация сигналов 1-Wire с помощью AVR делается непосредственно с помощью управления режимом порта GPIO. Т. е. меняется направление работы порта, и его выходное состояние путем записи соответствующих значений в регистры DDRx и PORTx, и это делается с участием программно задаваемых задержек. Подробное описание процесса приведено в секции реализации.

Генерирование сигналов с помощью UART. Базовый набор сигналов 1-Wire также может быть сгенерирован с помощью аппаратного UART, встроенного в ядро микроконтроллера AVR. Этот способ требует, чтобы к шине были подключены оба сигнала TXD и RXD аппаратного UART. Также требуется наличие внешнего буфера с открытым коллектором или открытым стоком, чтобы обеспечить возможность освобождения шины, когда на выходе UART присутствует лог. 1. На рис. 5 показана реализация такого буфера на транзисторах NPN. Номиналы резисторов и типы транзисторов ориентировочные, указаны только в качестве рекомендации. Для точного значения pull-up резистора см. рекомендации в даташите на slave-устройство, которое подключаете к шине 1-Wire.

Рис. 5. Буфер на биполярных транзисторах (открытый коллектор).

Для генерации сигнала 1-Wire используется формат фрейма данных UART 8 бит, без четности (no parity), 1 стоп-бит. Один фрейм данных UART используется для одного бита или для последовательности RESET/PRESENCE. В таблице 1 показано, как нужно настроить модуль UART, чтобы генерировать нужные формы сигнала, и как они интерпретируются на приеме. Соответствующие шаблоны битов UART показаны на рис. 6..10.

Таблица 1. Сигналы UART для эмуляции протокола 1-Wire.

Сигнал Скорость Передаваемое значение Принимаемое значение
Write 1 115200 FFh FFh
Write 0 115200 00h 00h
Read 115200 FFh FFh эквивалентен прочитанному биту 1. Все другие значения эквивалентны биту 0.
Reset/Presence 9600 F0h F0h соответствует отсутствию сигнала presence. Любое другое значение соответствует наличию сигнала presence.

Прим. переводчика: скорее всего, длительности протокола 1-Wire специально проектировались под стандатные скорости работы RS-232, потому что даже в момент первого появления на рынке устройств 1-Wire уже были доступны простые считыватели slave-устройств, подключаемые к COM-порту компьютера. Был также опубликован апноут Dallas, описывающий такое подключение. Открытость протокола и простота подключения к компьютеру положительно сказывались на популяризации протокола 1-Wire.

Рис. 6. Сигнал Write 1 и соответствующий набор бит UART.

Рис. 7. Сигнал Write 0 и соответствующий набор бит UART.

Рис. 8. Сигнал Read 0 и соответствующий набор бит UART.

Рис. 9. Сигнал Read 1 и соответствующий набор бит UART.

Рис. 10. Сигнал Reset/Presence и соответствующий набор бит UART.

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

64-битный идентификатор состоит из 3 частей: 8-битный код семейства, 48-битный серийный номер и 8-битная CRC, которая вычисляется от первых 56 бит идентификатора. Для работы с этим 64-битным идентификатором имеется небольшой набор команд, они называются команды ROM. В таблице 2 показаны эти 6 команд ROM.

Таблица 2. Команды ROM.

Команда Код Назначение
READ ROM 33h Идентификация
SKIP ROM CCh Пропуск адресации
MATCH ROM 55h Адресация определенного устройства.
SEARCH ROM F0h Получить 64-битные идентификаторы всех устройств на шине
OVERDRIVE SKIP ROM 3Ch Версия команды SKIP ROM на повышенной скорости
OVERDRIVE MATCH ROM 69h Версия команды MATCH ROM на повышенной скорости

READ ROM. Эта команда может использоваться на шине, к которой подключено одно slave-устройство, чтобы прочитать уникальный 64-битный идентификатор. Если к шине подключено несколько slave-устройств, то результатом этой команды будет результат AND от всех идентификаторов (т. е. распознать данные каждого идентификатора по отдельности нельзя). И конечно же, если предположить, что передача данных произошла без ошибок, при наличии нескольких устройств на шине контрольная сумма CRC не совпадет.

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

MATCH ROM. Команда MATCH ROM используется для адресации отдельных slave-устройств на шине. После команды MATCH ROM по шине передается полный 64-битный идентификатор. Когда это завершилось, разрешено отвечать только тому устройству на шине, которое имеет точно этот идентификатор — пока не будет принят следующий импульс reset.

SEARCH ROM. Команда SEARCH ROM может использоваться, когда идентификаторы всех slave-устройств не известны заранее. Она дает возможность определить все идентификаторы устройств, которые подключены сейчас к шине. Сначала команда SEARCH ROM передается по шине мастером. Затем мастер читает один бит из шины. Каждое slave-устройство помещает свой первый бит идентификатора на шину. Таким образом, мастер прочитает логическое AND от всех первых бит идентификаторов устройств, подключенных на шине. Затем мастер читает следующий бит на шине. Тогда каждое slave-устройство помещает на шину дополнение к своему первому биту. Мастер прочитает этот бит как логическое AND от всех логических дополнений первого бита от всех подчиненных устройств. Если все устройства имели в первом бите лог. 1, то мастер прочитает 10b. Если же все устройства имели в первом бите 0, то мастер прочитает 01b. В этих двух случаях бит может быть сохранен как первый бит у всех адресов. Тогда мастер запишет этот бит обратно, это даст эффект, что все подчиненные устройства продолжат посылать свои идентификаторы. Если на шине присутствуют устройства, у которых первый бит идентификатора отличается (т. е. у одного устройства первый бит 0, у другого первый бит 1), то мастер прочитает на шине 00. В этом случае мастер должен сделать выбор — хочет ли он обращаться по адресу, где в первом бите будет 0, или по адресу, где в первом бите будет 1. Выбор будет передан на шину, в результате чего все устройства, у которых в первом бите окажется не соответствующий выбранному значению бит, останутся в состоянии ожидания.

Затем мастер переходит к следующему биту, и процесс повторяется до тех пор, пока не будут прочитаны все 64 бита. В результате будет прочитан один 64-битный идентификатор устройства, которое подключено к шине. Чтобы распознать другие идентификаторы, команда SEARCH ROM должна быть запущена заново, но на этот раз на спорном бите выбор должен быть сделан на противоположный. Повторение этой процедуры для каждого починенного устройства приведет к тому, что все их идентификаторы будут распознаны. Обратите внимание на то, что когда закончен поиск одного идентификатора, то все подчиненные устройства, кроме одного, должны находиться в состоянии ожидания (idle). Так что теперь можно осуществлять обмен данными с этим устройством без специальной адресации его командой MATCH ROM.

Overdrive ROM. Команды overdrive ROM здесь не рассматриваются, поскольку данный документ относится только к командам, работающим на стандартной скорости.

Memory/function. Команды доступа к памяти/функциям относятся к специфическим командам, зависящим от конкретного slave-устройства. Эти команды обычно работают с чтением и записью внутренней памяти и регистров slave-устройств. Определено некоторое количество этих команд, но не все команды используются всеми устройствами. Порядок чтения и записи специфичен для конкретного устройства, и основной стандарт это не определяет. Подробно команды памяти здесь не рассматриваются.

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

1. Мастер посылает на шину сигнал Reset.
2. Slave-устройство (или устройства, если их несколько на шине) отвечают импульсом Presence.
3. Мастер посылает команду ROM, которая эффективно адресует одно или несколько slave-устройств.
4. Мастер посылает команду Memory.

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

CRC. Контрольная сумма, Cyclic Redundancy Check (CRC) используется устройствами 1-Wire для того, чтобы гарантировать целостность данных. Теория CRC здесь не рассматривается. Для получения дополнительной информации про CRC см. [2].

В устройствах 1-Wire можно найти главным образом две разных CRC. Одна 8-битная (называется Dallas
One Wire CRC, DOW-CRC, или просто CRC8), вторая 16-битная (CRC16). CRC8 используется в секции ROM всех устройств. Также CRC8 используется в некоторых устройствах для проверки других данных, наподобие команд, выданных на шине. CRC16 используется в некоторых устройствах для проверки на ошибки в достаточно больших наборах данных.

Аппаратный эквивалент 8-битной CRC, используемой на 64-битном идентификаторе, показан на рис. 11. Блоками представлены отдельные биты регистра сдвига. Эквивалентный полином для этой CRC будет X8 + X5 + X4 + 1.

Рис. 11. Аппаратный эквивалент CRC8, используемой в 1-Wire устройствах.

Аппаратный эквивалент 16-битной CRC, используемой в некоторых устройствах 1-Wire, показан на рис. 12. Блоками представлены отдельные биты регистра сдвига. Эквивалентный полином для этой CRC будет X16 + X15 + X2 + 1.

Рис. 12. Аппаратный эквивалент CRC16, используемой в 1-Wire устройствах.

[Реализация]

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

Можно реализовать протокол 1-Wire только программно, без применения какой-либо дополнительной аппаратуры. Достоинство такого решения в простоте — задействован только 1 вывод GPIO, и подключен 1 pull-up резистор. Поскольку все выводы GPIO микроконтроллеров AVR двунаправленные, и у них есть подключаемый внутренние pull-up резисторы, то AVR могут управлять шиной 1-Wire без поддержки внешних схем. В тех случаях, когда номинал встроенного резистора не подходит под текущую конфигурацию подключенных slave-устройтв, из внешней аппаратуры требуется только один внешний резистор. Недостаток этой реализации в том, что микроконтроллер загружен непроизводительными задержками на ожидание для отработки интервалов времени Reset/Presence и битовых сигналов. Чтобы обеспечить корректные интервалы времени шины 1-Wire, во время передачи битов прерывания должны быть запрещены. Допустимая задержка между передачей двух соседних бит (recovery time, время восстановления) не ограничена сверху, так что можно безопасно обрабатывать прерывания после передачи каждого бита. Когда шина 1-Wire активна, из-за длительности сигнала Reset/Presence получается латентность в обработке прерывания для самого худшего случая меньше 1 мс.

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

Драйвер на основе UART с задействованием прерываний генерирует сигналы шины точно так же, как это делает драйвер UART с программным опросом. Дополнительное достоинство в том, что прерывания позволяют автоматизировать прием и передачу до 255 бит данных с минимальной загрузкой вычислительного ядра AVR.

Драйверы с опросом разделены на две части: генерация сигналов на уровне бита, и более высокоуровневые команды наподобие передачи байт и реализации команд ROM. Между двумя программными версиями драйвера различаются только процедуры уровня бит (поскольку сигналы шины формируются в одном случае чтением/записью регистров GPIO, в другом случае чтением/записью регистров UART), но далее реализован общий интерфейс, что позволяет выполнять высокоуровневые команды с любым драйвером.

[Программная реализация на основе управления GPIO]

С чисто программной реализацией, которая описана в этом апноуте, можно реализовать сразу несколько шин 1-Wire, подключенных к одному AVR. Все шины должны быть подключены к одному и тому же порту ввода/вывода (например только к PORTB, или только к PORTD), но какой порт будет использоваться — можно выбрать опциями перед компиляцией. Это ограничивает количество шин до 8, однако распределение шин по разрядам порта полностью конфигурируемо. Все выводы, которые не задействованы под шины 1-Wire, остаются нетронутыми. Поскольку все шины 1-Wire подключены к одному и тому же порту, то можно одновременно выполнять несколько операций в одно и то же время на нескольких шинах. Это возможно путем задействования аргумента для выбора нужного вывода или выводов, который передается каждой функции. Этот аргумент должен содержать в себе битовую маску для выводов, которые должны использоваться для этой операции. К примеру, это дает возможность послать сигнал Reset одновременно на 8 шин, если передать 0xff в аргументе маски выводов. Значение, которое будет возвращено, является битовой маской от всех шин, где одно или большее количество slave-устройств ответило сигналом presence. Эта битовая маска может быть затем передана в качестве аргумента выводов в функцию, которая выдает команду SKIP ROM, и так далее. Все функции в этой реализации поддерживают выбор выводов. Как основное правило все команды, которые записывают данные на шины, могут адресовать одновременно несколько шин. Команды, которые читают более одного бита с шины, могут адресовать только одну шину.

Инициализация. Процедура инициализации для программной реализации драйвера интерфейса 1-Wire очень проста. Она заключается в настройке выводов шин 1-Wire в режим ввода, и разрешение на этих выводах внутренних резисторов pull-up, и если это необходимо, перевод шины в состояние ожидания (idle mode). Некоторые устройства среагируют на фронт нарастания уровня на шине как на окончание сигнала Reset, и ответят выдачей сигнала Presence. Чтобы гарантировать, что этот сигнал не повлияет на любой обмен данными, после инициализации порта добавлена задержка, равная времени восстановления из сигнала Reset.

Битовые функции нижнего уровня. Эти функции реализованы в соответствии с апноутом AN126 компании Dallas Semiconductors. Все параметры времени удовлетворяют рекомендуемым значениям в этом апноуте. Требуется 10 различных задержек, которые перечислены в таблице 3.

Таблица 3. Задержки, которые применяются на уровне формирования передачи битов.

Параметр Рекомендуемая задержка (мкс)
A 6
B 64
C 60
D 10
E 9
F 55
G 0
H 480
I 70
J 410

Обратите внимание, что задержка G в стандартном режиме равна 0.

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

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

Рис. 13. Функции слоя передача бит.

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

[Реализация на основе опроса UART]

В этой реализации все задержки времени для формирования сигналов шины обслуживаются модулем UART. Чтобы отправить бит, устанавливается скорость UART (Baud Rate) на подходящее значение, и регистр данных UART загружается значение, которое генерирует нужную форму сигнала, как это было описано в секции «Генерирование сигналов с помощью UART» (см. также рис. 6..10).

Инициализация. Чтобы инициализировать драйвер UART с программным опросом, аппаратура UART должна быть настроена с правильными параметрами. Разрешение передачи и приема, установка формата данных 8 бит, без четности (no parity), 1 стоп-бит и скорость обмена 115.2 килобод.

Это приведет к тому, что вывод TXD модуля UART перейдет в состояние ожидания (idle) с уровнем лог. 1. Подчиненные устройства воспримут фронт нарастания сигнала TXD как окончания сигнала RESET, и ответят сигналом presence.

Битовые функции нижнего уровня. Все эти функции реализованы в драйвере с опросом UART через одну общую функцию OWI_TouchBit. Эта функция выводит первый входной аргумент в модуль UART, ждет завершения приема UART, и затем возвращает принятое значение. Каждая из битовых функций вызывает OWI_TouchBit со значением, которое генерирует корректное значение сигнала на шине.

Интерфейс к этим функциям тот же самый, что и в реализации драйвера с программным опросом порта (без UART). Аргумент pins однако не требуется в драйвере UART с опросом. Набор макросом делает возможным вызов этих функций с аргументом pins или без него. Если аргумент pins присутствует, то он будет удален макросом.

Функции высокого уровня. Обратите внимание, что многие функции на этом уровне принимают в качестве аргумента тип указатель на беззнаковое целое (unsigned char pointer). Этот указатель должен указывать на массив памяти из 8 байт, который может использоваться функцией. Выделение этих массивов в памяти, а иногда и их инициализация должна выполняться вызывающей функцией. Этот документ четко показывает, когда память должна быть инициализирована специальным образом перед вызовом функции.

Функции передачи байта

Рис. 14. Функции передачи байта.

Команды ROM. Реализованы все основные команды ROM для стандартной скорости обмена. Самая простая из них команда SKIP ROM. Она просто вызывает функцию SendByte, которая получает байт команды SKIP ROM в качестве аргумента. Алгоритмы для команд READ ROM и MATCH ROM показаны на рис. 15.

Рис. 15. Алгоритм работы Read ROM (чтение ROM).

Алгоритм для команды SEARCH ROM показан на рис. 16. Эта функция ищет одно slave-устройство при каждом своем запуске, пока не останется ни одного нераспознанного устройства на шине. Во время последнего запуска она вернет OWI_ROM_SEARCH_FINISHED. В дополнение к параметру pin, который используется для выбора шины, в эту функцию должны быть переданы 2 параметра: lastDeviation и bitPattern. Эти параметры управляют поиском slave-устройства. Обратитесь к таблице 4, чтобы понять, как использовать эти параметры для завершения полного поиска всех подчиненных устройств.

Таблица 4. Использование bitPattern и lastDeviation.

BitPattern lastDeviation
Первый раз 8-байтный массив заполняется нулями. 0
Последующие запуски Копия 8-байтного массива, возвращенного через указатель bitPattern на последнем запуске. Значение, возвращенное из SearchRom на последнем запуске.

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

Рис. 16. Команда Search ROM (поиск ROM).

Тактирование. Важно генерировать сигналы шины максимально точно, насколько это возможно. Чтобы добиться этого, нужно точно формировать задержки. Количество необходимых циклов тактов для задержки в определенное количество микросекунд вычисляется во время компиляции. Когда генерируются сигналы, некоторые такты теряются, когда шина притягивается к лог. 0, и когда шина освобождается. Эти циклы тактов вычитаются их количества тактовых циклов, нужных для генерирования задержки. Если тактовая частота слишком мала, то может получиться отрицательная задержка. Нужна тактовая частота не ниже 2.17 МГц, чтобы получить самые короткие задержки.

[Реализация на основе UART с задействованием прерываний]

Для драйвера UART с прерываниями требования к аппаратуре те же самые, что и для драйвера UART с опросом. Базовая функциональность реализации с прерываниями, показанной в этом апноуте, состоит в том, чтобы обеспечить автоматическую передачу и прием больших порций данных на шине. Это реализовано в двух обработчиках прерывания (Interrupt Service Routines, ISR). Для настройки всех необходимых параметров должны вызываться несколько вспомогательных функций, и эти ISR завершают транзакцию автоматически. Это возможно для последовательности Reset/Presence или для передачи любого количества бит данных от 1 до 255 в одном направлении, без какого-то дополнительного вмешательства в запущенный процесс.

Чтобы сделать ISR-ы максимально простыми, не делается различие для процессов передачи и приема. UDRE ISR просто отправляет один бит из буфера данных каждый раз при своем запуске. RXC ISR принимает тот же б бит, и помещает его обратно в буфер данных независимо от направления, в котором передаются данные. Во время передачи отправленные данные будут идентичны принятым, и буфер данных не поменяется. Во время приема должны передаваться только единички, поскольку форма сигнала «write 1» совпадает с формой сигнала чтения. Сигнал на шине опрашивается, чтобы считать значение, которое послало slave-устройство. Затем это значение будет помещено в буфер данных.

Три глобальных флага сигнализируют о состоянии драйвера 1-Wire: busy, presence и error. Флаг busy установлен, пока еще есть данные для передачи. Флаг presence установлен, если детектирован сигнал Presence, когда отправляется сигнал Reset. Этот флаг остается установленным, пока сигнал Reset по шине не получил в ответ сигнал Presence. Флаг error устанавливается, когда приемник UART детектировал ошибку фрейма. В этой ситуации по шине должен быть передан новый сигнал Reset. Это приведет к сбросу всех slave-устройств на шине, а также внутреннего состояния обработчиков UDRE ISR и RXC ISR.

Поскольку ISR-ы должны завершить свою работу как можно быстрее, более сложные функции, наподобие команд ROM, не реализованы в обработчиках ISR. Прилагаемый код примера показывает, как такое поведение должно быть реализовано в машине конечных состояний (Finite State Machine, FSM).

Обработчики прерываний (Interrupt Service Routine, ISR). Алгоритмы для ISR показаны на рис. 17 и 18. Обработчик ISR события опустошения данных UART Data Register Empty (UDRE) запускается всякий раз, когда появляется свободное место в буфере передачи UART. Обработчик ISR для события завершения приема UART Receive Complete (RXC) запускается каждый раз, когда данные приняты, и находятся в готовности в буфере приема UART.

Рис. 17. Алгоритм ISR для UDRE.

Рис. 18. Алгоритм RXC для UDRE.

Вспомогательные функции. Они нужны для установки некоторых параметров, которые нужны для автоматической передачи под управлением прерываний. После установки всех нужных параметров передача инициируется разрешением прерывания UDRE. Алгоритмы вспомогательных функций показаны на рис. 19.

Обратите внимание, что функция ReceiveData (функция для приема данных) в действительности заполняет буфер данных единичками, после чего вызывает функцию TransmitData (функция для передачи данных). RXC ISR будет делать выборки сигнала и поместит в буфер данных прочитанное значение, которое передало slave-устройство.

Рис. 19. Вспомогательные функции.

[Вычисление CRC]

Далее описан алгоритм для вычисления двух разных типов CRC. Переменная crc либо установлена в 0, либо в начальное значение CRC, так называемое «seed». Это объясняется ниже. Сокращение LSB означает Least Significant Bit, т. е. самый младший бит. Сокращение MSB означает Most Significant Bit, т. е. самый старший бит.

1. Найти логическое исключающее или (XOR) между LSB у CRC и LSB у данных.
2. Если это значение равно 0, то:
    a. Сдвинуть вправо CRC.
3. Если это значение равно 1, то:
    a. Найти новое значение CRC путем выполнения операции XOR между CRC и полиномом CRC.
    b. Сдвинуть вправо CRC.
    c. Установить MSB у CRC в 1.
4. Сдвинуть вправо данные.
5. Повторить всю последовательность 8 (или 16) раз.

Этот алгоритм может использоваться одинаково как для вычисления CRC8, таки и для CRC16. Разница только в разрядности CRC и регистре сдвига для него (8 бит для CRC8, 16 бит для CRC16) и в значении числа полинома. Это число симулирует соединение элементов XOR в аппаратном вычислителе CRC. Значение полинома составляет 18h для CRC8 и 4002h для CRC16.

Алгоритмы реализованы для того, чтобы найти значение CRC по одному байту за раз, но CRC «seed» может быть передано как аргумент подпрограммам CRC. Таким способом результат от одной операции вычисления CRC может быть передан следующей операции вместе со следующим байтом, так что получается эффект вычисления CRC от произвольного количества байт.

Проверка CRC для 64-битных идентификаторов реализована в OWI_CheckRomCRC. Она просто вычисляет значение CRC8 от первых 56 бит, и сравнивает их с последними 8 битами идентификатора.

[Примеры кода]

Приведены 2 примера кода, которые иллюстрируют, как использовать разные реализации драйвера 1-Wire.

Пример кода с опросом. Этот пример для драйверов с опросом, которые делают поиск устройств на шинах, заданных как BUSES. Устройства сохраняются в массиве типа OWI_device. OWI_device является структурой, которая содержит информацию об устройстве, подключенном к шине, и его 64-битный идентификатор. Драйвер затем ищет среди доступных устройств сенсор температуры DS1820 и цифровой потенциометр DS2890. Если какое-то из этих устройств (или оба) найдено на шине, они будут постоянно опрашиваться в бесконечном цикле. В каждой итерации считывается температура из DS1820, и положение движка DS2890 увеличивается на единицу, обрезаясь по модулю 256. Температура выводится в PORTB, так что её можно наблюдать свечением светодиодов LED на плате разработчика STK500.

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

Пример кода с задействованием прерываний. В этом примере реализована машина FSM. Если драйвер не занят передачей данных по шине, то эта FSM вызывается в бесконечном цикле. Когда драйвер занят, то FSM пропускается, чтобы позволить работать другому коду. Сама по себе FSM подразумевает, что на шине присутствует единственный датчик температуры DS1820. Она читает текущую температуру, и вычисляет CRC, чтобы убедиться, что чтение было корректным. Затем температура помещается в глобальную переменную. Независимо от занятости драйвера, бесконечный цикл выводит температуру в PORTB, так что её изменение можно отслеживать по светодиодам платы разработчика STK500.

[Быстрый старт]

Исходный код. Его можно загрузить в виде zip-файла с сайта atmel. com (или см. [3]). Распакуйте исходный код в любую выбранную Вами папку. Убедитесь, что сохранена структура директорий в том виде, в каком она была в архиве. Здесь есть 3 подпапки: polled, interrupt_driven и common_files. Папка common_files содержит функции CRC, общие определения и определения, специфичные для применяемого микроконтроллера, которые используются для драйверов UART. Папки polled и interrupt_driven содержат драйвера и примеры кода.

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

Драйвер с опросом. Короткое описание каждого файла для драйвера с опросом дано в таблице 5.

Таблица 5. Файлы для драйвера с работой по опросу (без прерываний).

Файл Описание
main.c Пример кода для работы драйвера с опросом.
OWISWBitFunctions.c Битовые функции низкого уровня, реализованные с помощью программного опроса GPIO, без задействования прерываний.
OWIUARTBitFunctions.c Битовые функции низкого уровня, реализованные с помощью опроса UART.
OWIBitFunctions.h Общий заголовочный файл для функций модулей OWISWBitFunctions.c и OWIUARTBitfunctions.c.
OWIHighLevelFunctions.c Функции драйвера верхнего уровня.
OWIHighLevelFunctions.h Заголовочный файл для модуля OWIHighLevelFunctions.c.
OWIPolled.h Конфигурационный заголовочный файл для драйвера с опросом.
source.doc Документация по исходному коду в этой папке.

Чтобы начать работу с драйверами, работающими по опросу, выполните следующие шаги:

• Создайте новый проект в среде разработки IAR embedded workbench. В зависимости от версии IAR, это может потребовать также создания рабочего пространства (workspace).
• Добавьте в проект все файлы *.c из директорий polled и common_files.
• Выберите корневую папку проекта в браузере проектов IAR. Сделайте на неё правый клик и выберите Options…, при этом отобразится диалог настройки опций проекта.
• Под General/Target убедитесь, что выбраны правильный микроконтроллер и правильная модель памяти.
• Под General/Library configuration поставьте галочку на опции «Enable bit definitions in I/O include files».
• Под General/System установите стек данных Data stack (CSTACK) в значение 0x40 и стек возврата Return stack (RSTACK) в значение 0x10. Это требуется для примера, интенсивно использующего память. Размер под стеки меньше могут удовлетворять другим приложениям, которые используют этот драйвер.
• Если для отладки используется AVRStudio, то нужно поменять формат выходного файла. Под XLINK/Output выберите Format/Other, и затем выберите «ubrof 8 (forced)» из выпадающего списка Output format.
• Откройте файл OWIPolled.h для редактирования, и найдите там секцию с именем «User defines» (определения пользователя).
• Выберите либо только программный драйвер (software only) или драйвер UART путем раскомментирования одной из строк, как это описано в файле.
• Переместитесь вниз к секции, относящейся к выбранному драйверу.
• Подстройте определения в секции в соответствии с аппаратными установками, как это описано в файле.
• Теперь проект готов к компиляции.

Драйвер с прерываниями. Короткое описание каждого файла для драйвера с использованием прерываний показано в таблице 6.

Таблица 6. Файлы для драйвера с работой по прерываниям.

Файл Описание
main.c Пример кода для работы драйвера с прерываниями.
OWIInterruptDriven. h Конфигурационный заголовочный файл для драйвера с опросом.
OWIIntFunctions.c Реализация обработчиков прерывания и вспомогательных функций.
OWIIntFunctions.h Заголовочный файл для модуля OWIIntFunctions.c.
source.doc Документация по исходному коду в этой папке.

Чтобы начать работу с драйверами, работающими по прерываниям, выполните следующие шаги:

• Создайте новый проект в среде разработки IAR embedded workbench. В зависимости от версии IAR, это может потребовать также создания рабочего пространства (workspace).
• Добавьте в проект все файлы *.c из директорий interrupt_driven и common_files.
• Выберите корневую папку проекта в браузере проектов IAR. Сделайте на неё правый клик и выберите Options…, при этом отобразится диалог настройки опций проекта.
• Под General/Target убедитесь, что выбраны правильный микроконтроллер и правильная модель памяти.
• Под General/Library configuration поставьте галочку на опции «Enable bit definitions in I/O include files».
• Если для отладки используется AVRStudio, то нужно поменять формат выходного файла. Под XLINK/Output выберите Format/Other, и затем выберите «ubrof 8 (forced)» из выпадающего списка Output format.
• Откройте файл “OWIInterruptDriven.h” для редактирования, и найдите там секцию с именем «User defines» (определения пользователя).
• Поменяйте определения в секции «User defines», чтобы они отражали реальную конфигурацию аппаратуры.
• Теперь проект готов к компиляции.

[Ссылки]

1. AVR318: Dallas 1-Wire master site:atmel.com.
2. iButton: описание протокола, электронный замок на ключах-таблетках.
3. 141130AVR318.zip — исходный код примеров, документация.

СпецПромДизайн

Интерфейс 1-Wire

Интерфейс 1-Wire разработан фирмой Dallas Semiconductor®, все права на этот интерфейс принадлежат исключительно этой фирме (которая, впрочем уже давно прекратила свое самостоятельное сущестование и перешла под крыло корпорации MAXIM Inc. ). Фирменная документация по указанному интерфейсу и устройствах, его поддерживающих, находится здесь.

Чем привлекателен этот интерфейс? Разумеется, малым количеством выводов МК, требующихся для подключения практически неограниченного количества микросхем. В самом деле, двусторонний обмен требует всего 1 линию! Кроме того, ассортимент устройств с этим интерфейсом весьма широк. Наконец, протокол обмена по этому интерфейсу очень прост и легко реализуется программно практически на любых микроконтроллерах (МК).

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

Шина 1-Wire должна быть подтянута отдельным резистором к напряжению питания устройств (которое, кстати, может быть от 3 до 5В – уточняется по характеристикам конкретного устройства). Сопротивление этого резистора 4.7 К, однако, это значение рекомендовано только для достаточно коротких линий. Если шина 1-Wire используется для подключения удалённых на большое расстояние устройств, то сопротивление этого резистора следует уменьшить. Ниже будут описаны причины необходимости такого уменьшения сопротивления. Минимально допустимое сопротивление этого резистора – около 300 Ом, а максимальное – около 30 кОм. Данные величины – ориентировочные, точные значения следует уточнить по характеристикам конкретного устройства 1-Wire (по его максимальному втекающему току линии DQ, который, собственно, и определяет минимум внешнего сопротивления).

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

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

Рассмотрим обмен информацией по шине 1-Wire:

  1. Обмен всегда ведется по инициативе одного ведущего устройства, которое в большинстве случаев является микроконтроллером (МК)
  2. Любой обмен информацией начинается с подачи импульса сброса («Reset Pulse» или просто RESET) в линию 1-Wire ведущим устройством
  3. Для интерфейса 1-Wire в общем случае предусматривается «горячее» подключение и отключение устройств
  4. Любое устройство, подключенное к 1-Wire после получения питания выдает в линию DQ импульс присутствия («Presence pulse» или просто PRESENCE). Этот же импульс устройство всегда выдает в линию, если обнаружит сигнал RESET
  5. Появление в шине 1-Wire импульса PRESENCE после выдачи RESET однозначно свидетельствует о наличии хотя бы одного подключенного устройства
  6. Обмен информацией ведётся так называемыми тайм-слотами: один тайм-слот служит для обмена одним битом информации
  7. Данные передаются побайтно, бит за битом, начиная с младшего бита. Достоверность переданных/принятых данных проверяется контрольной суммой CRC

На нижеприведённом рисунке показана диаграмма сигналов RESET и PRESENCE, с которых всегда начинается любой обмен данными.

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

Длительность большинства временных интервалов очень приблизительная и имеет ограничение только по минимуму.

Импульс RESET формирует ведущий МК, переводя в низкий логический уровень шину 1-Wire и удерживая её в этом состоянии минимум 480 микросекунд. Затем МК должен «отпустить» шину. Через некоторое время, зависящее от ёмкости линии и сопротивления подтягивающего резистора, в линии установится высокий логический уровень. Протокол 1-Wire ограничивает это время «релаксации» диапазоном от 15 до 60 мкс, что и является определяющим для выбора подтягивающего резистора (как правило, ёмкость линии существенно изменить сложно, а именно она оказывает наибольшее влияние на время возврата линии к высокому логическому уровню).

Обнаружив импульс RESET, ведомое устройство приводит свои внутренние узлы в исходное состояние и формирует ответный импульс PRESENCE, как следует из рисунка – не позже 60 микросекунд после завершения импульса RESET. Для этого устройство переводит в низкий уровень линию DQ и удерживает её в этом состоянии от 60 до 240 мкс. Конкретное время удержания зависит от многих параметров, но всегда находится в указанном диапазоне. После этого устройство так же «отпускает» шину.

После завершения импульса PRESENCE устройству даётся ещё некоторое время для завершения внутренних процедур инициализации, таким образом, МК должен приступить к любому обмену с устройством не ранее, чем через 480 микросекунд после завершения импульса RESET.

Таким образом процедура инициализации интерфейса 1-Wire, с которой начинается любой обмен данными между устройствами, длится минимум 960 микросекунд и состоит из передачи от МК сигнала RESET и приёма от устройства сигнала PRESENCE. Если сигнал PRESENCE не обнаружен – значит на шине 1-Wire нет готовых к обмену устройств.

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

  • Передача «1» от МК
  • Передача «0» от МК
  • Приём «1» от устройства
  • Приём «0» от устройства

Любой тайм-слот всегда начинает МК путём перевода шины 1-Wire в низкий логический уровень. Длительность любого тайм-слота должна находиться в пределах от 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 мкс. Если МК принимает данные, то опрос уровня в шине он должен сделать на промежутке от 13-jй до 15-jй микросекунде тайм-слота. МК должен обеспечить интервал между отдельными тайм-слотами не менее 1 мкc.

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

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

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

Но если несколько устройств подключается через длинный соединительный шлейф – придётся бороться с погонной ёмкостью линии. При это следует учитывать, что соединение по свитым вручную обычным монтажным проводам при типовом подтягивающем резисторе возможно на расстоянии до 10 м, а для соединения по очень длинной телефонной «лапше» может потребовать уменьшения подтягивающего резистора до 510 ом и даже менее.

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

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

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

Решение первой проблемы осуществляется двумя путями:

  • Автоматическое определение адресов всех подключенных устройств
  • Ручное заданите адреса

Первый способ требует довольно сложного программно-реализуемого алгоритма поиска адресов. Здесь он рассматриваться не будет, так как это потребовало бы отдельной статьи. Более подробно можно почитать о нем в документе Application Note 162.

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

iButton — зарегистрированная торговая марка, права на которую принадлежат Dallas Semiconductor®, дополнительная информация об этом семействе изделий находится здесь.

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

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

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

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

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

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

Уникальный номер любого устройства 1-Wire состоит из восьми байт – одного байта идентификатора семейства (8 бит), шести байт (48 бит) собственно уникального адреса и одного байта (8 бит) контрольной суммы CRC всех предыдущих байтов.

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

Алгоритм расчёта CRC стандартизирован и описан в документе Application Note 27

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

Список некоторых кодов семейств 1-Wire-устройств приведён ниже:

Код семейства (HEX) Устройство iButton Описание
01 DS1990A, DS2401 Уникальный серийный номер-ключ
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***
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 + счётчик циклов записи
1D DS2423 4 КБ NV RAM + внешний счётчик
20 DS2450 Четырёхканальный АЦП
24 DS1904, DS2415 Часы реального времени
26 DS2438 Датчик температуры, АЦП
2C DS2890 Цифровой потенциометр
30 DS2760 Датчик температуры, тока, АЦП

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

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

Спецификация этих устройств допускает их питание от самой линии данных, то есть микросхема может получать питание по собственной (и единственной) линии данных. Не все устройства поддерживают такой режим питания, но очень многие, например, термометр-термостат DS18B20 или ключ-таблетка DS1990A.

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

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

Подытожим основные шаги по его успешной реализации:

  • Любой обмен информацией начинается с передачи импульса RESET и приёма имульса PRESENCE
  • Если импульса PRESENCE не обнаружено – на шине нет устройств
  • МК всегда инициирует обмен, начиная каждый тайм-слот обмена битом информации
  • Временные параметры каждого тайм-слота следует соблюдать с максимально возможной точностью
  • Для выбора одного из нескольких устройств на шине 1-Wire МК должен передать в шину команду MATCH ROM, а затем 8 байт адреса устройства, последний байт – контрольная сумма предыдущих семи
  • Если устройство на шине одно – МК может узнать его адрес путём посылки команды READ ROM, после чего принять от устройства 8 байтов адреса, последний из которых также будет контрольной суммой
  • Для работы с единственным устройством на шине можно отказаться от указания его адреса, для этого МК должен передать устройству команду SKIP ROM, после чего можно начинать обычный обмен данными
  • Любая начатая процедура обмена может длиться сколь угодно долго за счёт пауз между отдельными тайм-слотами, но всегда должна быть завершена полностью
  • Прервать начатый обмен можно в любой момент путём выдачи импульса RESET в шину 1-Wire

Линия датчиков (1-wire)

Цифровые датчики температуры и относительной влажности и автономные регистраторы температуры и относительной влажности, а так же все модули расширения, подключаются к линии датчиков 1-wire прибора ГИГРОТЕРМОН параллельно, используя 3 провода: «DQ» (шина данных 1-wire), «GND» (общий) и «+5В» (питание). Однако для надежности необходимо использовать все контакты разъема 6P6C (RJ12). Внимание: важно, чтобы контакты «DQ» (1-wire) и «GND 1-wire» (контакты 3 и 4 на рис. ниже) были одной витой парой, например, зеленый и бело-зеленый.  Внешний вид разъема 6Р6С, а также назначение контактов и рекомендуемая расцветка проводов  см. рис. ниже.

Для надежности связи прибора с датчиками и достижения максимальной протяженности линии датчиков 1-wire цифровые датчики и модули расширения рекомендуется подключать по схеме «гирлянда»: кабель от прибора ГИГРОТЕРМОН должен подходить к первому датчику (или модулю расширения), от первого ко второму и т.п., чтобы все датчики и модули были на одной линии, без ответвлений. См. рис. ниже.

Рекомендуемая максимальная протяженность линии 1-wire при использовании кабеля «витая пара» категории 5Е – не более 100 метров. Если фактическая длина кабеля более 100 метров, рекомендуется разбить линию на две малые с использованием дополнительного прибора ГИГРОТЕРМОН. Для удобства подключения и монтажа, все модули расширения и цифровые датчики и адаптеры для цифровых автономных регистраторов имеют не менее 2-х разъемов 6P6C (RJ12) – вход/выход 1-wire.

Внешний вид платы цифрового датчика 1w-2/3

Ссылка на страницу “Подключение цифровых датчиков и автономных регистраторов температуры и влажности» 

Внешний вид модуля расширения дискретных датчиков «1wio2»

Ссылка на страницу “Подключение дискретных датчиков»;

Внешний вид платы модуля расширения унифицированных (аналоговых) сигналов «HIHx2»

Ссылка на страницу “Подключение датчиков с унифицированными выходными сигналами»

Таблица 1. Результаты испытаний линии связи регистраторов температуры (и относительной влажности) на максимальную протяженность,
при которой наблюдается устойчивая связь регистраторов с прибором Гигротермон
Длина кабеля, м.Тип регистраторов температуры и влажности / наличие связи (да / нет)
Регистраторы температуры
DS1921G-F5, DS1921Z-F5
Регистраторы температуры и относительной влажности DS1923-F5, DS1922L-F5
350да (с подтяжкой 5В) 
нет (без подтяжки 5В) 
300да (с подтяжкой 5В) 
нет (без подтяжки 5В) 
250да (с подтяжкой 5В)нет (с подтяжкой 5В)
нет (без подтяжки 5В)нет (без подтяжки 5В)
200да (с подтяжкой 5В)да (с подтяжкой 5В)
нет (без подтяжки 5В)нет (без подтяжки 5В)
150да (с подтяжкой 5В)да (с подтяжкой 5В)
дада (без подтяжки 5В)
100да (с подтяжкой 5В)да (с подтяжкой 5В)
дада (без подтяжки 5В)
  •  «да» — наличие устойчивой связи датчика с прибором Гигротермон
  • «нет» — отсутствие устойчивой связи датчика с прибором Гигротермон
  • «с подтяжкой» — использование схемы пассивной подтяжки сигнала +5В на конце линии. http://gigrotermon.ru/imag/shop.product_details/8/flypage.tpl/198.html

Таблица 2. Результаты испытаний линии связи комбинированных датчиков** 2RJ11-HIH5031E-DS18S20 
на максимальную протяженность, при которой наблюдается устойчивая связь с прибором Гигротермон
Длина кабеля, м.Измеряемый параметр / наличие связи (да / нет)
ТемператураОтносительная влажность
100да (без подтяжки)да (без подтяжки)
125да (с подтяжкой)да (с подтяжкой)
150да (с подтяжкой)да (с подтяжкой)
175да (с подтяжкой)да (с подтяжкой)
200да (с подтяжкой)нет (с подтяжкой)
300да (с подтяжкой)нет (с подтяжкой)

**) В испытаниях использовано 10 комплектов комбинированных (температура + влажность) датчиков 2RJ11-HIH5031E-DS18S20, подключенных одновременно в конце линии.

Данные получены в «идеальных» лабораторных условиях с использованием кабеля  NIKOLAN   NKL 4200A-GY F/UTP 4 пары кат.5e, 24 AWG. Поэтому, в реальных производственных условиях значения длин могут отличаться в меньшую сторону из-за присутствия электромагнитных помех или использования другого типа используемого кабеля.

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

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

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

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

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

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

 

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

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

   

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

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

Maxim Integrated использует протокол 1-Wire для снижения сложности и предоставления самого недорогого в отрасли решения для построения сетей с удаленно подключенными датчиками I2C и SPI

17.08.2020

DS28E18 расширяет каналы до 100 метров и минимизирует количество проводов для подключения периферийных устройств к главному микроконтроллеру

Разработчики, расширяющие подключения к сетям удаленных датчиков, теперь могут снизить сложность и стоимость до самых низких в отрасли уровней с помощью моста DS28E18 1-Wire®-to-I2C / SPI от Maxim Integrated Products, Inc.
Благодаря использованию протокола 1-Wire компании Maxim Integrated для взаимодействия с датчиками, совместимыми с I2C и SPI, DS28E18 снижает сложность за счет подключения устройств с использованием только двух проводов по сравнению с решениями конкурентов, которые требуют четырех проводов для I2C или шести для SPI.

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

DS28E18 обеспечивает питание и обмен данными по одному проводу, используя протокол 1-Wire от Maxim Integrated для связи с периферийными устройствами I2C или SPI на расстоянии более 100 метров с помощью всего двух проводов. Решение устраняет необходимость использования до пяти расширителей и коммутаторов, что значительно снижает затраты на подключение и сложность программного обеспечения. Кроме того, только один программируемый порт ввода-вывода от микроконтроллера хоста необходим для работы в сети с 10–20 узлами.

Ключевые преимущества
  • Высокая степень интеграции: расширяет соединения до 100 метров и исключает необходимость использования до пяти расширителей и коммутаторов; исключает необходимость внешнего источника питания;
  • Низкая стоимость: обеспечивает автономную работу всего с двумя соединительными проводами, исключая до четырех проводов для автономной работы;
  • Снижение сложности: преобразование протокола 1-Wire в главные интерфейсы I2C и SPI для уменьшения как физической конструкции, так и сложности программного обеспечения микроконтроллера хоста по сравнению с сопоставимыми конфигурациями.

«Датчики меняют потребительские, промышленные и медицинские продукты, поскольку они улучшают сбор данных и делают работу более интеллектуальной», — сказал Мануэль Тальявини, главный аналитик подразделения MEMS и датчиков Omdia. «Однако последовательные интерфейсы для этих датчиков доминируют на рынке, и любой подход, который может помочь уменьшить сложность, будет благом для разработчиков».

«По мере того, как датчики становятся все более распространенными в ряде приложений, возрастает и потребность в расширении возможностей подключения на большие расстояния, — сказал Скотт Джонс, управляющий директор по встроенной безопасности компании Maxim Integrated. «Рентабельное увеличение рабочего расстояния для устройств с последовательным интерфейсом требует большой сложности, но использование протокола 1-Wire значительно упрощает эти сети за счет более простого программного обеспечения и меньшего количества кабелей и микросхем».

1-wire

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

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

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

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

Спешу поделиться результатами:

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

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

 

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

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

 

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

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

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

Если датчик не смог прочитаться 20 раз — нагревательный элемент отключается. 

На практике, я рекомендовал бы, все же, не превышать длину шлейфа в 100м для более устойчивой работы.

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

DS2413

DS2408

DS2890

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

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

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

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

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

 

 

 

 

1-Wire

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

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

Режим передачи данных по шине 1-Wire – полудуплексный: мастер и ведомые устройства передают данные по очереди.

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

Далее мастер отпускает шину, подтягивающий резистор возвращает напряжение к высокому логическому уровню. Ведомые устройства, обнаружив сигнал Reset по его окончании передают сигнал – Presence. Это сигнал низкого уровня длительностью 100–200 мс. Так же устройство может передавать сигнал Presence и без импульса Reset в слечае его подключения к шине. Интерфейс 1-Wire предусматривает «горячее» подключение — отключение устройства.

Информационный обмен по шине происходит под управлением мастера. После передачи импульса Presence устройство 1-Wire готово к приему команд.

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

Устройства в сети знают длину каждой команды. Формат команд такой – идентификатор команды (1байт), за которым следуют данные. Каждое устройство 1-Wire имеет уникальный 64-разрядный идентификатор (ID). ID состоит из 8-разрядного кода семейства, который идентифицирует тип устройства и поддерживаемые им функции, 48-разрядного серийного номера и 8-битного поля кода CRC-8.

Передачу команд инициирует мастер. Он отмечает командой Reset начало нового цикла транзакций и получив подтверждение, выбирает устройство специальной командой MATCH ROM, передавая ее идентификатор и 64 бита ID адресуемого устройства.

Ведомое устройство с данным ID получив такую команд ожидает новых команд от мастера, а все остальные остаются в пассивном состоянии до следующей команды Reset. Если в системе одно устройство то можно не передавать ID используя команду SKIP ROM. В данном случае ведомое устройство считает себя выбранным без получения адреса.

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

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

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

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

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

1-Wire магистрали.
Протяжённые 1-Wire магистрали имеют структуру, состоящую из трёх проводников:
1. DATA шина данных
2. RET (GND) возвратная шина или провод «земля».
3. EXT_POWER внешнее питание обслуживаемых ведомых абонентов и внешних относительно них цепей датчиков и органов управления.

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

При длине магистрали не более 5 метров и при количестве абонентов не более 10 штук можно использовать любой тип кабеля, мастер в данном случае может быть любой с пассивной подтяжкой по питанию.(резистор на питание) До 100 метров и до 100 абонентов рекомендуется использовать витую пару не ниже 3 категории, топология строгая общая шина и мастером должно выступать устройство с активной подтяжкой или требуется использовать специальные схемные решения. До 300 метров и до 200 абонентов, необходимо использовать витую пару не ниже категории 5, топология общая шина без разрыва ствола, мастер как вариант — программная модификация временных слотов 1‑Wire протокола.

Компаниия Maxim Integrated предоставляет свободно распространяемый тестовый программный пакета разработчика OneWireViewer. Возможности программного пакета OneWireViewer, позволяют идентифицировать любой 1-Wire компонент подключённый к 1-Wire магистрали, ведомой компьютером через адаптер, и проверить в полном правильность его функционирования в составе конфигурируемой 1-Wire сети.

Наибольшее применение устройства 1-wire нашли в виде круглых контактных площадок-«таблеток», называемых iButton, многим они знакомы в виде ключей от домофонов. Другой пример использования – это различные датчики, например, датчики температуры из серии DS18B20, DS18S20, DS18S22 и им подобные. Использование всего двух проводов делает достаточно удобным подключение серии датчиков, вместе с тем, в отличие от аналоговых датчиков, показания не зависят от длины провода.

Руководство по связи 1-Wire | Максим Интегрированный

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

Что такое технология 1-Wire?

В основе технологии 1-Wire ® лежит последовательный протокол, использующий одну линию данных плюс заземление для связи. Мастер 1-Wire инициирует и управляет обменом данными с одним или несколькими подчиненными устройствами 1-Wire на шине 1-Wire (, рис. 1, ). Каждое ведомое устройство 1-Wire имеет уникальный, неизменяемый, запрограммированный на заводе 64-битный идентификационный номер (ID), который служит адресом устройства на шине 1-Wire. 8-битный семейный код, подмножество 64-битного идентификатора, определяет тип и функциональные возможности устройства.Обычно подчиненные устройства 1-Wire работают в следующих четырех диапазонах напряжения:

  • 1,71 В (мин.) До 1,89 В (макс.)
  • 1,71 В (мин.) До 3,63 В (макс.)
  • от 2,97 В (мин.) До 3,63 В (макс.)
  • от 2,8 В (мин.) До 5,25 В (макс.)

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

Рис. 1. Конфигурация 1-Wire «ведущий / ведомый» использует одну линию данных и опорную массу.

Что особенного в 1-Wire?

1-Wire — это цифровая система на основе напряжения, которая работает с двумя контактами, данными и землей, для полудуплексной двунаправленной связи. По сравнению с другими системами последовательной связи, такими как I 2 C или SPI, устройства 1-Wire предназначены для использования в среде с мгновенным контактом. Либо отключение от шины 1-Wire, либо потеря контакта переводит ведомые устройства 1-Wire в определенное состояние сброса. Когда напряжение возвращается, ведомые устройства просыпаются и сигнализируют о своем присутствии.Имея только один защищаемый контакт, встроенная защита устройств 1-Wire от электростатического разряда чрезвычайно высока. С двумя контактами устройства 1-Wire являются наиболее экономичным способом добавления электронных функций к неэлектронным объектам для идентификации, аутентификации и доставки данных калибровки или производственной информации.

Как упаковываются устройства 1-Wire?
Устройства

1-Wire предлагаются в корпусах с обычными транзисторами (TO-92) и IC (TSOC, TDFN, SOT23). 2-контактный корпус SFN 1 , разработанный для контактных приложений и простого подключения, предназначен для устройств 1-Wire с паразитным питанием (, рис. 2, ).Корпус iButton 2 из нержавеющей стали диаметром 16 мм защищает устройства 1-Wire от суровых условий окружающей среды, что делает их пригодными для использования внутри и вне помещений (, рис. 3 ). Многие устройства также доступны в виде штампа с выступом (, рис. 4 ).

Рис. 2. Корпус SFN 6,0 мм x 6,0 мм x 0,9 мм имеет большие контактные поверхности.

Рис. 3. Корпус iButton диаметром 16 мм защищает микросхему 1-Wire внутри от агрессивных сред.

Рисунок 4.Матрица с выступом (WLP) с шагом 0,5 мм.

Какие функции устройства доступны и каковы типичные приложения?

В настоящее время существует множество устройств 1-Wire. Номера деталей, начинающиеся с DS19, всегда находятся в упаковке iButton. Остальные номера деталей в этом разделе, то есть те, которые начинаются с DS24, DS25 и DS28, доступны в обычных пластиковых упаковках. Если продукт также доступен как SFN, то это упоминается в столбце «Примечания» в следующих таблицах деталей.Чтобы найти актуальную информацию о пакете для любого устройства, перейдите на сайт Maxim и введите номер детали в поле Search .

Устройства

1-Wire по функциям можно сгруппировать в несколько категорий:

  • Только идентификация
  • Идентификация плюс контроль
  • Идентификация плюс температура
  • Идентификация плюс время
  • Идентификация плюс NV SRAM
  • Идентификация плюс одноразовое программируемое (OTP) EPROM
  • Идентификация плюс EEPROM
  • Идентификация плюс аутентификация SHA-256 и защищенная EEPROM
  • Идентификация плюс аутентификация SHA-256 / ECDSA и защищенная память
  • Идентификация плюс аутентификация SHA-3, ChipDNA -зашифрованная EEPROM
  • Идентификация и регистрация данных

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

Только идентификация

Устройства данной категории отличаются невысокой стоимостью. Соответственно, уровень защиты, который они могут обеспечить, ограничен. Если DS2401 или DS2411 используется для защиты интеллектуальной собственности (IP), следует рассмотреть возможность использования специальной версии устройства. См. . Доступна ли настройка устройства? раздел для более подробной информации.

Номер детали Банкноты Типичные области применения
DS2401 DS2401 не требует расходных материалов V CC , поэтому эта деталь подходит для идентификации картриджей для принтеров и медицинских расходных материалов.
  • Идентификация и аутентификация печатной платы (PCB)
  • Идентификация аксессуаров / периферийных устройств
  • Защита IP или бытовой электроники
  • Идентификация картриджа принтера
  • Контроль доступа
  • Управление активами
  • DS2411 В CC питание, 1,5 В или выше
    DS1990A
    DS1990R
    DS1990R гарантированно генерирует импульс присутствия при контакте со считывателем.
    Идентификация плюс контроль

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

    Номер детали Банкноты Типичные области применения
    DS2413 Два PIO на 28 В
  • Картридж для принтера и одноразовая медицинская идентификация
  • Управление картами стойки
  • Идентификация и управление аксессуарами / периферийными устройствами
  • Идентификация плюс температура

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

    Номер детали Банкноты Типичные области применения
    DS28EA00 Если не подключен провод для обнаружения последовательности, доступны два PIO для функций управления Мониторинг карт стойки
    DS1920 Это автономное устройство измеряет температуру по команде, например.г., когда читатель дотрагивается до него. Сбор данных о температуре при контакте
    Идентификация плюс время

    Эти устройства измеряют время, считая секунды с помощью 32-битного двоичного счетчика. Зная нулевую точку отсчета времени (т.е. 1 января 1970 г., 00:00:00 часов UTC), можно определить любую секунду в пределах 136 лет. Подсчет секунд особенно удобен для измерения временных интервалов.

    Номер детали Банкноты Типичные области применения
    DS2417 DS2417 также доступен в виде пакета межфланцевого уровня (WLP).Для прерывания периодического таймера требуется кристалл 6 пФ, 32 кГц. Бытовая электроника
    DS1904 Это автономное устройство iButton включает аккумулятор и кристалл. Это устройство также подходит для систем патрулирования и учета рабочего времени.
    Идентификация плюс NV SRAM

    Срок хранения данных для продуктов, перечисленных в этой категории, составляет более 10 лет. Размер энергонезависимой памяти показан в столбце Notes .

    Номер детали Банкноты Типичные области применения
    DS1992 1 КБ памяти
  • Идентификация печатной платы
  • Контроль доступа
  • Управление активами
  • DS1993 4 КБ памяти. Благодаря более низкой стоимости (по сравнению с DS1995 / DS1996) это устройство также подходит для идентификации и аутентификации печатных плат (PCB).
  • Защита IP
  • Контроль доступа
  • Управление активами
  • DS1995 16 КБ памяти
    DS1996 64 КБ памяти
    Идентификация плюс OTP EPROM

    Все устройства этой категории используют технологию 12 В EPROM.Поскольку в пакетах нет отверстий, эти биты являются одноразовыми — если их изменить с 1 на 0, их нельзя поменять местами. Чтобы пометить всю 32-байтовую страницу как недопустимую и указать альтернативное расположение для допустимых данных, эти устройства имеют байты перенаправления, по одному для каждой страницы. Эта уникальная функция позволяет изменять данные, сохраняя историю изменений. Отдельные страницы памяти могут быть необратимо защищены от записи. Защита от записи делает OTP EPROM первыми кандидатами для приложений, которым требуется небольшой объем данных, которые редко меняются, например, сетевые адреса 4 и идентификация печатной платы. 5

    Номер детали Банкноты Типичные области применения
    DS2502 1 КБ памяти, доступные пакеты включают версии WLP и SFN
  • Идентификация и контроль использования картриджей для принтеров и медицинских расходных материалов
  • Идентификация и аутентификация стоечных карт и печатных плат
  • Идентификация аксессуаров / периферийных устройств
  • DS2505 16 КБ памяти
    DS2502-E48 1 КБ памяти, предварительно запрограммированный Ethernet-адресом MAC-48 / EUI-48
  • Сетевой адрес
  • Идентификация печатной платы
  • DS2502-E65 1 КБ памяти, предварительно запрограммированный адресом узла IEEE ® EUI-64
    DS1982 1 КБ памяти
  • Идентификация печатной платы
  • Управление активами
  • DS1985 16 КБ памяти
    Идентификация плюс EEPROM

    По сравнению с OTP EPROM, устройствам этой категории не требуется 12 В для записи.Данные могут быть изменены (перезаписаны) при условии, что область памяти или страница не защищены от записи. Большинство этих устройств имеют режим эмуляции EPROM, который позволяет изменять биты только с 1 на 0, как и в случае с EPROM. Благодаря высокой емкости и безопасности DS1977 используется в игровой индустрии. DS28E80 широко используется в медицинской промышленности благодаря устойчивой к гамма-излучению памяти и схемам.

    Номер детали Банкноты Типичные области применения
    DS28E05 112 байт пользовательской памяти
  • Медицинские расходные материалы и идентификация печатных плат
  • Периферийная идентификация
  • Идентификация картриджа принтера
  • DS28E07 1024-битная память
  • Идентификация аксессуаров / печатной платы
  • Послепродажное управление расходными материалами
  • Идентификация картриджа принтера
  • Хранение данных калибровки медицинских датчиков
  • DS28E80 248 байт пользовательской памяти; устойчивость к гамма-излучению
  • Идентификация медицинских расходных материалов
  • Медицинские инструменты и принадлежности для идентификации и калибровки
  • DS2431 1Kb памяти, эмуляция EPROM, защита от записи страниц.доступные пакеты включают версии WLP и SFN
  • Идентификация и контроль использования картриджей для принтеров и медицинских расходных материалов
  • Идентификация стоечных плат и печатных плат
  • Идентификация аксессуаров / периферийных устройств
  • Защита IP и аутентификация
  • Бытовая электроника
  • DS28EC20 20Kb памяти, эмуляция EPROM, блок (четыре страницы) защита от записи
    DS24B33 Память 4 Кбайт, доступные пакеты включают версии WLP и SFN
  • Идентификация и мониторинг использования картриджей для принтеров и медицинских расходных материалов
  • Идентификация стоечных плат и печатных плат
  • Хранение данных калибровки медицинских датчиков
  • Идентификация аксессуаров / периферийных устройств
  • DS28E04-100 Память 4 КБ, два PIO 5 В, семь адресных входов 1-Wire, эмуляция EPROM, защита от записи страниц
  • Автоконфигурация модульных систем, устанавливаемых в стойку
  • Идентификация аксессуаров / печатной платы
  • DS1971 256b памяти
  • Контроль доступа
  • DS1972 1 КБ памяти, эмуляция EPROM, защита страницы от записи
  • Контроль доступа
  • Управление активами
  • Хранение данных технического обслуживания / осмотра
  • DS1973 4 КБ памяти
    DS1977 32 КБ памяти, защита паролем
  • Управление активами
  • Игры
  • Идентификация плюс аутентификация SHA-256 и безопасная EEPROM

    Все устройства этой категории безопасности используют модель аутентификации с симметричным ключом «запрос-ответ». 6 Таким образом, аутентификация устройства и запись на устройства с активированной надлежащей защитой требует знания секрета устройства и способности вычислять MAC SHA-256. За исключением секрета, данные из памяти читаются без ограничений. Все устройства поддерживают аутентификацию по запросу и ответу, эмуляцию EPROM для страниц памяти пользователя и различные защиты секретных страниц и страниц памяти. См. . Доступна ли настройка устройства ? раздел для службы предпрограммирования.

    Номер детали Банкноты Типичные области применения
    DS28E15
    DS28EL15
    512-битная память, двунаправленная аутентификация; Номер детали EL — это устройство низкого напряжения (от 1,671 В до 1,89 В)
  • Идентификация и аутентификация медицинских расходных материалов
  • Безопасное управление функциями
  • Идентификация и аутентификация картриджа принтера
  • DS28E22
    DS28EL22
    2048-битная память, двунаправленная аутентификация, номер детали EL — низкое напряжение (1.От 671 В до 1,89 В) устройство
  • Аутентификация подключенных к сети устройств
  • Генерация и обмен ключей для криптографических систем
  • Идентификатор картриджа принтера / аутентификация
  • Управление лицензией на эталонный дизайн
  • Безопасная настройка функций для конфигурируемых систем
  • Аутентификация и калибровка датчика / аксессуаров
  • Система защиты интеллектуальной собственности
  • DS28E25
    DS28EL25
    4096-битная память, двунаправленная аутентификация, номер детали EL — низкое напряжение (1.От 671 В до 1,89 В) устройство
  • Идентификация и аутентификация расходных материалов
  • Управление лицензией на эталонный дизайн
  • Аутентификация и калибровка датчика / аксессуаров
  • Система защиты интеллектуальной собственности
  • DS1964S 512-битная память, двунаправленная аутентификация, устройство iButton
  • Контроль доступа
  • Аутентификация расходных материалов
  • Безопасное управление функциями
  • DS2465 I 2 Интерфейс C для связи с хостом и встроенное ведущее устройство 1-Wire
  • Сопроцессор SHA-256
  • Мастер 1-Wire для управления подчиненными устройствами с поддержкой SHA-256 на шине 1-Wire
  • Идентификация плюс аутентификация ECDSA и безопасная память

    Все устройства в этой категории безопасности используют модель безопасной аутентификации с асимметричным ключом с использованием алгоритма ECDSA.Некоторые из устройств могут использоваться для аутентификации на основе SHA-256 или ECDSA. Аутентифицированные или неаутентифицированные контакты GPIO для управления внешними компонентами / датчиками доступны на DS28E36, DS28E83 и DS28E84. Устройства также имеют функцию счетчика только уменьшения, которая позволяет пользователю измерять использование расходных материалов. Два устройства используют технологию физически неклонируемой функции (PUF) ChipDNA от Maxim для защиты данных устройства. DS28E83 / 84 обладают высокой радиационной стойкостью, что делает их уникальными для применения в области медицинской стерилизации.См. . Доступна ли настройка устройства ? раздел для службы предпрограммирования.

    Номер детали Банкноты Типичные области применения
    DS28E36 8 КБ памяти, двунаправленная аутентификация ECDSA или SHA-256, два GPIO, счетчик декремента, встроенный генератор случайных чисел (RNG), ECDH (обмен ключами Диффи-Хеллмана с эллиптической кривой)
  • Вспомогательные принадлежности и периферийная безопасная аутентификация
  • Защита узлов Интернета вещей
  • Безопасная загрузка или загрузка прошивки и / или параметров системы
  • Безопасное хранение криптографических ключей для хост-контроллера
  • DS28E38 2 КБ памяти, однонаправленная аутентификация ECDSA, ChipDNA, счетчик декремента, встроенный RNG
  • Аутентификация медицинских датчиков и инструментов
  • Аутентификация узла IoT
  • Периферийная аутентификация
  • Идентификация и аутентификация картриджа принтера
  • Управление лицензией на эталонный дизайн
  • Безопасное управление расходными материалами ограниченного использования
  • DS28E39 2 КБ памяти, двунаправленная аутентификация ECDSA, ChipDNA, счетчик декремента, встроенный RNG
  • Идентификация и аутентификация расходных материалов
  • Управление лицензией на эталонный дизайн
  • Аутентификация и калибровка датчика / аксессуаров
  • Система защиты интеллектуальной собственности
  • DS28E83 10 КБ OTP-памяти, двунаправленная аутентификация ECDSA или SHA-256, высокая радиационная стойкость, встроенный RNG, ECDH
  • Безопасная аутентификация аксессуаров и периферийных устройств
  • Медицинские расходные материалы Безопасная аутентификация
  • Идентификация и калибровка медицинских инструментов и принадлежностей
  • Безопасная загрузка или загрузка прошивки и / или параметров системы
  • Безопасное хранение криптографических ключей для хост-контроллеров
  • DS28E84 15 КБ FRAM, 10 КБ памяти OTP, двунаправленная аутентификация ECDSA или SHA-256, высокая радиационная стойкость, встроенный RNG, ECDH
    DS2476 I интерфейс для хоста 2 коммуникация; 8 Кбайт памяти для хранения данных, ключей и сертификатов
  • Сопроцессор ECDSA и SHA-256 для обеспечения эффективного взаимодействия хоста с ведомыми устройствами 1-Wire с поддержкой ECDSA / SHA-256
  • Идентификация плюс аутентификация SHA-3 и безопасный EEPROM

    Устройства этой категории безопасности используют модель безопасной аутентификации с симметричным ключом SHA-3.В устройствах используется технология Maxim ChipDNA PUF для защиты данных устройства. Он также имеет надежные контрмеры для защиты от атак на систему безопасности. См. . Доступна ли настройка устройства ? раздел для службы предпрограммирования.

    Номер детали Банкноты Типичные области применения
    DS28E50 2 КБ памяти, двунаправленная аутентификация SHA-3, ChipDNA, счетчик декремента, встроенный RNG
  • Аутентификация медицинских датчиков и инструментов
  • Аутентификация узла IoT
  • Периферийная аутентификация
  • Идентификация и аутентификация картриджа принтера
  • Управление лицензией на эталонный дизайн
  • Безопасное управление расходными материалами ограниченного использования
  • DS2477 I 2 Интерфейс C для связи с хостом и встроенный мастер 1-Wire
  • Сопроцессор SHA-3 и мастер 1-Wire
  • Оптимизирован для управления ведомыми устройствами с поддержкой SHA-3 на шине 1-Wire
  • Может быть настроен для использования с другими ведомыми устройствами 1-Wire
  • DS28E16 256-битная память, однонаправленная аутентификация SHA-3, счетчик декремента, встроенный RNG, очень низкая стоимость
  • Периферийная аутентификация
  • Идентификация и аутентификация картриджа принтера
  • Безопасное управление расходными материалами ограниченного использования
  • Идентификация и регистрация данных

    Эти устройства представляют собой автономные регистраторы данных о температуре (Thermochron ® ).DS1923 также может регистрировать влажность (Hygrochron ). Принципиальные различия между устройствами — это размер памяти данных и уровень защиты данных (пароль). Доступны устройства для различных температурных диапазонов, отвечающие требованиям различных приложений. 7

    Номер детали Банкноты Типичные области применения
    DS1921G Регистратор температуры 2 КБ, от -40 ° C до + 85 ° C
  • Мониторинг температуры для наук об окружающей среде
  • Контроль температуры для обеспечения безопасности пищевых продуктов
  • Обеспечение качества отгрузок пищевых продуктов и фармацевтических товаров
  • DS1921H Регистратор температуры 2 КБ, высокое разрешение, от + 15 ° C до + 46 ° C
    DS1921Z Регистратор температуры 2 КБ, высокое разрешение, от -5 ° C до + 26 ° C
    DS1922E 8KB регистратор температуры, от + 15 ° C до + 140 ° C
    DS1922L 8KB регистратор температуры, от -40 ° C до + 85 ° C
    DS1922T 8KB регистратор температуры C до + 125 ° C
    DS1923 8KB Регистратор температуры и влажности, от -20 ° C до + 85 ° C
    DS1925 122KB Регистратор температуры, от -40 ° C до + 85 ° C
    Как получить практический опыт работы с продуктами 1-Wire?

    Если доступен ПК со свободным портом USB и доступом в Интернет, единственные необходимые элементы: адаптер 1-Wire, оценочное (EV) программное обеспечение, некоторые простые кабели и устройства 1-Wire для оценки.Актуальные цены на товары и их наличие можно найти на сайте Maxim. Программное обеспечение OneWireViewer 8 и соответствующие драйверы можно загрузить бесплатно.

    Более экономичный подход — купить один из комплектов электромобиля. Каждый комплект включает адаптер 1-Wire, набор устройств 1-Wire или iButton, а также необходимые кабели и аксессуары. Таблица 1 описывает комплекты электромобилей, доступные на момент публикации этой публикации. Состав комплектов электромобилей может меняться по мере появления новых деталей.Устройства, не входящие в комплект, необходимо приобретать отдельно. Программное обеспечение, которое запускает комплекты электромобилей, доступно бесплатно на веб-сайте Maxim или по запросу, в зависимости от уровня безопасности продукта. Тип упаковки (пластик или iButton) определяет, какой комплект лучше всего подходит для применения.

    Таблица 1. Обзор комплекта EV

    Номер комплекта EV Оценивает Адаптер 1-Wire Тип Содержимое упаковки Банкноты
    DS9092K # устройства iButton USB,
    DS9490R
  • Кабель с датчиком iButton
  • Различные устройства iButton
  • Принадлежности для механического монтажа iButton
  • DS1921K # устройства iButton USB,
    DS9490R
  • Кабель с датчиком iButton
  • DS1921G
  • Принадлежности для механического монтажа
  • DS1925EVKIT # Устройства iButton USB,
    DS9490R
  • Кабель с датчиком iButton
  • DS1921L
  • Принадлежности для механического монтажа
  • Совместим с DS1922L, DS1922T, DS1922E и DS1923.(Они не входят в комплект.)
    DS1964SEVKIT # DS1964S USB,
    DS9400
  • Кабель
  • DS2465 EV комплектная плата
  • DS1402-RP8 Сетевой кабель 1-Wire
  • DS1964S Устройство iButton
  • DS28EA00EVKIT # DS28EA00 USB,
    DS9490R
  • Три платы EV с установленным DS28EA00
  • Кабели RJ-11
  • DS28E05EVKIT # DS28E05 USB,
    DS9481R-3C7
  • Кабель с платой разъема DS9120P +
  • DS28E05 в упаковке TSOC
  • Этот комплект также можно использовать для оценки других продуктов 1-Wire, доступных в корпусах TSOC или TO-92.
    DS28E80EVKIT # DS28E80 USB,
    DS9481R-3C7
  • Кабель с платой разъема DS9120Q +
  • DS28E80 в упаковке TDFN
  • DS28E15EVKIT # DS28E15 USB,
    DS9400
  • Кабель
  • DS2465 EV комплектная плата
  • DS9120Q + плата розетки
  • DS28E15 в упаковке TDFN
  • DS28E16EVKIT # DS28E16
    DS2477
    USB,
    DS9481P-300 #
  • Кабель USB с платами разъемов DS9121BQ +
  • DS28E16 и DS2477 в пакетах TDFN
  • DS28E22EVKIT # DS28E22 USB,
    DS9400
  • Кабель
  • DS2465 EV комплектная плата
  • DS9120Q + плата розетки
  • DS28E22 в упаковке TDFN
  • DS28E25EVKIT # DS28E25 USB,
    DS9400
  • Кабель
  • DS2465 EV комплектная плата
  • DS9120Q + плата розетки
  • DS28E25 в упаковке TDFN
  • DS28E36EVKIT # DS28E36
    DS2476
    USB,
    DS9481P-300 #
  • USB-кабель с платами разъемов DS9121AQ +
  • DS28E36 и DS2476 в пакетах TDFN
  • DS28E38EVKIT # DS28E38
    DS2476
    USB,
    DS9481P-300 #
  • USB-кабель с платами разъемов DS9121AQ +
  • DS28E38 и DS2476 в пакетах TDFN
  • DS28E39EVKIT # DS28E39
    DS2476
    USB,
    DS9481P-300 #
  • USB-кабель с платами разъемов DS9121AQ +
  • DS28E39 и DS2476 в пакетах TDFN
  • DS28E50EVKIT # DS28E50
    DS2477
    USB,
    DS9481P-300 #
  • USB-кабель с платами разъемов DS9121BQ +
  • DS28E50 и DS2477 в пакетах TDFN
  • DS28E83EVKIT # DS28E83
    DS2476
    USB,
    DS9481P-300 #
  • Кабель USB с платами разъемов DS9121AQ +
  • DS28E83 и DS2476 в пакетах TDFN
  • DS28E84EVKIT # DS28E84
    DS2476
    USB,
    DS9481P-300 #
  • USB-кабель с платами разъемов DS9121AQ +
  • DS28E84 и DS2476 в пакетах TDFN
  • Каковы следующие шаги к приложению 1-Wire?

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

    Помимо аппаратного обеспечения, микропрограммное обеспечение необходимо для связи с устройствами 1-Wire, записи или чтения данных и выполнения функций управления. Подборку программных драйверов 11 для различных платформ можно бесплатно загрузить с сайта Maxim.Драйверы для конкретных устройств, интерфейсы прикладных программ (API) и примеры программного обеспечения см. В Руководстве по программным ресурсам 1-Wire. 12 Это руководство также включает функции API, основанные на файловой структуре 1-Wire (OWFS), 13 , которые особенно полезны при работе с более чем несколькими сотнями байтов данных.

    Доступна ли настройка устройства?

    Maxim предлагает два типа настройки устройства. Пользовательское ПЗУ довольно популярно среди устройств, предназначенных только для идентификации, но оно применимо ко всем устройствам с 64-битным идентификационным номером.С настраиваемым ПЗУ пул из 68,7 × 10 9 номеров (эквивалент 36 битов) предназначен для использования только одним клиентом. Примеры пользовательского ПЗУ можно найти в примечании к приложению Maxim 178. 5 Этот тип настройки выполняется до упаковки, что приводит к длительному времени выполнения заказа. Для устройств EEPROM / OTP / FRAM с поддержкой SHA-256 / ECDSA / SHA-3 Maxim предоставляет безопасную услугу предварительного программирования для установки данных и секретов. Для получения подробной информации отправьте запрос в службу технической поддержки на завод.

    Сводка
    Технология

    1-Wire основана на протоколе последовательной связи, в котором используется одна линия данных плюс заземление между ведущим и ведомым.Ведомые устройства 1-Wire доступны в пластиковых корпусах в форме штампа с выступом или в форме кнопки iButton из нержавеющей стали. Минимальная функция ведомых устройств 1-Wire — это 64-битный идентификационный номер. Дополнительные функции: PIO, датчик температуры, счетчик времени, NV SRAM, OTP EPROM, EEPROM, механизм SHA-256 / SHA-3 / ECDSA, безопасный EEPROM SHA-256 / SHA-3 / ECDSA, регистрация температуры и влажности. Типичные приложения для устройств 1-Wire включают идентификацию и аутентификацию расходных материалов, стоечных карт, печатных плат, компьютерных аксессуаров и защиту IP (например.g., предотвращение клонирования). Устройства iButton используются в особых случаях: контроль доступа, управление активами, системы обхода охраны, учет рабочего времени, электронные деньги и мониторинг температуры для обеспечения безопасности пищевых продуктов и фармацевтики. Доступны стартовые комплекты электромобилей и программные драйверы, чтобы помочь клиентам интегрировать технологию 1-Wire в свои системы.

    Ссылки / другие ресурсы
    1. Указание по применению 4132: Методы крепления для электромеханического блока SFN
    2. Примечание по применению 3808: Что такое устройство iButton?
    3. Примечание по применению 4037: Восстановление информации о местоположении с помощью функции 1-Wire Chain — простой метод сигнализации и протокола определяет физическое местоположение устройства
    4. Замечания по применению 186: Создание глобальных идентификаторов с помощью устройств 1-Wire
    5. Указание по применению 178: Идентификация печатных плат с использованием продуктов 1-Wire
    6. Примечание по применению 3675: Защитите свои инвестиции в НИОКР с помощью безопасной аутентификации
    7. Указание по применению 3892: Обзор датчиков iButton и регистраторов данных температуры / влажности
    8. Примечание по применению 3358: Руководство пользователя OneWireViewer
    9. Примечание по применению 244: Расширенный сетевой драйвер 1-Wire
    10. Стартовая страница, Комплекты для разработки программного обеспечения
    11. Примечание по применению 155: Руководство по программным ресурсам для 1-Wire Описание устройства
    12. Примечание по применению 114: Файловая структура 1-Wire

    Общие сведения об интерфейсе 1-Wire — Сделайте это легко с помощью ScienceProg

    1-проводные устройства обычно используются во многих приложениях.Вы, наверное, знакомы со знаменитым цифровым датчиком температуры DS18B20 в корпусе TO92. Разумеется, они могут питаться и подключаться к одной и той же линии передачи данных плюс заземление. Первоначально 1-wire была разработана Dallas Semiconductors Corp., которая также является крупным поставщиком устройств 1-Wire, таких как датчики температуры, таймеры, часы реального времени, память и хорошо известный iButton.

    1-проводный интерфейс — это стандарт двунаправленной, полудуплексной медленной последовательной связи.Он не использует никаких тактовых сигналов. Если говорить о скорости, то стандартная скорость передачи данных составляет 15,4 кбит / с. Но есть возможность перегрузить 1-проводную связь до 125 кбит / с.

    1-проводная сигнализация основана на конфигурации одного ведущего и нескольких ведомых устройств. Каждое ведомое устройство имеет уникальный адрес, хранящийся в ПЗУ на кристалле. Мастер может распознать каждое подчиненное устройство, прочитав этот адрес без каких-либо конфликтов. Количество подчиненных устройств может достигать 100. Но практически опрос такого количества подчиненных устройств потребует много времени.Это следует учитывать при разработке отзывчивых систем.

    Ведущее и ведомое устройства используют соединение с открытым коллектором (открытым стоком) с линией шины.

    Значит, нужен подтягивающий резистор. Обычно для включения цепочки используется резистор 4,7 кОм.

    Режимы питания устройств 1-wire

    Большинство 1-проводных устройств можно запитать двумя способами: паразитным и обычным . Паразитный режим — это то, что позволяет сигнализировать и питать устройства по одной и той же линии передачи данных.В микросхемах этого режима вывод VCC должен быть подключен к земле, в то время как линия передачи данных протягивается через резистор 4,7 кОм. В состоянии высокого уровня сигнала в 1-проводных устройствах заряжается внутренний конденсатор 800 пФ, который обеспечивает достаточную мощность во время низкого состояния линии. При использовании Parasitic more важно соблюдать временные характеристики и характеристики мощности, чтобы обеспечить достаточную мощность для правильной работы. В некоторых случаях может использоваться вспомогательное жесткое подтягивание для обеспечения достаточной мощности во время бездействия линии передачи данных (например, во время преобразования температуры):

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

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

    Обмен данными с устройствами 1-Wire

    Обычно вы не найдете однопроводного интерфейса в микроконтроллерах или ПК. Для связи вам необходимо использовать программную сигнализацию Bit-Bang или вставить драйвер линии 1-Wire, который подключается к одному доступному интерфейсу, например SPI или I2C.В большинстве случаев, когда используется микроконтроллер, устройства 1-Wire подключаются напрямую к контактам MCU. Вы уже можете найти готовые библиотеки для быстрой реализации или написать свои. Давайте посмотрим, как работает 1-проводная сигнализация. Как только мы проясним ситуацию, будет легко писать свои собственные процедуры. Для отправки двоичных чисел 1 или 0 используются временные интервалы. В зависимости от того, как долго линия протягивается, низкий уровень распознается, будь то 0 или 1. Когда шина освобождается от низкого уровня в 15 мкс, короткий временной интервал считается логической 1.В то же время для длинных интервалов, по крайней мере, 60 мкс — 0. В режиме перегрузки длительность временных интервалов примерно в 10 раз короче.

    Связь всегда запускается мастером, который сбрасывает линию данных с помощью длительного сброса (минимум 480 мкс). После того, как мастер отпускает линию данных, подтягивающий резистор поднимает линию данных на высокий уровень. Через короткое время (до 60 мкс) ведомые устройства тянут линию, чтобы подать сигнал присутствия. Это затягивание длится немного короче, чем общий сброс (до 240 мкс). После того, как ведомое устройство освобождает линию данных, ведущее устройство начинает связь.

    Мастер отправляет биты 0 и 1, записывая временные интервалы 60us:

    Когда мастер выполняет запись данных, он записывает биты во временных интервалах 60 мкс. Чтобы записать 0, он должен подтянуть линию данных к низкому уровню в течение всего временного интервала 60 мкс. Затем ведомый обнаруживает низкий уровень во время выборки и считывает 0. Когда ведущий записывает 1, он должен установить низкий уровень примерно на 15 мкс, но не более, а затем отпустить линию. Подтягивающий резистор подтягивает линию, и ведомое устройство во время выборки обнаруживает высокий уровень и считывает 1.

    Время мастер-чтения:

    Во время операции основного чтения все становится немного сложнее, но не намного.Прежде всего, мастер по-прежнему управляет операцией чтения, подтягивая линию к низкому уровню во время временных интервалов чтения. Но это натяжение должно быть коротким (~ 1 мкс), а затем отпустить леску. Если ведомое устройство отправляет 0, оно удерживает линию до конца временного интервала. Мастер должен выполнить выборку линии данных после 15–60 мкс. Если мастер получает сигнал низкого уровня, он должен прочитать 0. И снова, во время чтения логической 1, мастер вытягивает линию на 1 мкс, а затем отпускает. Если после отпускания ведомое устройство не удерживает линию, подтягивающий резистор подтягивает линию данных.Мастер должен инициировать отбор проб примерно через 15–60 мкс. Если он читает строку высокий, он должен читать 1.

    Обычно задержка между временными интервалами должна быть около 1 мкс для нормального восстановления.

    1-проводная транзакция состоит из трех частей. Иначе ничего бы не вышло.

    • Сброс 1-проводной линии;
    • Последовательность команд ПЗУ;
    • Последовательность команд функций.

    Сброс строки мы уже обсуждали. Это дает начало новой сигнализации. Команда ПЗУ позволяет обращаться к ведомым устройствам.Есть несколько команд ROM с разными целями. Было бы полезно, если бы вы посмотрели на них в техническом описании устройства. Но некоторые из них являются общими, например Search ROM (F0h), где ведущее устройство идентифицирует все ведомые устройства, подключенные к 1-проводной линии передачи данных. Каждое ведомое устройство имеет уникальный 64-битный адрес. Таким образом, мастер во время циклического поиска в ПЗУ через все подчиненные устройства считывает и сохраняет все 64-битные адреса. Каждый цикл начинается с инициализации (сброса строки). Если подключено одно ведомое устройство, ведущее устройство может использовать команду чтения ПЗУ (33h).Когда в следующий раз ведущее устройство получит все коды ПЗУ, оно сможет обратиться к ведомому, отправив команду Match ROM (55h).

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

    Последовательная связь с малым числом выводов

    : введение в шину 1-Wire

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

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

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

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

    Основы 1-Wire

    Шина 1-Wire была разработана Dallas Semiconductor, а Dallas был приобретен Максимом, так что, насколько мне известно, Максим является текущим «владельцем» протокола. Интерфейс использует структуру «ведущий / ведомый», и единственными необходимыми соединениями между ведущим и ведомым устройством являются опорная земля и одна сигнальная линия.Как и в случае с I2C, сигнальная линия подтягивается к V DD через резистор и управляется через выходную схему с открытым стоком.

    Шина 1-Wire делает упор на низкое количество выводов, а не на скорость или гибкость реализации. Исходный протокол был ограничен скоростью передачи данных 16,3 кбит / с, что кажется абсурдно медленным по нынешним стандартам, но, тем не менее, вполне подходит для многих приложений. Новые устройства 1-Wire поддерживают более высокоскоростной режим «overdrive».

    Это базовая конфигурация шины 1-Wire.

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

    Приложения с мгновенным контактом

    Отличительным аспектом протокола 1-Wire является то, что он предназначен для использования (используя терминологию Максима) «средах мгновенного контакта». Когда я думаю о I2C и особенно о SPI, я представляю себе печатную плату с различными интегральными схемами, которые постоянно установлены и связаны через постоянные соединения.

    Шина 1-Wire, однако, часто используется с компонентами, которые находятся в электрическом контакте с главным устройством только временно. Важность контактных систем мгновенного действия в реализациях шины 1-Wire отражена в пакете «iButton» (см. Фото ниже). Это один из стандартных форм-факторов для компонентов шины 1-Wire, который служит прочным стандартизированным корпусом для ведомых устройств, которые часто отделяются от ведущего устройства.

    Корпус iButton имеет диаметр 16 мм и изготовлен из нержавеющей стали.Он обеспечивает удобное подключение к мастеру и защищает микросхему 1-Wire от неблагоприятных условий. Изображение предоставлено Максимом.

    Паразитическая сила

    Самой интересной особенностью шины 1-wire, на мой взгляд, является «паразитное питание». В начале этой статьи я упомянул, что протокол 1-Wire ближе к действительно однопроводному интерфейсу, чем UART. Мое оправдание этого утверждения состоит в том, что ведомые устройства 1-Wire не требуют подключения к источнику питания, тогда как с UART и приемник, и передатчик должны иметь отдельные подключения к источнику питания.

    Как вообще однопроводные интегральные схемы — к ним относятся датчики температуры, аутентификаторы, память и регистраторы данных — функционируют и обмениваются данными без вывода питания? На самом деле, у них и есть вывод питания, потому что «один провод» между ведущим и ведомым может передавать как данные, так и питание.

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

    Схема любезно предоставлена ​​Максимом.

    Идентификация ведомых устройств

    Еще одна интересная особенность протокола 1-Wire — это метод адресации компонентов, подключенных к шине. Каждое устройство 1-Wire предварительно запрограммировано с уникальным постоянным 64-битным серийным номером.(Благодарим Dallas Semiconductor за хорошее долгосрочное планирование; 2 64 равно примерно 18,4 квинтиллионам, поэтому я не думаю, что в ближайшее время у нас закончатся адреса 1-Wire.) Этот 64-битный последовательный порт. Число включает 8 бит для CRC и 8 бит для кода, который идентифицирует семейство, к которому принадлежит IC.

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

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

    Заключение

    Я надеюсь, что эта статья дала вам четкое представление о том, что такое шина 1-Wire и как она используется.Если вы когда-либо включали этот протокол в один из своих проектов, было бы здорово услышать о вашем опыте. Почему вы выбрали 1-wire вместо SPI или UART? Вы заметили какие-либо существенные преимущества или недостатки?

    1-Wire (Примечание приложения) | LabJack

    В этом примечании к приложению объясняется работа и использование шины 1-Wire в сочетании с продуктами LabJack.

    Совместимость

    • T4: Все последние версии прошивки.
    • T7 / T7-Pro: все последние версии прошивки.
    • UE9: Control Firmware v2.20 или новее.
    • U6: Прошивка 1.17 или новее.
    • U3: Прошивка v1.31 или новее.
    • U12: Не поддерживается.

    Обзор 1-Wire

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

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

    Использование LabJack в качестве мастера

    Перед тем, как пытаться установить связь с ведомым устройством 1-Wire через LabJack, убедитесь, что выполняются следующие условия:

    • Совместимость 1-Wire с вашим LabJack
    • Подключайте подчиненные устройства 1-Wire только через линии EIO и CIO.Линии FIO имеют слишком большой импеданс для правильной работы 1-Wire *. Поскольку линии EIO и CIO доступны только через разъем DB15, может оказаться полезным приобрести CB15.
    • Паразитный или специализированный источник питания? В зависимости от потребляемой мощности ведомому устройству может потребоваться выделенный источник питания, или, если это паразитное устройство, на шине должны быть установлены правильные подтягивающие и / или понижающие резисторы. Соответствующие подключения см. В техническом описании устройства.

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

    Устройства серии

    UD: функция нижнего уровня для 1-Wire для обработки команды / ответа байтового массива и может быть интегрирована в любую программу, имеющую доступ к протоколу коммутации устройств (USB, Ethernet и т. Д.). Пример в LabVIEW подробно описано ниже.

    Устройства

    серии T. Многозначные функции LJM упрощают работу с 1-Wire. Например:

    Алгоритм поиска

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

    Каждая ветвь на уровне битов обозначает различие в ПЗУ устройства. Эти устройства имеют только 2-битное ПЗУ.

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

    Более подробную информацию об алгоритмах ветвления и поиска можно найти в следующих документах:

    Пример

    1. Обзор

    В этом примере используется цифровой термометр Maxim DS1822 для демонстрации использования 1-Wire.U3-LV с микропрограммой v1.31 настроен как ведущий и использует CB15; 4 датчика температуры DS1822 подключены к EIO6 (DIO 14) **, VS и GND. Ниже представлено изображение тестовой установки.

    Тестирование 1-Wire с использованием LabJack U3-LV и 4 датчиков температуры DS1822

    2. Подключения

    Поскольку на CB15 имеется 5 В (VS), а DS1822 может получать питание напрямую или от шины (паразитно), он был подключен напрямую к VS.Согласно спецификации, при таком подключении целесообразно также включить в шину подтягивающий резистор. С правой стороны виден подтягивающий резистор 4,7 кОм.

    Лист данных

    DS1822: https://datasheets.maximintegrated.com/en/ds/DS1822.pdf

    3. Найдите адрес в ПЗУ

    Следующим шагом является обнаружение кодов ПЗУ, которые запрограммированы на заводе в DS1822s. Как упоминалось выше, проще всего подключить к шине одно устройство, а затем выполнить команду чтения ПЗУ [33h].Затем ведомое устройство вернет свое 64-битное ПЗУ. Для удобства внизу страницы можно скачать программу LabVIEW, способную обнаруживать адреса ПЗУ на шине 1-Wire.

    Поиск шины 1-Wire

    В связи с тем, что устройства 1-Wire могут использоваться на практике, например, в обширной сенсорной сети, было решено, что алгоритм поиска может принести большую пользу нашим клиентам. Алгоритм был разработан в LabVIEW 6 и использует команду Search ROM [F0h] для исследования всех ветвей, необходимых для достижения каждого ведомого устройства.После обнаружения они сохраняются в памяти и отображаются в окне управления. Исполняемый файл алгоритма был протестирован только в приведенном выше примере, но его можно скачать ниже. Также доступен ВПП.

    4. Считывание температуры

    После того, как все коды ПЗУ известны, просто используйте команду Match ROM [55h], за которой следует последовательность 64-битных кодов ПЗУ, чтобы адресовать конкретное ведомое устройство на шине. Прежде чем какое-либо соединение может начаться по шине 1-Wire, ведущее устройство должно будет инициировать эту команду ПЗУ.

    Чтобы получить данные о температуре, необходимо выполнить две дополнительные последовательности команд; каждая следует за командой Match ROM [55h].

    1. Первый — заставить датчик температуры преобразовывать показания температуры в двоичное число. Функциональная команда для этого — [44h], и должна быть выдана в первом байте данных Tx. См. Справочник по функциям нижнего уровня для местоположения байта 0 Tx. Также установите Num Tx равным 1 для количества передаваемых байтов.
    2. Вторая последовательность требуется для чтения двоичного значения температуры из памяти устройства.Соответствующая функциональная команда [BEh] также выдается в первом байте данных Tx. Снова установите Num Tx в 1, но на этот раз также необходимо указать мастеру на получение данных. Установите Num Rx как минимум на 2, потому что первые 2 байта содержат двоичное значение температуры DS1822. Дополнительные данные также можно прочитать с устройства, подробности см. В таблице данных.

    Полное описание связи см. По ссылке Пример работы DS1822 1 стр.18 в техническом описании.Простую программу LabVIEW, предназначенную для чтения DS1822, можно скачать ниже. Обратите внимание, что перед использованием программы необходимо знать адрес ПЗУ ведомого датчика.

    5. Полезный код

    Эти загрузки были разработаны во время тестирования и упоминаются в этом примечании к приложению. Перед использованием ознакомьтесь с примечанием к приложению. Для всех исполняемых файлов потребуется движок времени выполнения LabVIEW 6.0, который можно загрузить здесь (10,4 МБ, сохранить на рабочий стол, щелкните правой кнопкой мыши и выполните «извлечение здесь», запустите lvrteinstall.EXE). SubVI используют часть архива LabVIEW LJUD, поэтому его нужно будет загрузить и указать соответствующие subVI.

    Шина 1-Wire ™ и цифровой серийный номер

    Резюме: узнайте о шине 1-Wire ™, создав цифровой серийный номер, который имитирует iButton ™


    Возможно, вы слышали о цифровых шинах SPI и I²C. Это, соответственно, 3-х и 2-х проводные межсоединения, которые используются для связи с периферийными ИС, такими как EEPROM.Но знаете ли вы, что существует цифровая шина, в которой используется только один провод? Ну ладно, один провод и земля. Эта шина, конечно же, называется шиной «1-Wire ™», и она была разработана много лет назад компанией Dallas Semiconductor (ныне принадлежит компании Maxim). Принцип работы этого интерфейса 1-Wire элегантен в своей простоте. Сигнальный провод от ведущего устройства к ведомому устройству подтягивается резистором ~ 2,2 кОм. Когда шина неактивна, резистор используется для зарядки небольшого конденсатора внутри ведомого устройства, которое подает на него питание.Связь от ведущего к ведомому осуществляется путем кратковременного переключения сигнального провода на низкий уровень, в течение которого ведомое устройство продолжает работать, потребляя энергию от конденсатора. Короткие импульсы на землю используются для обозначения бита «1», а слегка длинные импульсы указывают на биты «0». Обратный обмен данными между ведомым устройством и ведущим осуществляется за счет отправки ведущим серии еще более коротких импульсов. Подчиненное устройство отвечает на эти импульсы, удерживая линию на низком уровне, так что он продолжает оставаться на низком уровне дольше, чем время импульса ведущего.Чтобы отправить обратно бит «1», линия удерживается на низком уровне немного дольше, чем импульс, посланный мастером. Добавьте, чтобы отправить обратно бит «0», линия остается на низком уровне все дольше. Конечно, общий протокол связи более сложен, чем этот, но он должен дать вам представление о том, как работает 1-проводная шина. Для получения более подробной информации, вы должны прочитать Application Note AN937, чтобы получить полную картину. Dallas / Maxim производит множество устройств, реализующих шину 1-Wire, но одним из первых устройств, которые они сделали, была ИС с «цифровым серийным номером» в пластиковом корпусе TO-92-3.Текущая версия этого устройства, DS2401 +, доступна от Mouser по цене около 1,71 доллара (0,88 доллара на 1000 штук). Эти микросхемы также упакованы в металлические банки под названием «iButtons ™», которые напоминают батарейки типа «таблетка». Утверждается, что каждое устройство производится с уникальным 48-битным , выгравированным лазером , серийным номером только для чтения. Их можно использовать как своего рода электронный ключ или механизм контроля доступа путем прикосновения контактных точек к панели «считывателя» (см. Ниже). Однако в последние несколько лет стали доступны импортные устройства в форм-факторе iButton, которые доступны как для записи, так и для чтения.И в дополнение к этому также доступны небольшие «копировальные» устройства, которые могут считывать серийный номер с одного iButton и затем копировать его на один или несколько клонов с возможностью записи. Таким образом, хотя цифровой серийный номер IC или iButton может показаться идеальным электронным ключом, теперь он страдает той же проблемой дублирования, что и другие типы ключей. Но, к счастью, шина 1-Wire — это нечто большее, чем просто создание цифровых серийных номеров …

    iButton ™ (слева) и гнездо для считывателя (справа)

    Это протокол шины

    Оказывается, использовался этот протокол Считывание цифрового серийного номера служит другой цели.Это способ, который изобрел Даллас, чтобы обнаруживать и выборочно идентифицировать присутствие нескольких устройств на шине (помните, он был разработан как шина , , а не двухточечный интерфейс). Этот протокол, который называется 1-Wire Search Алгоритм используется для получения 48-битного серийного номера, который также действует как уникальный адрес ведомого устройства на шине. Кроме того, ведомое устройство отправляет обратно однобайтовый «семейный код», который указывает тип подключенного устройства, чтобы можно было осуществлять дальнейшую связь.Dallas / Maxim продает ряд более сложных устройств, упакованных как iButton, например, с EEPROM, RAM с батарейным питанием, регистраторами температуры и т. Д. Чтобы узнать больше об этих других устройствах, ознакомьтесь с Dallas / Maxim «Обзор технологии 1-Wire». и его использование ». Давайте создадим собственное устройство 1-Wire!

    Ради интереса я начал задаваться вопросом, насколько сложно будет создать собственное 1-проводное устройство, которое имитировало бы DS2401 +, используя недорогой микроконтроллер, такой как Atmel / Microchip ATTiny10.Версия этого чипа SOT-23, ATTINY10-TSHR, стоит всего 33 цента (цена за штуку), что значительно дешевле, чем цена DS2401 + в размере 1,71 доллара, так что это показалось интересным проектом только с точки зрения затрат. Кроме того, я смогу запрограммировать любой серийный номер, который захочу. И хотя я мог питать ATTiny10 от 5 вольт, я планировал построить схему, подобную следующей, чтобы посмотреть, смогу ли я также реализовать аспект автономного питания микросхем 1-Wire. Я надеялся, что если я смогу работать с автономным питанием, это даст мне отправную точку для создания других типов нестандартных устройств 1-Wire.

    Щелкните изображение, чтобы увеличить

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

    1. Ведомое устройство ожидает «сброса», который отправляет ведущее устройство, потянув за автобус низкий за 480 у.е. Это приводит к пробуждению всех ведомых устройств на шине.
    2. После задержки ~ 50 мкс каждое ведомое устройство переводит шину в низкий уровень на ~ 150 мкс, который отправляет обратно индикатор «присутствия».
    3. Если устройство ответило, протокол продолжается, в противном случае мастер ждет и снова начинает с шага 1.
    4. Теперь мастер отправляет серию из 8 бит, которые образуют «командный» байт, удерживая шину на низком уровне в течение длительного времени (ноль) и короткой (одной) продолжительности.
    5. Если ведомое устройство получает командный байт 0xF0, это указывает на начало последовательности «поиска 1-Wire».
    6. Главный теперь посылает серию из 64 групп из 2 импульсов чтения (из подчиненного), за которыми следует 1 импульс записи (в подчиненное устройство).
    7. Для двух импульсов чтения ведомое устройство сначала отправляет обратно значение бита LS из 64-байтового значения.Он отправляет дополнение к этому значению в следующем импульсе чтения.
    8. Для импульса записи мастер отправляет обратно значение, полученное в первом импульсе чтения.
    9. Если значение, которое получает ведомое устройство, не совпадает со значением, которое оно отправило в первом импульсе чтения, ведомое устройство прекращает прослушивание и возвращается к шагу 1.
    10. В противном случае оно возвращается к шагу 6, чтобы отправить следующий из 64 битов.
    11. Если ведомому удается успешно отправить все 64 бита, оно было выбрано в качестве активного устройства на шине и теперь может принимать дополнительные команды.
    Похоже, это должно быть довольно легко кодировать, не так ли? Что ж, я хотел бы сказать, что это был простой проект, но мне потребовалось несколько дней, чтобы заставить код работать, а затем еще один день экспериментов, чтобы заставить его работать надежно. В основном это произошло потому, что я пытался вместе взломать протокол, не изучив предварительно все детали. В частности, время битов и периоды ожидания после битов было довольно сложно получить правильно. И хотя мне удалось заставить работать версию с автономным питанием, мне пришлось использовать более дорогой диод Шоттки, а не более дешевый диод 1N4148, который я попробовал первым, а также конденсатор большей емкости, чем я первоначально думал (я начал с конденсатор на 1 мкФ и увеличил его до 4.7 мкФ до того, как схема начнет надежно работать на контакте.) Примечание: конденсатор 4,7 мкФ, кажется, работает нормально, когда подтягивающий резистор равен 2,2 кОм, но в системах, которые используют более высокое значение для подтягивающего резистора, может потребоваться еще больший конденсатор. .

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

    Saleae Logic 8

    , который показывает колебания напряжения на сигнальной линии (верхняя кривая — цифровая, а нижняя — аналоговая):

    Кроме того, я включил сторожевой таймер в коде, чтобы помочь цепи восстановиться после падения рабочего напряжения.Поскольку включение сторожевого таймера может мешать внутрисхемному программированию, я добавил 100 микросекундную задержку при запуске перед включением сторожевого таймера. Это дает программисту время взять на себя управление, если вы захотите изменить и перепрограммировать код. С первой попытки я установил предохранитель WDTON в ATTiny10, из-за чего сторожевой таймер всегда был включен, а позже обнаружил, что мне пришлось прибегнуть к использованию протокола программирования высокого напряжения для перепрограммирования микросхемы. Кстати, если вы решите, что хотите больше поэкспериментировать с 1-проводным интерфейсом, логические анализаторы Saleae очень полезны, потому что они включают вариант 1-проводного декодера, который вы также можете увидеть в действии на изображении выше.Удивительно, но мой довольно дорогой осциллограф серии DS4000 от Rigol не предлагает способа декодирования протокола 1-Wire.

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

    1. Начните с питания ATTiny10 напряжением 5 В, так как это устраняет любые проблемы, связанные с питанием.
    2. Прочтите примечания к приложениям Dallas / Maxim
    3. Используйте логический анализатор, который может декодировать протокол 1-Wire. Я бы, наверное, сдался, если бы у меня не было в наличии Saleae Logic 8.

    Попробуйте сами!

    Если вы хотите попробовать создать свой собственный цифровой серийный номер, я покажу вам три способа дублировать мою работу. Если вы хотите скомпилировать код с нуля, вы можете использовать мою программу ATTiny10IDE. Это интегрированная среда разработки (IDE), которую я написал на Java, чтобы упростить работу с микроконтроллерами серии ATTiny.ATTiny10IDE поставляется с некоторой встроенной документацией, в которой объясняется, как его использовать, поэтому после его установки вы сможете загрузить файл SerialNum.c (см. Вложения внизу страницы) и приступить к работе. Основные шаги:
    1. Откройте SerialNum.c, используя меню «Файл».
    2. Используйте команду «Build» в меню «Actions» для компиляции кода (отобразится список на смешанном C и ассемблерном коде)
    3. Подключите Arduino, на котором запущен код ATTiny10 Programmer (подробнее об этом ниже)
    4. Select порт и скорость передачи данных Arduino (115200) в меню «Настройки».
    5. Выберите TPI Programmer-> Program Device в меню «Действия», чтобы запрограммировать ATTiny10 с помощью скомпилированного кода.
    6. Отсоедините ATTiny10 от программатора и подключите его к схеме выше
    7. О, и вам понадобится программа чтения 1-Wire для считывания серийного номера, но об этом позже …

    2. Создайте эскиз Arduino, который может программировать ATTiny10

    . В качестве альтернативы вы можете использовать ATTiny10IDE для создания эскиза Arduino, который будет действовать как программист, который вам нужен на шаге 3 выше.Вы можете создать этот эскиз, например:

    1. Откройте SerialNum.c, используя меню «Файл».
    2. Используйте команду «Построить» в меню «Действия» для компиляции кода (отобразится список на смешанном языке C и код сборки).
    3. Выберите «Программист TPI.> Сгенерировать код программиста Arduino» в меню «Действия» и сохраните этот файл (с именем « SerialNum-prog.ino ») на диск.
    4. Загрузите Sketch в Arduino IDE и загрузите его в стандартный Arduino, такой как Arduino UNO.
    5. Откройте окно «Монитор» и установите скорость 115200 бод.
    6. Sketch должен распечатать инструкции по подключению ATTiny10 к линии данных Arduino, например:
    • Connect:
    • Arduino pin D2 to ATtiny10 pin 5
    • Arduino pin D3 to ATtiny10 вывод 3
    • Вывод D4 Arduino на вывод 1 ATtiny10
    • Вывод D5 Arduino на вывод 6 ATtiny10
    • Вывод D6 Arduino на вывод 2 ATtiny10
    • Команды:
    • P — Программа ATtiny10
    • I — Идентификация ATtiny10
  • Убедитесь, что ATTiny10 правильно подключен, набрав g букву «I» в текстовой области монитора, нажав кнопку «Отправить».Это должно повториться эхом:
  • После того, как ATTiny10 правильно подключен (двойная проверка), введите букву «P» в текстовой области монитора вверху и нажмите кнопку «Отправить».
  • Скетч должен затем напечатать «Программирование», а затем «Готово».
  • Отсоедините ATTiny10 от программатора и подключите его к цепи выше
  • О, и вам понадобится программа чтения 1-Wire для считывания серийного номера. номер, но об этом позже …
  • 3. Загрузите Arduino Sketch, который может программировать ATTiny10

    Или, наконец, вы можете просто пропустить « SerialNum-prog.ino «, который я уже создал для вас (см. вложения внизу страницы), и следуйте шагу 4 в наборе инструкций, которые я жажду непосредственно перед этой опцией. Примечание: как только вы загрузили этот эскиз в Arduino , он также будет работать как программатор ATTiny10 в ATTiny10IDE, который вас попросили использовать на шаге 3 в первом наборе инструкций выше.

    Изменение серийного номера

    Если вы компилируете код с нуля (вариант 1) или сгенерировав вариант 2) Programmer Sketch, вы можете изменить серийный номер, просто изменив средние 6 байтов ( 0x57, 0x47, 0xCF, 0x01, 0x00, 0x00 ) в строке 24 в SerialNum.c . Или, если вы загрузили предварительно сгенерированный эскиз программиста (вариант 3), вы можете изменить те же значения внутри созданного эскиза программиста, как показано ниже красным цветом :


    Примечание: байт 0x01 перед 0x57 value — это байт «семейного кода», а байт 0x00 справа от выделенной области является заполнителем для байта CRC, который автоматически вычисляется программой SerialNum.c для соответствия другим 7 байтам в 8 байтах, 64-битная последовательность.

    Хорошо, а что насчет программы Reader?

    Загрузите файл «One-Wire Serial Reader.zip» ниже и после его распаковки скопируйте эскиз в папку с другими эскизами Arduino. Если вам нужна помощь на этом этапе, см. «Добавление программ (эскизов) в Arduino IDE». Однако, прежде чем вы сможете скомпилировать и загрузить этот Sketch, вам также необходимо установить OneWire.h Library в Arduino. Эту библиотеку можно скачать с этой веб-страницы. Если вам нужна помощь в установке библиотеки в Arduino IDE, ознакомьтесь с полными инструкциями на этой странице.Затем, после того, как вы завершили проект выше (или, если у вас есть iButton или другое под рукой устройство 1-Wire), вы можете использовать следующую схему с One-Wire Serial Reader Sketch для считывания серийного номера :

    Щелкните изображение, чтобы увеличить


    Вот изображение моей тестовой установки с использованием соединений, показанных выше:

    Щелкните изображение, чтобы увеличить

    Чтобы использовать Reader, запустите Sketch, а затем откройте «Монитор» и установите его на 115200. Если все работает правильно, вы должны увидеть следующее:

    DS1990A: 01 57 47 CF 01 00 00 26

    Серийный номер: 0x1CF4757 (30361431)

    Щелкните изображение, чтобы увеличить

    Ниже приведен полный список деталей, необходимых для сборки платы.Поскольку вы получите 3 копии печатной платы из парка OSH и поскольку стоимость деталей, необходимых для сборки плат, довольно низкая, вы можете рассмотреть возможность заказа достаточного количества деталей для сборки всех трех плат, так как это даст вам две запасные части для других проектов. .


    (*) Примечание: если ATTINY10-TSHR недоступен в Mouser, попробуйте заказать его в DigiKey по чуть более высокой цене — 0,34 доллара США.

    Обновление …

    One-Wire Serial Reader.zip

    (2k)

    Wayne Holder,

    5 февраля 2019 г., 22:21

    Wayne Holder,

    5 февраля 2019 г., 1:27 AM

    Wayne Holder,

    5 февраля 2019 г., 1:27

    % PDF-1.6 % 610 0 объект > эндобдж xref 610 72 0000000016 00000 н. 0000002337 00000 н. 0000002472 00000 н. 0000002664 00000 н. 0000002691 00000 н. 0000002741 00000 н. 0000002776 00000 н. 0000003042 00000 н. 0000003180 00000 н. 0000003318 00000 н. 0000003457 00000 н. 0000003594 00000 н. 0000003732 00000 н. 0000003873 00000 н. 0000004011 00000 н. 0000004090 00000 н. 0000004167 00000 н. 0000004247 00000 н. 0000004326 00000 н. 0000004404 00000 п. 0000004482 00000 н. 0000004560 00000 н. 0000004638 00000 н. 0000004716 00000 н. 0000004794 00000 н. 0000004872 00000 н. 0000004950 00000 н. 0000005028 00000 н. 0000005106 00000 п. 0000005183 00000 п. 0000005260 00000 н. 0000005396 00000 н. 0000005528 00000 н. 0000006139 00000 п. 0000006447 00000 н. 0000006668 00000 н. 0000006746 00000 н. 0000007918 00000 п. 0000008477 00000 н. 0000008705 00000 н. 0000009709 00000 н. 0000011028 00000 п. 0000012316 00000 п. 0000013494 00000 п. 0000014636 00000 п. 0000015183 00000 п. 0000015681 00000 п. 0000015902 00000 н. 0000016133 00000 п. 0000017294 00000 п. 0000018441 00000 п. 0000022717 00000 п. 0000022947 00000 п. 0000023160 00000 п. 0000023218 00000 п. 0000023321 00000 п. 0000023416 00000 п. 0000023464 00000 п. 0000023657 00000 п. 0000023790 00000 п. 0000023936 00000 п. 0000024047 00000 п. 0000024158 00000 п. 0000024360 00000 п. 0000024486 00000 п. 0000024668 00000 п. 0000024802 00000 п. 0000024945 00000 п. 0000025124 00000 п. 0000025232 00000 п. 0000025371 00000 п. 0000001775 00000 н. трейлер ] >> startxref 0 %% EOF 681 0 объект > поток K6Cb! 2 @ mmJv3! E # EŤ.pjM8 * X3 .͙GC ߢ SK (d => «rC5e ~ 9vRgD: 6gC @ i) 0Xv) / R; NuQ? AnmbFQFTqpa3g Չ x% kK # r] y

    Чтение датчика температуры 1-Wire

    Здесь мы управляем устройством 1-Wire через файловую систему Omega путем чтения и записи файлов. Мы также представляем концепцию , сканирующую шину на предмет устройств и адресов устройств. Мы также объясним концепцию __name__ == '__main__' — что она делает и когда ее следует использовать.

    Оборудование и файловая система Омеги

    Оборудование Omega, такое как последовательные порты, I2C и шина SPI, отображается в виде файлов где-то в системе (фактически, это верно для большинства систем Linux).Чтобы программное обеспечение и программы могли взаимодействовать с этими соединениями, они должны работать с соответствующими файлами путем чтения и записи. Это очень важная концепция, поэтому обязательно запомните ее!

    Работа с файлами

    При работе с файлом из программы необходимо выполнить следующие шаги:

    • Открыть файл для чтения, записи или обоих одновременно
    • Чтение из или запись в файл
    • Закройте , когда закончите

    Это относится ко всем программам, взаимодействующим с файловой системой, а не только к Python.

    А как насчет оборудования?

    Оборудование, подключенное к портам Omega, представлено в системе «виртуальными» файлами, обычно перечисленными в / sys / devices . Процесс прямого взаимодействия с ними заключается в чтении и записи этих файлов!

    Собираем вместе

    Наше соединение 1-Wire сначала инициализируется как файл через эту строку в oneWire.py :

    Это вызывает системную команду ( insmod ), чтобы настроить конкретный GPIO для работы в качестве главной шины 1-Wire.Команда устанавливает указанный GPIO как виртуальный файл, который мы затем можем читать и записывать в качестве интерфейса 1-Wire — / sys / devices / w1_bus_master1 .

    Для работы с файлом 1-Wire мы используем Python с оператором . Это позволяет нам чисто открыть файл и автоматически закрыть его, когда мы закончим! Вот пример всего этого в файле oneWire.py :

    Этот простой двухстрочный блок считывает из системного файла ведомого устройства по адресу / sys / devices / w1_bus_master1 /

    / w1_slave ", который запускает Omega для физической отправки запроса на датчик 1-Wire и возврата данных в наша программа.Затем файл автоматически закрывается, как только программа выходит из этого блока. Здесь подчиненный объект является файловым объектом Python, и мы читаем его так же, как и обычный файл!

    Сканирование автобуса

    Возможно, вы заметили, что класс OneWire используется классом TemperatureSensor и не требует явного импорта. Однако для целей этого эксперимента мы включили его в основной скрипт, чтобы использовать его функцию scanOneAddress () .

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

    1. Убеждаемся, что датчик является единственным устройством 1-Wire, подключенным к шине.
    2. Затем мы запрашиваем у шины адреса устройств.
    3. Появится только тот, который соответствует нашему датчику.

    Все это делается автоматически, чтобы сэкономить ваше время.

    Если вы хотите найти адрес устройства 1-Wire, чтобы записать его на будущее, выполните следующие действия:

    1. Отключите все остальные устройства 1-Wire от Omega, затем подключите свое устройство.
    2. cd в папку, содержащую oneWire.py и запустите интерпретатор Python с Python .
    3. Выполните эти команды:

    Адрес устройства будет напечатан на экране.

    Модули
    Python и функция
    __main__

    Любой файл кода Python может быть запущен напрямую или импортирован как модуль.Когда модуль импортируется, выполняется весь содержащийся в нем код, и все функции или классы становятся доступными для импортирующей его программы. Но что, если бы в вашем модуле были функции, которые вы хотите запускать, выполняя модуль напрямую, но не когда он импортирован?

    Введите переменную __name__ !

    Грубо говоря, каждый файл в Python имеет скрытую переменную __name__ .

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

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