Подтяжка линии I2C

Опубликовано 09.10.2014 12:57:00


Устройства работающие по интерфейсу I2C встречаются довольно часто, это различные часы реального времени, модули дисплеев, расширители потов и т.п.

Для работы шины I2C необходима внешняя подтяжка к питанию, состоящая из двух резисторов. От номинала резисторов зависит работы шины. Наиболее распространенные номиналы подтяжек в Arduino тематике это 10k и 4.7k. Резисторы номиналом 1.5k являются крайним значением для подтяжки линии I2C.

Для примера будем рассматривать номинал в 4.7k

 

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

Однако, что будет происходить при подключении сразу нескольких таких  устройств к шине I2C? 

 

 

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

Сопротивление параллельных резисторов рассчитывается по формуле 1/(1/R1+1/R2), либо т.к. у нас 2 резистора одинакового номинала, то можно просто R/2 = 4.7k/2 = 2.35k

 

При подключении трех устройств, мы упераемся в граничное допустимое значение R/3 = 4.7k/3 = 1.56k


 

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

 

А что делать если необходимо повесить большее количество модулей?

Варианта два:

Либо увеличивать номиналы резисторов подтяжки (логики и пользы в этом не очень много)

Либо оставить подтяжку только на одном устройстве (т.е. просто подтянуть шину к линии питания)

Правильное подключение


 

Как можно понять, оба варианта на стандартных модулях сделать не так просто. Либо обрезать дорожки, либо выпаивать резисторы. На новом поколении наших Z-плат мы уделили внимание данной проблеме. На всех платах использующих интерфейс I2C имеется, где позволяет место, стандартный 2.54мм джампер для отключения подтяжки,

 

либо джампер под пайку, расположенный в легкодоступном месте.


А как же комментарии?