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

Почему I2C работает на 100 кГц, но не на 400 кГц?

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

Скорость I²C ограничивает не только тактовая частота, но и форма фронта. Линию прижимает к нулю транзистор — это быстро, а поднимает подтягивающий резистор, заряжая ёмкость проводов и входов. По спецификации NXP UM10204 этот подъём должен укладываться в 1000 нс на 100 кГц и в 300 нс на 400 кГц.

Какой резистор нужен

Наибольшее сопротивление подтяжки по формуле TI SLVA689:

Rp max=tr0,8473⋅CbR_{p\,max} = \frac{t_r}{0{,}8473 \cdot C_b}

Наш расчёт для разных ёмкостей линии:

Ёмкость линии CbRp 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 кГц при большой ёмкости часто проще снизить скорость или разделить шину.

Источники

  1. 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 В
  2. 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 мА

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