Ёмкость шины I²C
Линия I²C с открытым стоком поднимается в единицу только через подтягивающий резистор, и ему приходится заряжать всю ёмкость линии. Чем она больше, тем медленнее фронт, — поэтому спецификация ограничивает ёмкость шины.
Обновлено Редакция GAW
Ёмкость шины (bus capacitance, обозначение Cb) — суммарная ёмкость одной линии I²C относительно земли: проводов или дорожек, разъёмов и входов всех подключённых устройств. Так её определяет NXP в UM10204, разд. 7.1. Линии SDA и SCL считаются по отдельности.
Почему ёмкость ограничена
Выход устройства I²C — открытый сток: к нулю линию тянет транзистор, а в единицу её поднимает только подтягивающий резистор, заряжая ёмкость линии. Фронт получается экспоненциальным, и его длительность между уровнями 0,3 и 0,7 VDD равна
Спецификация ограничивает время нарастания tr, поэтому чем больше ёмкость, тем меньше допустимое сопротивление подтяжки. А меньше определённого значения резистор взять нельзя: выход должен удерживать ноль, принимая ток подтяжки.
| Режим | Частота SCL | tr, не больше | Cb, не больше |
|---|---|---|---|
| Standard-mode | 100 кГц | 1000 нс | 400 пФ |
| Fast-mode | 400 кГц | 300 нс | 400 пФ |
| Fast-mode Plus | 1 МГц | 120 нс | 550 пФ |
Значения — из таблицы 11 UM10204. Каждый вывод устройства по таблице 10 добавляет до 10 пФ. Пример TI из SLVA689: в Fast-mode при 3,3 В и ёмкости 200 пФ подтяжка должна быть от 967 Ом до 1,77 кОм. Подобрать резистор под свою ёмкость поможет калькулятор подтяжки I²C.
Если ёмкость слишком велика
UM10204 предлагает понизить частоту SCL, перейти на устройства Fast-mode Plus с выходным током до 20 мА, разделить шину буфером на сегменты или ускорить фронт переключаемой подтяжкой.
Не путать с ёмкостью вывода Ci — это вклад одного устройства, — и с ёмкостью линии передачи на единицу длины, которую задают кабелю вместе с волновым сопротивлением.
Частые вопросы
Сколько устройств можно подключить к шине I²C?
Ограничивают адреса и ёмкость. По UM10204 каждый вывод добавляет до 10 пФ, а линия в Standard- и Fast-mode не должна превышать 400 пФ. Если бы ёмкость давали только выводы, хватило бы на 40 устройств (наш расчёт), но провода и дорожки занимают заметную часть бюджета.
Как измерить ёмкость шины I²C?
Осциллографом по фронту: время нарастания от 0,3 до 0,7 VDD равно 0,8473·Rp·Cb, отсюда Cb = tr / (0,8473·Rp). Например (наш расчёт), фронт 200 нс при подтяжке 2,2 кОм соответствует ёмкости около 107 пФ.
Что делать, если ёмкость шины больше 400 пФ?
NXP предлагает четыре пути: снизить частоту SCL, взять устройства с большим выходным током (Fast-mode Plus), разделить шину буфером или коммутатором на сегменты с меньшей ёмкостью либо ускорить фронт переключаемой подтяжкой.
Источники
- NXP Semiconductors. UM10204: I2C-bus specification and user manual (Rev. 7.0, 1 October 2021) — табл. 10: Ci — ёмкость вывода не больше 10 пФ; табл. 11: Cb — ёмкостная нагрузка каждой линии не больше 400 пФ в Standard- и Fast-mode и 550 пФ в Fast-mode Plus; tr — 1000, 300 и 120 нс; примечание: допустимая ёмкость может отличаться в зависимости от напряжения и частоты; разд. 7.1: ёмкость шины — суммарная ёмкость провода, соединений и выводов, она ограничивает Rp(max) через время нарастания, T = 0,8473·RC; разд. 7.2: при превышении — снижение частоты, выходы с большим током (Fast-mode Plus), буферы шины, переключаемая подтяжка
- Texas Instruments. I2C Bus Pullup Resistor Calculation (SLVA689A, February 2015, rev. October 2026) — разд. 2: наибольшее сопротивление подтяжки ограничено ёмкостью шины Cb через время нарастания tr = 0,8473·Rp·Cb; разд. 4: пример Fast-mode, Cb = 200 пФ, 3,3 В — Rp от 966,7 Ом до 1,77 кОм
Нашли ошибку?