Шина I2C представляет собой последовательную шину данных для связи
внутренних компонентов устройств. Разработана фирмой Phillips в 1980-х
годах.

Шина SMBus основана на шине I2C и широко применяется в современных
компьютерах. Основное отличие от оригинальной I2C - ограничение
минимальной рабочей частоты за счет введения таймаутов операций передачи
данных.

I2C для своей работы использует две двунаправленные линии передачи
данных, которые подтянуты к напряжению питания и управляются схемой
открытого коллектора или открытого стока.

SDA - последовательная линия данных;

SCL - последовательная линия тактирования.

Обе линии нагружены резисторами, стандартное напряжение на шине +5В или
+3,3В. Однако, оно может быть и другим.

Адресация осуществляется в 7 или 10-битном адресном пространстве, на
одну шину возможно подключение до 112 или 1008 устройств соответственно.
Основной режим работы - на скорости 100 кБит/с или в высокоскоростном
режиме 400 кБит/с.

Версия протокола 2.0, выпущенная в 1998 году предусматривает возможность
работы на скоростях до 3,4 МБит/с.

Пример схемотехники

Не буду рассматривать алгоритм работы шины, т.к. подобной информации
очень много в сети, в том числе на русском языке. Предлагаю ознакомиться
со статьей в русской Wiki: http://ru.wikipedia.org/wiki/I²C

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

Скачать библиотеку:

https://yadi.sk/d/xLqKE3zE3KsBPd

https://yadi.sk/d/ZJCLuwqU3KsBRm