Шина I2C представляет собой последовательную шину данных для связи внутренних компонентов устройств. Разработана фирмой Phillips в 1980-х годах.
Шина SMBus основана на шине I2C и широко применяется в современных компьютерах. Основное отличие от оригинальной I2C — ограничение минимальной рабочей частоты за счет введения таймаутов операций передачи данных.
I2C для своей работы использует две двунаправленные линии передачи данных, которые подтянуты к напряжению питания и управляются схемой открытого коллектора или открытого стока.
SDA — последовательная линия данных;
SCL — последовательная линия тактирования.
Обе линии нагружены резисторами, стандартное напряжение на шине +5В или +3,3В. Однако, оно может быть и другим.
Адресация осуществляется в 7 или 10-битном адресном пространстве, на одну шину возможно подключение до 112 или 1008 устройств соответственно. Основной режим работы — на скорости 100 кБит/с или в высокоскоростном режиме 400 кБит/с.
Версия протокола 2.0, выпущенная в 1998 году предусматривает возможность работы на скоростях до 3,4 МБит/с.

Пример схемотехники
Не буду рассматривать алгоритм работы шины, т.к. подобной информации очень много в сети, в том числе на русском языке. Предлагаю ознакомиться со статьей в русской Wiki.
Приведу пример библиотеки на языке C, реализующей программную работу по протоколу I2C. Код совершенно не привязан ни к каким конкретным микроконтроллерам (более того, вообще к микроконтроллерам как таковым) и может быть использован где угодно. Достаточно откорректировать строки, осветственные за управление линиями SDA и SCL. Код снабжен комментариями.
Читать далее »