9600 baud что это
Все привет сегодня расскажу что такое боды. Бод — единица скорости передачи сигнала, измеряемая числом дискретных переходов или событий в секунду. Бод используется как единица измерения при обозначении скорости модемов для коммутируемых телефонных линий, выражающая число изменений состояния канала связи в секунду (для модема – действительную частоту несущей при передаче данных).
Названа в честь Эмиля Бодо, изобретателя кода Бодо — кодировки символов для телетайпов.
Иногда ошибочно считают, что бод — это количество бит, переданное в секунду. Но это верно лишь для двоичного кодирования. Например, в современных модемах используется квадратурная амплитудная манипуляция, и одним изменением уровня сигнала может кодироваться несколько (до 16) бит информации.
Например, при символьной скорости 2400 бод скорость передачи может составлять 9600 бит/c благодаря тому, что в каждом временном интервале передаётся 4 бита.
Кроме этого, бодами выражают полную ёмкость канала, включая служебные символы (биты), если они есть. Эффективная же скорость канала выражается другими единицами, например битами в секунду (бит/c, bps).
В высокоскоростных модемах один символ несёт несколько битов. Например, модемы V.22bis и V.32 передают 4 бита на 1 символ, V.32bis – 6 битов, а V.34 – 9.
До появления DSL модемов скорость интернета у обычных пользователей была не большой, но теперь с приходом технологий DSL и VPN скорость интернета ограничивается чаще только тарифным планом провайдера.
Так что уверен вы расширили свой лексикон терминов локальной сети.
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Что такое скорость передачи в бодах (Baud Rate) и где она используется
Компьютеры обмениваются данными, отправляя биты цифровой информации по проводам от одного устройства к другому. Этот процесс позволяет устройствам отправлять данные на ваш компьютер и с вашего компьютера, и вам не нужно беспокоиться о настройке компонентов – это просто работает. Однако для некоторого оборудования мы должны предоставить информацию о скорости передачи данных в бодах (Baud rate). Что такое скорость передачи в бодах и почему она важна?
Каждый аспект связи между цифровыми устройствами основан на обмене двоичными битами информации. Самые ранние устройства использовали последовательные и параллельные порты связи, обычно на скоростях, которые, по современным стандартам, кажутся относительно низкими. Почти все устройства, построенные на основе современных технологий, обеспечивают координацию связи в фоновом режиме компьютера. Когда вы подключаете новое устройство к свободному USB-порту, появляется сообщение, предупреждающее вас о том, что компьютер «устанавливает программное обеспечение драйвера устройства». После задержки в несколько секунд настройка завершена, и нам больше не нужно об этом беспокоиться.
Промышленное оборудование работает в этом плане немного по-другому. Частое обновление компьютерных систем в промышленности может быть чрезвычайно дорогостоящим, не говоря уже о риске. Большинство систем управления содержат проверенные протоколы связи, но также немного отстают от удобства современной автоматической настройки. Инженерам часто приходится подключаться к ПЛК, и системы их просят предоставить информацию с такими терминами, как «Baud rate» или «полудуплексный или дуплексный режим», при этом они вручную выбирают COM-порты для маршрутизации информации.
Выше мы упоминали последовательные и параллельные протоколы связи. По мере того, как потоки данных становятся более сложными, у каждого метода есть свой способ увеличения пропускной способности. Для параллельной связи большее количество линий, расположенных в кабеле, позволит передавать больше данных. Это создает очевидные проблемы, поскольку электроника становится меньше и компактнее.
Для последовательной связи более высокие скорости передачи данных приводят к большей пропускной способности. Скорость, с которой развиваются компьютеры, позволяет увеличивать скорость передачи данных без увеличения количества проводов в связке, и это отличная новость для разработчиков оборудования. В то же время это создает проблемы для команд разработчиков программного обеспечения.
Скорее всего, ваш компьютер может очень быстро обмениваться данными. Адаптеры, такие как адаптер Ethernet, способны передавать данные до 10 гигабит в секунду (десятки миллиардов бит в секунду). Но если вы хотите подключиться к устройству, которому отроду несколько десятилетий, у него нет возможности обрабатывать данные с такой скоростью.
Задача при разработке программного обеспечения состоит в том, чтобы узнать, насколько быстро периферийное устройство может обмениваться данными, а затем ограничить скорость вашего компьютера при общении с этим устройством. В современных системах это информация, содержащаяся в таинственном «программном драйвере устройства». Из двух устройств ограничивающим фактором почти наверняка будет старое и медленное устройство.
Для оборудования, которое предшествует автоматической настройке, эта скорость должна быть вручную согласована на обоих концах: компьютере и периферийном устройстве.
Когда данные передаются, они обычно состоят из групп из 8-, 16- или 32-битных серий фрагментов двоичных данных. Эти строки данных могут представлять коды, числовые значения в двоичной форме или 8-битные символы ASCII, такие как буква, число или символ. При этом вводится такое понятие, как «бод». Бод – это общая единица измерения скорости передачи символов, которая является одним из компонентов, определяющих скорость передачи данных по каналу данных.
Это единица измерения символьной скорости или скорости модуляции в символах в секунду или импульсах в секунду. Это количество отдельных изменений символа (событий сигнализации), вносимых в среду передачи в секунду в сигнале с цифровой модуляцией или линейном коде со скоростью передачи данных. Бод относится к общей скорости передачи данных, которая может быть выражена в битах в секунду. Если в системе ровно два символа (обычно 0 и 1), то скорость в бодах и в битах в секунду (бит/с) эквивалентны.
Если передающему устройству сказано отправлять данные с определенной скоростью, но принимающее устройство ожидает только половину этой скорости передачи данных, оно пропустит все остальные биты. Излишне говорить, что данные будут представлять собой бесполезную информацию на принимающей стороне.
Скорость передачи данных обычно отображается как предварительно выбираемый список скоростей обмена данными, так что пользователь не может ввести ее или свою собственную произвольную скорость передачи данных. Эти скорости передачи обычно варьируются от нескольких сотен до более 100000 бит в секунду.
Практическое правило – выбирать самую высокую скорость передачи данных, которая может быть достигнута, не оставляя слишком много шансов на пропущенную информацию. По мере того, как скорость передачи данных становится выше, вероятность того, что один бит будет подвержен помехам из-за емкости в кабелях, увеличивается, и данные будут повреждены. С другой стороны, выбор слишком низкой скорости передачи данных может повысить надежность, но потребует слишком много времени на отправку и получение сообщений, пропуская критические показания датчиков.
Не ожидайте увидеть настраиваемую скорость передачи данных в бодах на адаптерах и устройствах на базе Ethernet, но есть несколько случаев, когда можно ожидать столкнуться с этим.
В чем разница между битрейтом и скоростью передачи в бодах?
Скорость последовательной передачи данных обычно обозначают термином битрейт (bit rate). Однако другой часто используемой единицей является скорость передачи в бодах (baud rate). Хотя это не одно и то же, при определенных обстоятельствах между обеими единицами существует определенное сходство. В статье дается четкое разъяснение различий между этими понятиями.
Общая информация
В большинстве случаев в сетях информация передается последовательно. Биты данных поочередно передаются по каналу связи, кабельному или беспроводному. На Рисунке 1 изображена последовательность бит, передаваемая компьютером или какой-либо другой цифровой схемой. Такой сигнал данных часто называют исходным. Данные представлены двумя уровнями напряжения, например, логической единице соответствует напряжение +3 В, а логическому нулю – +0.2 В. Могут использоваться и другие уровни. В формате кода без возврата к нулю (NRZ) (Рисунок 1) сигнал не возвращается к нейтральному положению после каждого бита, в отличие от формата с возвращением к нулю (RZ).
![]() | |
| Рисунок 1. | NRZ (без возврата к нулю) – наиболее распространенный формат двоичных данных. Скорость передачи данных измеряется в битах в секунду (бит/с). |
Битрейт
Скорость передачи данных R выражается в битах в секунду (бит/с или bps). Скорость является функцией продолжительности существования бита или времени бита (TB) (Рисунок 1):
Эту скорость называют также шириной канала и обозначают буквой C. Если время бита равно 10 нс, то скорость передачи данных определится как
R = 1/10 × 10 – 9 = 100 млн. бит/с
Обычно это записывается как 100 Мб/с.
Служебные биты
Битрейт, как правило, характеризует фактическую скорость передачи данных. Однако в большинстве последовательных протоколов данные являются только частью более сложного кадра или пакета, включающего в себя биты адреса источника, адреса получателя, обнаружения ошибок и коррекции кода, а также прочую информацию или биты управления. В кадре протокола данные называются полезной информацией (payload). Биты, не являющиеся данными, называются служебными (overhead). Иногда количество служебных бит может быть существенным – от 20% до 50%, в зависимости от общего числа полезных бит, передаваемых по каналу.
К примеру, кадр протокола Ethernet, в зависимости от количества полезных данных, может иметь до 1542 байт или октетов. Полезных данных может быть от 42 до 1500 октетов. При максимальном числе полезных октетов служебных будет только 42/1542, или 2.7%. Их было бы больше, если полезных байт было бы меньше. Это соотношение, известное также под названием эффективность протокола, обычно выражают в процентах количества полезных данных от максимального размера кадра:
Эффективность протокола = количество полезных данных/размер кадра = 1500/1542 = 0.9727 или 97.3%
Как правило, чтобы показать истинную скорость передачи данных по сети, фактическая скорость линии увеличивается на коэффициент, зависящий от количества служебной информации. В One Gigabit Ethernet фактическая скорость линии равна 1.25 Гб/с, тогда как скорость передачи полезных данных составляет 1 Гб/с. Для 10-Gbit/s Ethernet эти величины равны, соответственно, 10.3125 Гб/с и 10 Гб/с. При оценке скорости передачи данных по сети также могут использоваться такие понятия, как пропускная способность, скорость передачи полезных данных или эффективная скорость передачи данных.
Скорость передачи в бодах
Термин «бод» происходит от фамилии французского инженера Эмиля Бодо (Emile Baudot), который изобрел 5-битовый телетайпный код. Скорость передачи в бодах выражает количество изменений сигнала или символа за одну секунду. Символ – это одно из нескольких изменений напряжения, частоты или фазы.
Двоичный формат NRZ имеет два представляемых уровнями напряжения символа, по одному на каждый 0 или 1. В этом случае скорость передачи в бодах или скорость передачи символов – то же самое, что и битрейт. Однако на интервале передачи можно иметь более двух символов, в соответствии с чем на каждый символ отводится несколько бит. При этом данные по любому каналу связи могут передаваться только с помощью модуляции.
Когда средство передачи не может обработать исходный сигнал, на первый план выходит модуляция. Конечно, речь идет о беспроводных сетях. Исходные двоичные сигналы не могут передаваться непосредственно, они должны переноситься на несущую радиочастоту. В некоторых протоколах кабельной передачи данных также применяется модуляция, позволяющая повысить скорость передачи. Это называется «широкополосной передачей».
Выше: модулирующий сигнал, исходный сигнал
Используя составные символы, в каждом можно передавать по несколько бит. Например, если скорость передачи символов равна 4800 бод, и каждый символ состоит из двух бит, полная скорость передачи данных будет 9600 бит/с. Обычно количество символов представляется какой-либо степенью числа 2. Если N – количество бит в символе, то число требуемых символов будет S = 2N. Таким образом, полная скорость передачи данных:
R = скорость в бодах × log2S = скорость в бодах × 3.32 log10S
Если скорость в бодах равна 4800, и на символ отводится два бита, количество символов 22 = 4.
Тогда битрейт равен:
R = 4800 × 3.32log(4) = 4800 × 2 = 9600 бит/с
При одном символе на бит, как в случае с двоичным форматом NRZ, скорости передачи в битах и бодах совпадают.
Многоуровневая модуляция
Высокий битрейт можно обеспечить многими способами модуляции. Например, при частотной манипуляции (FSK) в каждом символьном интервале для представления логических 0 и 1 обычно используются две различные частоты. Здесь скорость передачи в битах равна скорости передачи в бодах. Но если каждый символ представляет два бита, то требуются четыре частоты (4FSK). В 4FSK скорость передачи в битах в два раза превышает скорость в бодах.
Еще одним распространенным примером является фазовая манипуляция (PSK). В двоичной PSK каждый символ представляет 0 или 1. Двоичному 0 соответствует 0°, а двоичной 1 – 180°. При одном бите на символ скорость в битах равна скорости в бодах. Однако соотношение числа бит и символов несложно увеличить (см. Таблицу 1).
9600 baud что это
Бод (англ. baud ) в связи и электронике — единица измерения символьной скорости, количество изменений информационного параметра, несущего периодического сигнала в секунду. [1] Названа по имени Эмиля Бодо, изобретателя кода Бодо — кодировки символов для телетайпов.
Зачастую ошибочно считают, что бод — это количество бит, переданное в секунду. В действительности же это верно лишь для двоичного кодирования, которое используется не всегда. Например, в современных модемах используется квадратурная амплитудная манипуляция (КАМн), и одним изменением уровня сигнала может кодироваться несколько (до 16) бит информации. Например, при символьной скорости 2400 бод скорость передачи может составлять 9600 бит/c благодаря тому, что в каждом временном интервале передаётся 4 бита.
Кроме этого, бодами выражают полную ёмкость канала, включая служебные символы (биты), если они есть. Эффективная же скорость канала выражается другими единицами, например битами в секунду (бит/c, bps).
Производные единицы
С помощью приставок системы СИ можно образовывать производные, более крупные единицы, например килобод (кбод), равный 1024 бод.
Примечания
См. также
Полезное
Смотреть что такое «Бод» в других словарях:
бодёна — бодёна … Словарь употребления буквы Ё
бод — бод/ … Морфемно-орфографический словарь
БОД — база океанографических данных Источник: http://www.pacificinfo.ru/cdrom/4/HTM/description.htm БОД боеприпас объёмно детонирующего действия БОД борьба с отмыванием денег борьба с отмыванием преступных доходов часто в сочетании БОД/БФТ Источник:… … Словарь сокращений и аббревиатур
Бод — (baud) Единица скорости передачи информации по коммуникационной линии. При пользовании нормальным компьютером бод эквивалентен количеству битов (bits) в секунду. Таким образом, 300 бодовая линия связи посылает 300 битов информации в секунду.… … Словарь бизнес-терминов
бод — единица скорости телеграфирования. Определяется как одна элементарная посылка тока за 1 с. Названа по имени Ж. Бодо. * * * БОД БОД, единица скорости телеграфирования. Определяется как одна элементарная посылка тока за 1 с. Названа по имени Ж.… … Энциклопедический словарь
БОД — Бод единица измерения символьной скорости БОД Библиографическое описание документов БОД Безусловный основной доход … Википедия
БОД — БОД, единица измерения скорости передачи информации цифровым коммуникационным устройством или системой. Один бод равен 1 БИТ в секунду. Хотя термин до сих пор широко употребляется, скорость современных устройств часто выражают в килобитах в… … Научно-технический энциклопедический словарь
бод — бод, а; р. мн. ов, счётн.ф. бод (единица скорости телеграфирования) … Русское словесное ударение
бод — бод, а, род. п. мн. ч. ов, счетн. ф. Бод … Русский орфографический словарь
бод — а, м. Baudot. По имени фр. изобретателя Ж. М. Э. Бодо ( J. M. E. Baudot ). Единица скорости передачи двоичной информации последовательным кодом; 1 бод =1 бит. Относится к внесистемным единицам измерения. 1995. Машиностр. См. также Бодо … Исторический словарь галлицизмов русского языка
Как перестать бояться и полюбить 1-wire
Мне очень нравится протокол 1-wire своей простотой и удобством для применения в системах «умный дом». Недавно я писал программную эмуляцию одной микросхемы и погрузился во внутренности этого протокола. Чтобы накопленные знания могли принести пользу не только мне, я решил написать данную статью. Но в статье я хочу рассказать не про абстрактные диаграммы сигналов и кодирование данных — перепечаток такого материала есть достаточно, а хочу рассказать про более практические вещи. А именно: рассмотрю проверенные лично схемы адаптеров, собранные из простых и доступных деталей, и расскажу, как из Linux получить доступ к устройствам 1-wire. Попутно расскажу про сам протокол, будет и пример низкоуровневой работы, и пример доступа из JavaScript, а также рекомендации владельцам Raspberry Pi. Эта статья в первую очередь для тех, кто хочет разобраться с протоколом практически с нуля, чтобы начать его использовать в своих проектах. Возможно те, кто уже хорошо знаком с протоколом, также найдут что-то новое для себя.
Протокол 1-wire является проводным протоколом (в отличие от беспроводного), для кого-то это преимущество, а для кого-то — недостаток. Сеть 1-wire состоит из шины, к которой подключаются устройства 1-wire. На шине может присутствовать множество «подчиненных» устройств и только один «мастер». Подчиненные устройства могут общаться только с мастером и только по его запросу. Шина 1-wire состоит только из одной линии «данных» (отсюда и название — «однопроводный»), но для работы также необходима линия «земля», а для питания устройств еще и линия «питания». При небольшом количестве подчиненных и их небольшом энергопотреблении возможно также так называемое «паразитное» питание от линии данных. Таким образом, для подключения устройства по 1-wire Вам понадобится 3 (или 2) провода и мастер сети. Мастером сети может быть, например, микроконтроллер или ПК + адаптер 1-wire.
Физический уровень
Как же по одной линии происходит взаимодействие с множеством устройств? На физическом уровне линия устроена по принципу «монтажного И», это значит, что линия будет в состоянии логической «1» (уровень около 5V), если все устройства на линии перевели ее в состояние логической «1», а в состоянии логического «0» (около 0V), если хотя бы одно из устройств перевело ее в состояение логического «0». На практике это реализовывается подключением линии через резистор (называется «резистором подтяжки») к напряжению питания, а каждое из устройств может только замыкать линию с землей при помощи встроенного транзистора. Такой тип выхода устройств называется «открытый коллектор» или «открытый сток», англ. «open-drain». Резистор подтяжки обычно расположен в мастере сети (адаптере).
Очевидно, что при паразитном питании ток поступает через резистор подтяжки, и чем больше ток потребления устройств, тем ниже будет проседать напряжение линии. Стандартом регламентировано напряжение лиии 4.5-5.5V, хотя многие устройства и могут работать при значительно более низких напряжениях, но не все. Для снижения проседания напряжения можно уменьшить сопротивление резистора подтяжки, но согласно стандарту, сопротивление не должно быть менее 500 Ом. На практике сопротивление резистора подтяжки можно взять 1кОм, если будет использоваться паразитное питание, и, например, 4.7кОм, если питание будет по отдельной линии.
GPIO адаптер
Простейший адаптер 1-wire можно построить с помощью GPIO:
По такой схеме устроен «адаптер» при использовании GPIO микроконтроллера, работающего от напряжения 5V, соответсвенно на его портах допустимо напряжение до 5V. Но на портах Raspberry Pi допустимо напряжение до 3.3V, поэтому резистор подтяжки можно подключать только к 3.3V. Такой адаптер будет работать с некоторыми устройствами, но, как уже говорилось, не все устройства могут работать с пониженным напряжением. Эту проблему легко решить с помощью двунаправленого преобразователя логических уровней:
Диод между истоком и стоком на схемах иногда не обозначают, но он всегда есть в реальных транзисторах.
Схема адаптера с использованием GPIO для Raspberry Pi будет выглядеть следующим образом:

