Перейти к содержанию

Калькулятор 1-Wire: CRC, подтяжка, время обмена

Три расчёта для шины 1-Wire в одном инструменте: проверка ROM-кода по CRC-8 с разбором кода семейства и серийного номера, границы резистора подтяжки и допустимая ёмкость линии для DS18B20 при внешнем и паразитном питании, время типичных обменов на стандартной скорости и в overdrive.

Исходные данные

Расчёт

8 байт, например код из AN27: 02 1C B8 01 00 00 00 A2, или 7 байт без CRC

Результат

CRC первых 7 байт
A2h
совпадает с восьмым байтом — код верный
Код семейства
02hсемейство не из списка на странице 1-Wire
Серийный номер (48 бит)
00000001B81C
Полный код
02 1C B8 01 00 00 00 A2CRC всех 8 байт: 00h

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

Шина 1-Wire проста по схеме — одна линия данных с резистором подтяжки, — но ошибки в ней тонкие: неверно прочитанный ROM-код, слишком длинная линия для выбранного резистора, неучтённое время преобразования. Калькулятор собирает три расчёта, которые подробно разобраны на странице «Шина 1-Wire».

ROM-код и CRC

Каждое устройство 1-Wire имеет 64-битный ROM-код: младший байт — код семейства, затем 48 бит серийного номера, старший байт — CRC-8 с полиномом X⁸ + X⁵ + X⁴ + 1 (AN27). Код передаётся начиная с кода семейства, и в этом же порядке его нужно вводить. В CRC-калькуляторе этот алгоритм называется CRC-8/MAXIM-DOW: у него отражённые вход и выход и нулевое начальное значение.

Подтяжка и длина линии

Резистор подтяжки ограничен с двух сторон. Снизу — током: ведомое гарантирует ноль не выше 0,4 В при токе до 4 мА, поэтому R ≥ (Uпит − 0,4 В) / 4 мА. Сверху — временем подъёма: в слоте записи 1 ведущий держит ноль 6 мкс (AN126), а DS18B20 может прочитать линию через 15 мкс от спада, так что до порога единицы линия должна подняться за 9 мкс:

RC≤9 мкс−ln⁡(1−UIH/Uпит)RC \le \frac{9\ \text{мкс}}{-\ln\left(1 - U_\text{IH}/U_\text{пит}\right)}

Порог UIH — 2,2 В при внешнем питании и 3,0 В при паразитном. Полученная ёмкость пересчитывается в длину кабеля по 52 пФ/м (AN148) — это оценка по простой RC-модели без отражений в длинной линии. Если на линии несколько модулей со своими резисторами, они включены параллельно, и калькулятор учитывает это при проверке тока.

Время обмена

Длительности операций взяты из рекомендуемых задержек AN126: на стандартной скорости бит занимает 70 мкс, сброс с ожиданием присутствия — 960 мкс; в overdrive — 8,5–10 мкс и 121 мкс. Для записанных бит калькулятор берёт более долгую из записи 0 и записи 1, поэтому результат — оценка сверху. Поиск по AN187 на каждый из 64 бит кода тратит два чтения и одну запись.

Частые вопросы

Как проверить, что ROM-код DS18B20 прочитан правильно?

Посчитать CRC-8/MAXIM первых семи байт и сравнить с восьмым — или посчитать CRC всех восьми байт: у верного кода получается ноль (AN27). Байты нужно брать в порядке приёма, код семейства первым: у DS18B20 это 28h. Калькулятор подскажет, если код похож на записанный в обратном порядке.

Какой резистор подтяжки нужен для DS18B20?

Нижнюю границу задаёт ток нуля: (Uпит − 0,4 В) / 4 мА — 1,15 кОм при 5 В и 725 Ом при 3,3 В. Верхнюю — время подъёма линии: при 5 В и внешнем питании постоянная RC должна быть не больше 15,5 мкс. С резистором 4,7 кОм это до 3,3 нФ ёмкости линии, около 60 м витой пары; при паразитном питании — вдвое меньше по ёмкости.

Сколько длится чтение температуры с DS18B20?

Сам обмен короткий: чтение блокнота по адресу — сброс, 80 записанных и 72 прочитанных бита — занимает 11,6 мс на стандартной скорости. Основное время уходит на измерение: после команды 44h датчик считает до 750 мс при 12 битах и 93,75 мс при 9 битах.

Почему при нескольких модулях DS18B20 начинаются ошибки?

Часто из-за подтяжки: у каждого готового модуля свой резистор 4,7 кОм, и пять модулей дают 940 Ом. Ток нуля при 5 В вырастает до 4,9 мА — больше гарантированных 4 мА, и ноль на линии поднимается. Укажите в калькуляторе число резисторов — он покажет ток и подскажет, что лишние резисторы надо снять.

Источники

  1. Maxim Integrated. Application Note 27: Understanding and Using Cyclic Redundancy Checks with Maxim 1-Wire and iButton Products — полином X⁸ + X⁵ + X⁴ + 1 и пример: код 02h, 00000001B81Ch даёт CRC A2h (эталон тестов); CRC всех восьми байт равен нулю
  2. Maxim Integrated. Application Note 126: 1-Wire Communication Through Software — табл. 2 — задержки A–J для стандартной скорости и overdrive (эталон тестов: 70 мкс на бит, 960 мкс на сброс)
  3. Analog Devices (Maxim Integrated). DS18B20 Programmable Resolution 1-Wire Digital Thermometer, 19-7487, Rev 6, 7/19 — VOL 0,4 В при 4 мА, пороги единицы 2,2 и 3,0 В, ток 1,5 мА при измерении, время преобразования 93,75–750 мс, команды 33h, 44h, 55h, BEh, CCh, F0h
  4. Maxim Integrated. Tutorial 148: Guidelines for Reliable Long Line 1-Wire Networks — ёмкость кабеля категории 5e — около 52 пФ на метр
  5. Maxim Integrated. Application Note 187: 1-Wire Search Algorithm — на каждый бит кода при поиске — чтение бита, чтение дополнения и запись направления
  6. G. Cook. Catalogue of parametrised CRC algorithms: CRC-8/MAXIM-DOW — параметры алгоритма и контрольное значение A1h для строки «123456789» (эталон тестов)

Где пригодится

Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/one-wire/" title="Калькулятор 1-Wire: CRC, подтяжка, время обмена" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/one-wire/">Калькулятор 1-Wire: CRC, подтяжка, время обмена</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?