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

Как проверить осциллографом, на какой скорости работает I2C?

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

Частоту I2C задаёт ведущий через линию SCL, и осциллограф показывает её напрямую. Но для работы шины важна не только частота: режимы скорости отличаются требованиями к длительности уровней и к фронтам, которые зависят от подтяжек и ёмкости шины.

Что мерить и с чем сравнивать

Подключите щуп к SCL, землю — к земле рядом с устройством, и запустите обмен. Мерьте по уровням 30 и 70 % от напряжения питания шины, как задаёт UM10204.

Параметр (табл. 11 UM10204)Standard-modeFast-modeFast-mode Plus
Частота SCL, не больше100 кГц400 кГц1 МГц
Низкий уровень SCL, не меньше4,7 мкс1,3 мкс0,5 мкс
Высокий уровень SCL, не меньше4,0 мкс0,6 мкс0,26 мкс
Время нарастания, не больше1000 нс300 нс120 нс
Ёмкость линии, не больше400 пФ400 пФ550 пФ

Период — величина, обратная частоте: 10 мкс на 100 кГц, 2,5 мкс на 400 кГц.

Если фронт слишком медленный

Время нарастания задают подтяжка и ёмкость шины. TI в SLVA689A даёт формулу для интервала от 30 до 70 %:

tr=0,8473⋅Rp⋅Cbt_r = 0{,}8473 \cdot R_p \cdot C_b

Наш расчёт для подтяжки 4,7 кОм и ёмкости 200 пФ: tr ≈ 0,8 мкс. Для 100 кГц это в пределах 1000 нс, а для 400 кГц — почти втрое больше допустимых 300 нс. TI для того же случая получает наибольшую подтяжку 1,77 кОм. Подходящий резистор для своей шины считает калькулятор подтягивающих резисторов, а почему длинный провод работает на 100 кГц и не работает на 400, разобрано в отдельном ответе.

Если низкий уровень SCL то и дело удлиняется, это не обязательно ошибка — так ведомое устройство растягивает такт, пока готовит данные.

Похожие вопросы

Почему частота SCL получается ниже заданной в программе?

Ведомое устройство может растягивать такт — держать SCL в нуле, пока не готово. Тогда низкий уровень длиннее, и период больше. Если же частота ниже из-за растянутых фронтов, это сигнал уменьшить подтяжку или ёмкость шины.

Каким щупом смотреть I2C?

Щупом 10X с коротким проводом земли, присоединённым к земле рядом с измеряемым устройством. У щупа 1X ёмкость больше, и он сам затягивает фронты на шине с подтяжками в несколько килоом.

Можно ли так же проверить SDA?

Да, но частоту задаёт только SCL: SDA меняется, когда SCL в нуле, и должна быть стабильной, пока SCL в единице. На SDA смотрят то же время нарастания и уровень нуля — он должен опускаться ниже 0,3 питания.

Источники

  1. NXP. UM10204 I2C-bus specification and user manual (Rev. 7.0, 1 October 2021) — табл. 11 — характеристики линий SDA и SCL для Standard-mode, Fast-mode и Fast-mode Plus: fSCL до 100, 400 и 1000 кГц; tLOW не меньше 4,7, 1,3 и 0,5 мкс; tHIGH не меньше 4,0, 0,6 и 0,26 мкс; tr не больше 1000, 300 и 120 нс; Cb не больше 400, 400 и 550 пФ; уровни отсчёта VIH(min) = 0,7 VDD и VIL(max) = 0,3 VDD; разд. 3.1.7–3.1.9 — синхронизация и растягивание такта
  2. Texas Instruments. SLVA689A: I2C Bus Pullup Resistor Calculation (revised October 2026) — ур. 5 — время нарастания от 0,3 до 0,7 VCC: tr = 0,8473 · Rp · Cb; ур. 1 — Rp(min) = (VCC − VOL(max)) / IOL; ур. 7 — пример: для Fast-mode при Cb = 200 пФ Rp(max) = 1,77 кОм; ур. 8 — Rp(min) при 3,3 В около 967 Ом
  3. Tektronix. ABCs of Probes, Primer, 60W-6053-15 (03/2021) — таблица щупов: P6101B 1X — 1 МОм, 100 пФ; P6109B 10X — 10 МОм, 13 пФ; длинный провод земли щупа добавляет индуктивность и звон на фронтах

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