В этой схеме убран резистор подтяжки, подключенный к истоку, с этим «хаком» схема продолжит работать. Т.к. напряжение на GPIO (и на истоке) станет меньше чем 3.3V (напряжение на затворе) на величину напряжения затвор-исток, при которой открывается транзистор. Напряжения на GPIO будет достаточно, чтобы GPIO его воспринимал как логическую «1».
Канальный уровень
Для понимания принципа работы следующего типа адаптера, разберемся, как работает мастер 1-wire на канальном уровне. В 1-wire есть всего четыре примитива канального уровня: отправка ресет, чтение присутствия, отправка бита 0, отправка бита 1 и она же по совместительству чтение бита. Для понимания принципа будет достаточно рассмотреть только два последних: отправка бита 0 реализуется путем установки на линии логического «0» в течение 60-120мкс, отправка бита 1 — путем установки «0» в течение около 8мкс, чтение бита — путем последующего чтения состояния линии, если линия вернулась в «1», значит подчиненное устройство передало бит 1, если задержалась в «0» не менее, чем на 15мкс — значит подчиненное таким способом передало бит 0.
Пассивный адаптер
Следующий типа адаптера построен на использовании UART. Если по UART на скорости 115200 BAUD передать байт FFh, то на TX появится логический «0» только во время передачи стартового бита, это около 8мкс, подчиненные устройства это воспримут как отправку бита 1, а если передать байт 00h — появится логический «0» примерно на 78мкс, подчиненные устройства это воспримут как отправку бита 0. А что если TX соединить с RX? Мы будем получать из UART ровно то, что передали: передали FFh — получили FFh. А если эту линию принудительно задержать в логическом «0» чуть дольше, то получим уже не FFh, а, например, FEh, FCh, F8h, F0h и т.д. Таким простым способом реализуется чтение бита. Схема адаптера, построенного на использовании UART, он еще называется «пассивным» адаптером, будет такой:
По такой схеме также часто строится «адаптер» для микроконтроллера, имеющего аппаратный UART. В схеме необходимо использовать только диод Шоттки, т.к. важно малое падение напряжение на диоде. Диод в этой схеме — это «хак» для преобразования выхода «пуш-пулл» (англ. push-pull) в подобие выхода «открытый коллектор». В выходе пуш-пулл к выходу коммутируется транзисторами либо земля, либо напряжение питания, а в выходе открытый коллектор коммутируется только земля, а для «обозначения» логической «1», выход переводится в высокоимпедансное состояние, в этом состоянии выход можно подтянуть резистором к любому напряжению и он беспрепятственно приобретает это напряжение.
Как мы помним, в Raspberry Pi на всех портах допустимо напряжение до 3.3V, поэтому нужен вот такой «пассивный» адаптер для UART 3.3V:
В этой схеме также необходимо использовать только диод Шоттки.
Аппаратные адаптеры
Существует еще и третий тип адаптеров — аппаратные, это микросхемы-конвертеры в 1-wire, выпускаются они для трех протоколов: USB, UART, i2c. У них есть преимущества по сравнению с предыдущими типами, например, в «пассивном» адаптере используется прием/передача целого байта для приема/передачи одного бита, а в аппаратном на этом получаем выигрыш в 8 раз (на самом деле аппаратно реализованы и другие функции: ресет, алгоритм поиска), кроме скорости это и упрощение, и сокращение кода, что очень актуально для микроконтроллеров.
Но главное преимущество аппаратных адаптеров это «активная» подтяжка. Разберемся с этим подробнее, для наглядности рассмотрим случай с паразитным питанием. При кратковременном нахождении линии в логическом «0», устройства питаются от своих встроенных конденсаторов, разряжая их, а при возвращении линии в логическую «1», конденсаторы начинают заряжаться, потребляя повышенный ток от линии. Как мы помним, ток идет через резистор подтяжки, имеем RC-цепь с переходным процессом с постоянной времени t=R*C, что проявляется в медленном нарастании напряжения на линии. Очевидным выходом в этой ситуации является кратковременное уменьшение сопротивления резистора подтяжки для сокращения постоянной времени переходного процесса. Эта техника и называется активной подтяжкой, реализовывается путем коммутации линии с напряжением питания на несколько микросекунд (вспоминаем тип выхода пуш-пулл). Это очень помогает на длинных или не очень качественных линиях, т.к. сами проводники также имеют сопротивление.
Конверторы из USB и i2c мне не доводилось использовать, а вот схему с применением микросхемы-конвертера из UART (DS2480B) я приведу, но позже и в чуть более продвинутом исполнении.
Гальваническая развязка
В предыдущих рассмотренных схемах линии земля, питание и данные прямо или косвенно соединяли внутренние схемы всех устройств. Такой вариант подойдет, если устройства будут под Вашим контролем и в безопасной среде, скажем в пределах квартиры или дома. Но если, например, датчик, работающий по 1-wire необходимо установить на крышу (метеостанция), то необходимо задуматься о защите. В данном случае речь идет о защите внутренних схем дорогостоящего оборудования от повышенного напряжения или статических разрядов. Защитить ПК или Raspberry Pi можно, отвязав его гальванически от всех линий 1-wire.
Развязывать необходимо две вещи: питание (и вместе с ним землю) и сигналы. Питание адаптера можно обеспечить от отдельного БП или использовав DC-DC преобразователь с гальванической развязкой (например B0505S). Сигналы можно развязать с помощью оптронов, это пара светодиод-фототранзистор в закрытом общем корпусе. Оптрон позволяет передавать сигнал только в одном направлении, а линия 1-wire является двунаправленной и, к сожалению, нет простых схем сделать двунаправленную гальваническую развязку. Это же касается GPIO, USB и i2c. А вот в UART обе линии RX и TX являются однонаправленными, поэтому получится сделать адаптер как пассивный, так и на аппаратном 1-wire-UART конвертере. Необходимо учесть, что в пассивном адаптере используется скорость UART 115200 BAUD, а аппаратный производит обмен данными на скорости 9600 BAUD. При выборе оптронов необходимо обращать внимание на параметры tON, tOFF, они должны быть существенно меньше 1/BAUD.
К сожалению у меня не нашлось быстрых оптронов, а PC817C, которые были в наличии, уверенно работали только до 19200 BAUD. Примерно таким образом я бы реализовал пассивный адаптер с гальванической развязкой, но, в отличие от остальных схем, эту схему я не проверял:
Полевой транзистор в этой схеме использован для создания большого входного сопротивления «приемной» части. Бонусом гальванической развязки является то, что схема одинаково будет работать и при напряжении UART 5V, и при 3.3V.
И, как было обещано, схема адаптера с применением 1-wire-UART конвертера (микросхема DS2480B) с гальванической развязкой:
Это самый совершенный из всех перечисленных адаптеров.
Приведу также свой вариант его реализации на макетной плате:
Две перемычки используются для подачи GND и +5V на DC-DC в случае UART 5V, а при подключении к UART 3.3V одна убирается и контакт подключается к +5V, второй перемычкой землю также можно сделать отдельной от земли UART.
Эмуляторы адаптеров
За неимением микросхемы DS2480B можно воспользоваться ее программной эмуляцией на любом микроконтроллере AVR, который имеет аппаратный UART. Такой МК установлен практически во всех Arduino. Здесь приведу схему, как из популярного программатора USBasp на микроконтроллере ATmega8A сделать 1-wire адаптер:
Для прошивки Вам, естественно, понадобится второй программатор. Код эмулятора и готовую прошивку можно скачать отсюда, код взят из проекта tinyowd, в эмуляторе не реализована активная подтяжка и некоторые функции.
Сетевой уровень
На сетевом уровне мастер при общении с подчиненными устройствами уже может оперировать байтами. Как мы помним, на канальном уровне при отправке бита 1 происходит и одновременное чтение, и в ответ можно получить бит 0. Таким образом при отправке байта, на его основе формируется байт ответа, в котором некоторые биты могут быть обнулены.
Все подчиненные устройства «слышат» мастера одновременно, но отвечать должно только одно. Для этого после начальной процедуры «отправка ресет, чтение присутствия» осуществляется процедура «адресации подчиненного», после которой весь последующий обмен данными осуществляется только с выбранным подчиненным, а все остальные устройства эти данные игнорируют до следующего цикла «отправки ресет».
Существует всего четыре команды сетевого уровня, которые понимают все без исключения подчиненные: CCh (SKIPROM), 33h (READROM), 55h (MATCHROM), F0h (SEARCHROM). Но есть и некоторые другие, например, ECh (ALARM), A5h (RESUME) и Overdrive-варианты предыдущих команд, которые понимают не все устройства. На самом деле две первые команды адресуют не одно а все устройства, первая (SKIPROM) используется для широковещательной рассылки команд, например «запустить на всех устройствах измерение температуры», а сама температура будет прочитана позже по отдельности с каждого устройства. Вторая (READROM) используется только когда известно, что устройство на шине может быть только одно. Но для проверки на сетевом уровне есть еще контрольная сумма адреса, так что, если ответят несколько устройств, контрольная сумма это позволит выявить.
Адреса 1-wire, их еще называют идентификаторами, имеются только у подчиненных устройств. Адреса имеют длину 8 байт, из которых независимые только 7, а восьмой байт содержит контрольную сумму этих семи байтов адреса. Адреса всех устройств уникальны, они прошиваются при изготовлении и изменить их уже нельзя. Первый байт адреса всегда одинаков для одного типа микросхем, т.е. по нему можно однозначно определить название микросхемы. Этот байт носит название «адрес семейства».
После процедуры «адресации подчиненного» последующий обмен данными уже относится к сеансовому и более высоким уровням модели ISO OSI и может отличаться для разных семейств устройств.
Низкоуровневая работа
Продемонстрирую, насколько просто происходит работа с DS2480B. Для этого в одном терминале из командной строки bash запускаем:
Эта команда будет читать из UART и выводить на экран в шестнадцатеричном формате каждый прочитанный байт. В другом терминале будем отправлять байты в UART.
Первым делом отпрявляем Break для сброса DS2480B, для этого снижаем скорость UART ниже 9600 BAUD и предаем 00h, DS2480B при чтении в стоп-бите обнаружит логический «0», воспримет это как команду сброса и приведет свое состояние в исходное (окажется в режиме команд):
После чего возвращаем скорость на 9600 BAUD:
Отправляем любую команду (в данном случае это команды DS2480B) для калибровки скорости DS2480B, на которую DS2480B никак не отреагирует, например, безобидную команду чтения параметра конфигурации 01h:
Отправляем команду C1h, которая генерирует «отправку ресет» на шине 1-wire, в ответ получим CDh если на 1-wire последовал импульс «присутствия», или EDh если «присутствия» не последовало (ответ наблюдаем в другом терминале):
Переключаем DS2480B в режим данных, в ответ ничего не получаем:
В режиме данных все байты, которые передаются в UART транслируются конвертером побитно в 1-wire и при передаче битов 1 автоматически происходит чтение бита, которое может обнулять биты в исходном байте. Модифицированный таким образом байт конвертер отправляет обратно в UART. Отправляем команду 33h, теперь это уже команда READROM сетевого уровня протокола 1-wire, в ответ получим 33h без изменений:
В ответ на READROM устройство (для простоты подключаем на шину только одно устройство) отправит свой ID, для этого ему необходимо послать 64 единичных бита (идентификаторы состоят из 8 байт), которые в ответе будут модифицированы:
Вот что будет в другом терминале после выполнения всех вышеперечисленых команд:
Идентификатор подчиненного устройства здесь будет 288df444020000a6, где 28 — адрес семейства (датчики температуры DS18B20), a6 — контрольная сумма адреса, проверять ее должны мы, а не DS2480B.
Естественно, в Linux так никто не работает с 1-wire. Но при программировании микроконтроллеров или драйверов, все происходит именно подобным образом.
Высокоуровневая работа
В ОС Linux есть два подхода к высокоуровневой работе с устройствами 1-wire:
Драйверы ядра
Драйверы ядра делятся на драйверы для адаптеров и драйверы для подчиненных устройств. Драйверы адаптеров создают уровень абстракции W1, объединяя шины 1-wire от всех доступных адаптеров. Далее есть два варианта использования уровня абстракции W1: использование его в приложениях, например, в owfs как еще один вид «адаптера», или использование поверх него драйверов подчиненных устройств (тоже в ядре).
Для работы с 1-wire с помощью драйверов ядра достаточно загрузить драйвер адаптера. Например, для DS2490 (это аппаратный 1-wire-USB конвертер):
Для DS2482 (это аппаратный 1-wire-i2c конвертер) предварительно необходимо загрузить драйвер для конкретного i2c контроллера и затем сообщить ему адрес адаптера на шине i2c:
В случае Raspberry Pi в файле /boot/config.txt добавить строку, или можно даже несколько:
Тогда при загрузке ядра модуль w1-gpio загрузится автоматически. К сожалению, в ядре (на момент написания статьи это linux-rpi-5.4.y) драйверы для DS2480B и пассивного адаптера не реализованы.
Несмотря на простоту этого способа, я его не рекомендую по причине того, что драйверы все еще сырые, для некоторых устройств реализован не весь функционал, а для многих устройств драйверов вообще нет.
Для установки owfs необходимо выполнить аналоги следующих команд для своего дистрибутива:
Или скомпилировать из исходных кодов отсюда: github.com/owfs/owfs/releases
Следующим шагом необходимо добавить адаптеры в файл конфигурации. Пример файла конфигурации /etc/owfs.conf :
Как можно заметить, контрольная сумма адреса не указывается, owserver сам ее вычисляет. К owserver также можно обращаться и с другого хоста:
Естественно, для этого в /etc/owfs.conf должно быть:
Следует предостеречь, что в owserver нет никаких разграничений прав доступа, поэтому любой, кто может подключиться к порту owserver может как читать, так отправлять команды и записывать на подчиненные устройства.
Доступ из JavaScript
Полезные советы
Если необходимо организовать несколько 1-wire шин, то потребуется несколько UART интерфейсов. Для этого можно восопользоваться несколькими USB-UART конвертерами. А в Raspberry Pi 4 можно активировать до пяти аппаратных UART, для этого в /boot/config.txt нужно добавить:
Напомню, что так же, как и в случае с GPIO, если мы используем встроенный UART на Raspberry Pi, необходимо применение преобразователя логических уровней или гальванической развязки, т.к. все GPIO на Raspberry Pi работают с напряжением до 3.3V.
Сравнение с ModBus
Для понимания, какое положение занимает 1-wire в сравнении с другими подобными протоколами для автоматизации, я провел сравнение с популярным протоколом ModBus. ModBus также использует модель мастер-подчиненные и в связке с RS485 также может работать используя всего два провода.
Как можно заметить, 1-wire более медленный, не такой гибкий и не такой помехозащищенный, что не дает ему права называться «промышленным». Но его характеристик более чем достаточно для домашней автоматизации в системах «умный дом». А используемые напряжения и простота «адаптера» для микроконтроллера делают его идеальным для разработки собственных устройств на МК.
Выводы
Протокол 1-wire на самом деле является очень легким в освоении. Я надеюсь, что статья поможет пролить свет на многие ранее не понятные моменты, которые могли быть препятствием на пути к использованию данного протокола.
Для знакомства с протоколом владельцам Raspberry Pi я рекомендую начать со сборки адаптера на GPIO. В файле /boot/config.txt добавить:
Установить owfs и записать в /etc/owfs.conf всего три строки:
Владельцам ПК или ноутбука рекомендую приобрести USB-UART конвертер (он Вам еще не раз пригодится, они бывают на микросхемах FT232, PL2303, CP210X и др. — подойдет любой) и собрать пассивный адаптер. Установить owfs и записать в /etc/owfs.conf тоже всего три строки:
И в том и в другом случае после перезагрузки выполнить:
Следующим шагом рекомендую сборку адаптера на DS2480B с гальванической развязкой.
Приведу несколько полезных 1-wire подчиненных устройств, которые стоит попробовать:










