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

I2C. Как не встрять

В любом устройстве с I2C-линиями, стоит мастеру первым делом дергать SCL ножкой 9 раз

План по восстановлению I2C шины в случае припадка

  • Случай 1. Не страшно. Мы и есть слейв девайс
  • Случай 2. Страшнее. Любая помеха на линии или непредвиденный мультимастерринг может привести к “зависшему” состоянию любого девайса

В случае 1

  1. Нужно понять, что именно мы зависли и нужно предпринять действие
  2. Сбросить клок, питание с периферии I2C, переконфигурировать ножки
  3. Запустить процесс конфигурации заново
  4. Очистить объект, связанный с данным I2C
  5. После успешного старта – запускаем прерывания

В случае 2

Есть 2 варианта

Мягкий стул со спинкой Роден Blitz 2 шт/Мягкое кресло для  кабинета/прикроватный M-City 40971013 купить в интернет-магазине Wildberries


Страшнее, но решаемо

  1. Зависла линия SDA
    1. Сбросить клок, питание с периферии I2C, переконфигурировать ножки
    2. Отправить на линию 9 тиков клока. В один из тиков, зависшая периферия должна отпустить ножку данных.
      3.1 ПРОВЕРИТЬ, что линия SDA отпущена. Если линия застряла и не восстановилась – нужен POR
    3. Запустить процесс конфигурации заново
    4. После успешного старта – запускаем прерывания

Страшно, вырубай

  • Зависла линия SCL
    Если у нас нет физических линий nRESET к I2C девайсам – эта ситуация выглядит самой плохой. Единственное возможное решение – POR всего устройства.

Литература

Даташит на PCAL. Раздел 9.5

Про I2C-шину от TI

Comment

programel