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

Ёмкость шины I²C

Линия I²C с открытым стоком поднимается в единицу только через подтягивающий резистор, и ему приходится заряжать всю ёмкость линии. Чем она больше, тем медленнее фронт, — поэтому спецификация ограничивает ёмкость шины.

Обновлено Редакция GAW

Ёмкость шины (bus capacitance, обозначение Cb) — суммарная ёмкость одной линии I²C относительно земли: проводов или дорожек, разъёмов и входов всех подключённых устройств. Так её определяет NXP в UM10204, разд. 7.1. Линии SDA и SCL считаются по отдельности.

Почему ёмкость ограничена

Выход устройства I²C — открытый сток: к нулю линию тянет транзистор, а в единицу её поднимает только подтягивающий резистор, заряжая ёмкость линии. Фронт получается экспоненциальным, и его длительность между уровнями 0,3 и 0,7 VDD равна

tr=0,8473⋅Rp⋅Cb.t_r = 0{,}8473 \cdot R_p \cdot C_b.

Спецификация ограничивает время нарастания tr, поэтому чем больше ёмкость, тем меньше допустимое сопротивление подтяжки. А меньше определённого значения резистор взять нельзя: выход должен удерживать ноль, принимая ток подтяжки.

РежимЧастота SCLtr, не большеCb, не больше
Standard-mode100 кГц1000 нс400 пФ
Fast-mode400 кГц300 нс400 пФ
Fast-mode Plus1 МГц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), разделить шину буфером или коммутатором на сегменты с меньшей ёмкостью либо ускорить фронт переключаемой подтяжкой.

Источники

  1. 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), буферы шины, переключаемая подтяжка
  2. 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 кОм

Нашли ошибку?