Что такое интерфейс 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 осуществляется по следующему принципу:
- В исходном состоянии на шине высокий уровень, обеспечиваемый подтягивающим резистором
- Передача начинается с импульса сброса (Reset) от мастера — шина переводится в низкий уровень на 480 мкс
- Slave-устройства отвечают импульсом присутствия (Presence) длительностью 60-240 мкс
- Передача битов данных осуществляется в слотах по 60 мкс
- Логический 0 передается удержанием низкого уровня в течение всего слота
- Логическая 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:
- Программная реализация с использованием одного вывода GPIO
- Реализация на основе UART с программным опросом
- Реализация на основе 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-устройство. Все устройства, подключенные к шине, должны иметь возможность притянуть уровень шины к лог.
Обмен сигналами по шине 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:
- Обмен всегда ведется по инициативе одного ведущего устройства, которое в большинстве случаев является микроконтроллером (МК)
- Любой обмен информацией начинается с подачи импульса сброса («Reset Pulse» или просто RESET) в линию 1-Wire ведущим устройством
- Для интерфейса 1-Wire в общем случае предусматривается «горячее» подключение и отключение устройств
- Любое устройство, подключенное к 1-Wire после получения питания выдает в линию DQ импульс присутствия («Presence pulse» или просто PRESENCE). Этот же импульс устройство всегда выдает в линию, если обнаружит сигнал RESET
- Появление в шине 1-Wire импульса PRESENCE после выдачи RESET однозначно свидетельствует о наличии хотя бы одного подключенного устройства
- Обмен информацией ведётся так называемыми тайм-слотами: один тайм-слот служит для обмена одним битом информации
- Данные передаются побайтно, бит за битом, начиная с младшего бита. Достоверность переданных/принятых данных проверяется контрольной суммой 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В) | |
|
на максимальную протяженность, при которой наблюдается устойчивая связь с прибором Гигротермон
Длина кабеля, м. | Измеряемый параметр / наличие связи (да / нет) | |
Температура | Относительная влажность | |
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 , поэтому эта деталь подходит для идентификации картриджей для принтеров и медицинских расходных материалов. | |
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). | |
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 | |
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 |
Идентификация плюс аутентификация 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 | |
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 Кбайт памяти для хранения данных, ключей и сертификатов |
Идентификация плюс аутентификация SHA-3 и безопасный EEPROM
Устройства этой категории безопасности используют модель безопасной аутентификации с симметричным ключом SHA-3.В устройствах используется технология Maxim ChipDNA PUF для защиты данных устройства. Он также имеет надежные контрмеры для защиты от атак на систему безопасности. См. . Доступна ли настройка устройства ? раздел для службы предпрограммирования.
Номер детали | Банкноты | Типичные области применения |
---|---|---|
DS28E50 | 2 КБ памяти, двунаправленная аутентификация SHA-3, ChipDNA, счетчик декремента, встроенный RNG | |
DS2477 | I 2 Интерфейс C для связи с хостом и встроенный мастер 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 | ||
DS1921K # | устройства iButton | USB, DS9490R | ||
DS1925EVKIT # | Устройства iButton | USB, DS9490R | Совместим с DS1922L, DS1922T, DS1922E и DS1923.(Они не входят в комплект.) | |
DS1964SEVKIT # | DS1964S | USB, DS9400 | ||
DS28EA00EVKIT # | DS28EA00 | USB, DS9490R | ||
DS28E05EVKIT # | DS28E05 | USB, DS9481R-3C7 | Этот комплект также можно использовать для оценки других продуктов 1-Wire, доступных в корпусах TSOC или TO-92. | |
DS28E80EVKIT # | DS28E80 | USB, DS9481R-3C7 | ||
DS28E15EVKIT # | DS28E15 | USB, DS9400 | ||
DS28E16EVKIT # | DS28E16 DS2477 | USB, DS9481P-300 # | ||
DS28E22EVKIT # | DS28E22 | USB, DS9400 | ||
DS28E25EVKIT # | DS28E25 | USB, DS9400 | ||
DS28E36EVKIT # | DS28E36 DS2476 | USB, DS9481P-300 # | ||
DS28E38EVKIT # | DS28E38 DS2476 | USB, DS9481P-300 # | ||
DS28E39EVKIT # | DS28E39 DS2476 | USB, DS9481P-300 # | ||
DS28E50EVKIT # | DS28E50 DS2477 | USB, DS9481P-300 # | ||
DS28E83EVKIT # | DS28E83 DS2476 | USB, DS9481P-300 # | ||
DS28E84EVKIT # | DS28E84 DS2476 | USB, DS9481P-300 # |
Каковы следующие шаги к приложению 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 в свои системы.
Ссылки / другие ресурсы
- Указание по применению 4132: Методы крепления для электромеханического блока SFN
- Примечание по применению 3808: Что такое устройство iButton?
- Примечание по применению 4037: Восстановление информации о местоположении с помощью функции 1-Wire Chain — простой метод сигнализации и протокола определяет физическое местоположение устройства
- Замечания по применению 186: Создание глобальных идентификаторов с помощью устройств 1-Wire
- Указание по применению 178: Идентификация печатных плат с использованием продуктов 1-Wire
- Примечание по применению 3675: Защитите свои инвестиции в НИОКР с помощью безопасной аутентификации
- Указание по применению 3892: Обзор датчиков iButton и регистраторов данных температуры / влажности
- Примечание по применению 3358: Руководство пользователя OneWireViewer
- Примечание по применению 244: Расширенный сетевой драйвер 1-Wire
- Стартовая страница, Комплекты для разработки программного обеспечения
- Примечание по применению 155: Руководство по программным ресурсам для 1-Wire Описание устройства
- Примечание по применению 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].
- Первый — заставить датчик температуры преобразовывать показания температуры в двоичное число. Функциональная команда для этого — [44h], и должна быть выдана в первом байте данных Tx. См. Справочник по функциям нижнего уровня для местоположения байта 0 Tx. Также установите Num Tx равным 1 для количества передаваемых байтов.
- Вторая последовательность требуется для чтения двоичного значения температуры из памяти устройства.Соответствующая функциональная команда [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.
Обновление … 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-Wire, подключенным к шине.
- Затем мы запрашиваем у шины адреса устройств.
- Появится только тот, который соответствует нашему датчику.
Все это делается автоматически, чтобы сэкономить ваше время.
Если вы хотите найти адрес устройства 1-Wire, чтобы записать его на будущее, выполните следующие действия:
- Отключите все остальные устройства 1-Wire от Omega, затем подключите свое устройство.
-
cd
в папку, содержащуюoneWire.py
и запустите интерпретатор Python сPython
. - Выполните эти команды:
Адрес устройства будет напечатан на экране.
МодулиPython и функция
__main__
Любой файл кода Python может быть запущен напрямую или импортирован как модуль.Когда модуль импортируется, выполняется весь содержащийся в нем код, и все функции или классы становятся доступными для импортирующей его программы. Но что, если бы в вашем модуле были функции, которые вы хотите запускать, выполняя модуль напрямую, но не когда он импортирован?
Введите переменную __name__
!
Грубо говоря, каждый файл в Python имеет скрытую переменную __name__
.