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

Почему логический анализатор показывает ложные импульсы на I2C?

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

Линии I2C — открытый сток: в ноль их тянет транзистор быстро, а в единицу поднимает только подтягивающий резистор, заряжая ёмкость шины. Фронт получается экспоненциальным и медленным. У логического анализатора на входе цифровой буфер с двумя порогами: у Saleae Logic 8 ниже 0,6 В — ноль, выше 1,2 В — единица, а между ними поведение не определено. Если фронт идёт через эту зону долго, анализатор успевает сделать там несколько выборок, и шум даёт лишние переходы.

Сколько фронт находится в неопределённой зоне

Напряжение на линии растёт как U(t)=Uпит(1−e−t/RC)U(t) = U_\text{пит}\left(1 - e^{-t/RC}\right). Время прохода от 0,6 до 1,2 В при 3,3 В:

Δt=RC⋅ln⁡3,3−0,63,3−1,2≈0,251⋅RC\Delta t = RC \cdot \ln\frac{3{,}3 - 0{,}6}{3{,}3 - 1{,}2} \approx 0{,}251 \cdot RC
Подтяжка и ёмкостьRCВремя в зоне 0,6–1,2 ВВыборок при 25 Мвыб/с
10 кОм, 200 пФ2 мксоколо 500 нсоколо 12
4,7 кОм, 200 пФ0,94 мксоколо 240 нсоколо 6
2,2 кОм, 100 пФ0,22 мксоколо 55 нс1–2

(наш расчёт). Чем больше выборок попадает в неопределённую зону, тем вероятнее ложный импульс, и декодер I²C сбивается.

Что делать

  1. Включить фильтр глитчей в программе анализатора — так советует Saleae для медленных фронтов I²C.
  2. Проверить подтяжку. По UM10204 время нарастания не должно превышать 1000 нс на 100 кГц и 300 нс на 400 кГц. Подходящий резистор считает калькулятор подтяжки I2C, а что такое время нарастания, объясняет словарь.
  3. Не путать с реальной проблемой. Входы микросхем I²C имеют фильтр коротких выбросов, поэтому ложный импульс на анализаторе не всегда виден устройству. Если сомневаетесь, посмотрите фронт осциллографом.

Выбор частоты выборки и порогов описан в статье «Логический анализатор», сам протокол — в статье «I2C».

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

Какую длительность фильтра глитчей выбрать?

Меньше самого короткого настоящего импульса, но больше ложных. Для I2C на 100 кГц полупериод SCL — 5 мкс, а ложные переходы длятся доли микросекунды, так что фильтр в сотни наносекунд их убирает, не трогая данные.

Значит ли ложный импульс на анализаторе, что шина работает плохо?

Не обязательно: по UM10204 у входов устройств Fast-mode есть триггер Шмитта и подавление коротких выбросов, и они медленный фронт видят как один переход. Но если время нарастания больше нормы, шину нужно исправлять — это проверяют осциллографом.

Поможет ли выбрать порог 3,3 В вместо 1,8 В на Logic Pro?

Обычно да. У Logic Pro входы на компараторах с одним порогом, без широкой неопределённой зоны, как у Logic 8, а порог 1,65 В в середине размаха далеко и от шума у нуля, и от шума у питания. Крутизна RC-фронта при этом не больше — она наибольшая в начале фронта, — поэтому на очень медленных фронтах фильтр глитчей всё равно полезен.

Источники

  1. Saleae Support. Supported Voltages — у Logic 8 цифровые входы между 0,6 и 1,2 В ведут себя неопределённо; для медленных фронтов, например I2C с открытым стоком, включать программный фильтр глитчей; у Logic Pro — компараторы с порогами 0,6, 0,9 и 1,65 В, точность ±15 %; защита ±25 В
  2. Saleae. Logic 8, Technical Data Sheet (DOC_620-00011, V20260521) — цифровая выборка до 100 Мвыб/с на трёх каналах, 25 Мвыб/с на восьми; порог VIL 0,6 В, VIH 1,2 В; цифровые сигналы выбирать не менее чем в 4 раза чаще высшей частоты
  3. NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 1 October 2021 — табл. 11: время нарастания tr не больше 1000 нс в Standard-mode и 300 нс в Fast-mode, ёмкость шины до 400 пФ; разд. 5.1: у входов Fast-mode — подавление выбросов и триггер Шмитта; фронт линии с открытым стоком задаёт подтягивающий резистор и ёмкость шины

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