Почему I2C работает на 100 кГц, но не на 400 кГц?
Обновлено Редакция GAW
Скорость I²C ограничивает не только тактовая частота, но и форма фронта. Линию прижимает к нулю транзистор — это быстро, а поднимает подтягивающий резистор, заряжая ёмкость проводов и входов. По спецификации NXP UM10204 этот подъём должен укладываться в 1000 нс на 100 кГц и в 300 нс на 400 кГц.
Какой резистор нужен
Наибольшее сопротивление подтяжки по формуле TI SLVA689:
Наш расчёт для разных ёмкостей линии:
| Ёмкость линии Cb | Rp max на 100 кГц | Rp max на 400 кГц |
|---|---|---|
| 50 пФ | 23,6 кОм | 7,1 кОм |
| 100 пФ | 11,8 кОм | 3,5 кОм |
| 200 пФ | 5,9 кОм | 1,8 кОм |
| 400 пФ | 2,95 кОм | 0,89 кОм |
Типичные 10 кОм проходят на 100 кГц при ёмкости до 100 пФ, но на 400 кГц уже при 50 пФ фронт выходит за предел.
Где тупик
Снизу резистор ограничен током 3 мА при уровне нуля 0,4 В: при питании 5 В это 1,53 кОм, при 3,3 В — 0,97 кОм. Арифметически, по нашему расчёту, резистор на 400 кГц проходит до 231 пФ при 5 В и до 366 пФ при 3,3 В. Но спецификация NXP (UM10204, разд. 5.1) для Fast-mode разрешает обычный резистор только при ёмкости линии до 200 пФ; при 200–400 пФ подтяжкой должен быть источник тока (не больше 3 мА) или переключаемая резисторная схема. Поэтому выше 200 пФ на 400 кГц снижают скорость, укорачивают провода, делят шину или ставят активную подтяжку.
Оценка минимума по 3 мА осторожная: для полной нагрузки на 400 кГц UM10204 требует от выходов 6 мА при уровне нуля 0,6 В, но рассчитывать на это можно только у устройств, которые такой ток гарантируют.
Как проверить
Измерьте фронт осциллографом между уровнями 30 и 70 % от питания: если он длиннее 300 нс, уменьшайте резистор. Номинал под вашу ёмкость и напряжение подберёт калькулятор подтяжки I2C. Откуда берётся ёмкость, объясняет термин «ёмкость шины», как меряют фронт — «время нарастания», а режимы скорости описаны на странице I2C.
Похожие вопросы
Можно ли просто поставить подтяжку 1 кОм на любую шину I2C?
Не на любую. Выход устройства по спецификации должен прижимать линию к 0,4 В при токе 3 мА. При 5 В это требует резистора не меньше 1,53 кОм, при 3,3 В — не меньше 0,97 кОм (наш расчёт по формуле TI). С меньшим резистором нуль может не опуститься до допустимого уровня.
Почему на 400 кГц не работает длинный провод, а на 100 кГц работает?
Длинный провод добавляет ёмкость, а время нарастания пропорционально ёмкости. Предел фронта на 400 кГц втрое с лишним жёстче, поэтому допустимая ёмкость при том же резисторе тоже втрое меньше.
Влияет ли скорость на число устройств на шине?
Предел ёмкости 400 пФ одинаков для 100 и 400 кГц. Но в Fast-mode обычный резистор UM10204 допускает только до 200 пФ, а при 200–400 пФ нужен источник тока или переключаемая подтяжка. Поэтому на 400 кГц при большой ёмкости часто проще снизить скорость или разделить шину.
Источники
- NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 1 October 2021 — разд. 5.1 — в Fast-mode подтяжка резистором допустима при ёмкости линии до 200 пФ, при 200–400 пФ — источник тока до 3 мА или переключаемая резисторная схема; табл. 11 — fSCL до 100 кГц (Standard-mode) и до 400 кГц (Fast-mode); время нарастания tr SDA и SCL не больше 1000 нс и 300 нс соответственно; ёмкость каждой линии Cb не больше 400 пФ в обоих режимах; примечание 4 к табл. 10 — для полной нагрузки на 400 кГц нужен IOL 6 мА при VOL 0,6 В
- Texas Instruments. I2C Bus Pullup Resistor Calculation (SLVA689A, February 2015, rev. October 2026) — ур. 5 — tr = 0,8473 · Rp · Cb (уровни 30 и 70 %); Rp(max) = tr / (0,8473 · Cb); Rp(min) = (VCC − VOL) / IOL при VOL = 0,4 В и IOL = 3 мА
Нашли ошибку?