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

Фильтр выбросов на входах I²C (spike suppression)

Шина I²C медленная и с открытым стоком, и на её фронтах легко появляются короткие выбросы от звона и наводок. Чтобы такой выброс не приняли за лишний такт или START, входы I²C начиная с Fast-mode обязаны его отфильтровать. Разбираем требование спецификации и реализацию в микроконтроллерах.

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

Фильтр выбросов I²C (spike suppression) — входной фильтр на линиях SDA и SCL, который не пропускает в логику короткие импульсы. Спецификация I²C (NXP UM10204) задаёт параметр tSP — длительность выбросов, которые входной фильтр обязан подавлять: до 50 нс для Fast-mode и Fast-mode Plus и до 10 нс для Hs-mode.

Зачем

На шине с открытым стоком фронт формирует резистор подтяжки, и он медленный. Пока напряжение проходит пороговую зону, любой выброс от звона, наводки или перекрёстной помехи может пересечь порог несколько раз. Для I²C последствия серьёзные: лишний импульс на SCL сдвигает счёт битов, а импульс на SDA при высоком SCL выглядит как START или STOP. Поэтому UM10204 требует от входов Fast-mode подавления выбросов вместе с триггером Шмитта.

Требования спецификации

РежимtSP, подавляемые выбросы
Standard-modeне нормируется
Fast-mode, Fast-mode Plusдо 50 нс
Hs-modeдо 10 нс

О режимах шины — в статье скоростные режимы I²C.

В микроконтроллерах

  • ATmega328P. При включении модуля TWI выводы PC4 и PC5 получают входной фильтр, подавляющий выбросы короче 50 нс, и выход с открытым стоком и ограничением скорости нарастания.
  • STM32F42x/F43x. Аналоговый фильтр включён по умолчанию (бит ANOFF его отключает), плюс программируемый цифровой фильтр DNF[3:0] длиной до 15 периодов PCLK1. Цифровой фильтр увеличивает время удержания данных, поэтому его длину ограничивает таблица RM0090. Расчёт таймингов I²C для STM32 — в калькуляторе таймингов I²C STM32.

Фильтр не заменяет нормальной разводки: при слишком медленном фронте или сильных помехах выбросы длиннее 50 нс он пропустит. Подробнее о шине — в статье I²C.

Частые вопросы

Зачем шине I²C фильтр выбросов?

Шина работает на открытом стоке с медленным фронтом через резистор подтяжки, и на линиях бывают короткие выбросы от звона, перекрёстных помех и коммутации соседних цепей. Без фильтра выброс на SCL может стать лишним тактом, а на SDA при высоком SCL — ложным START или STOP. UM10204 требует, чтобы входы Fast-mode подавляли импульсы короче 50 нс.

Есть ли такой фильтр у Standard-mode устройств?

Спецификация его не требует: в таблице 10 UM10204 параметр tSP задан для Fast-mode и Fast-mode Plus (0–50 нс), а для Standard-mode не нормирован. На практике многие микроконтроллеры имеют фильтр на входах I²C в любом режиме — например, ATmega328P включает его при TWEN = 1.

Как настроить цифровой фильтр I²C в STM32F4?

У STM32F42x и F43x — полем DNF[3:0] регистра I2C_FLTR, только при выключенном I2C. Фильтр подавляет импульсы до DNF периодов PCLK1, но увеличивает время удержания SDA на (DNF + 1) периодов PCLK1, поэтому RM0090 ограничивает DNF таблицей 123: например, при PCLK1 от 20 до 30 МГц — не больше 7 в Fast-mode.

Источники

  1. NXP. UM10204 I2C-bus specification and user manual, Rev. 7.0 (1 October 2021) — разд. 1: встроенная фильтрация отбрасывает выбросы на линии данных для сохранения целостности данных; разд. 5.1: входы Fast-mode имеют подавление выбросов и триггер Шмитта на SDA и SCL; табл. 10: tSP — длительность выбросов, которые должен подавлять входной фильтр, 0–50 нс для Fast-mode и Fast-mode Plus; сноска 8: входные фильтры SDA и SCL подавляют помехи короче 50 нс; табл. 12: для Hs-mode tSP 0–10 нс; для UFm входные фильтры подавляют выбросы короче 10 нс
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet, DS40002061B (2020) — разд. 14.3.2, альтернативные функции порта C: при TWEN = 1 выводы PC4 (SDA) и PC5 (SCL) отключаются от порта; на входе включается фильтр, подавляющий выбросы короче 50 нс, выход — открытый сток с ограничением скорости нарастания
  3. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 (June 2024) — разд. 27.3.5 (только STM32F42xxx/43xxx): в Fm стандарт требует подавлять выбросы до 50 нс; аналоговый фильтр на SDA и SCL включён по умолчанию, отключается битом ANOFF в I2C_FLTR; цифровой фильтр DNF[3:0] подавляет выбросы длиной до DNF · TPCLK1 и увеличивает время удержания SDA на (DNF + 1) · TPCLK; табл. 123: максимальное DNF для соблюдения tHD;DAT, например при 20 < FPCLK1 ≤ 30 МГц — 15 для Sm и 7 для Fm; DNF настраивают только при выключенном I2C; цифровой фильтр добавляется к аналоговому

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