I2C bus é um barramento serial multi-master.

Os barramentos TWI e SMB são similares ao I2C introduzindo pequenas diferenças.

Na tabela estão as diferenças entre esses barramentos.

I2CTWISMBus (SMB)
SCL linexxx
SDA linexxx
Startxxx
Stopxxx
100kbitxxx
400kbitxx
3.4Mbitxx
arbitrationxxx
collison detectionxxx
7bit addressxx
broadcastxx
10bit addressxx
Packet error check (PEC)x
Timeout transferx
Alert linex
Suspend linex
Power up/downx

No I2C são especificados somente 4 condições de funcionamento entre Masters e Slaves.

1) O ‘master’ envia comandos (writes) para os ‘slaves’.

2) Os ‘slaves’ interpretam os comandos executando ações nos leds.

3) O ‘master envia requisições (requests) para os ‘slaves’.

4) Os ‘slaves’ enviam dados de volta ao ‘master’.

As linhas SDA e SCL precisam de pull-ups usando resistores de 1,8K até 47K.

Os resistores e tensões mais comuns são:

ResistorTensão
1,8k1,8V
2,2k3,3V
4,7k5V
10k12V

Quando o resistor do pull-up não está presente as linhas SDA e SCL são lidas como zero, o que significa que o barramento está ocupado. Se o master tentar fazer um ‘write’ ou ‘request’ vai ficar travado até que se coloquem os resistores de pull-up nas linhas SDA e SCL.

Referência de implementação de uma rede leds usando barramento I2C.




Esquemático de barramento I2C para Stellaris / Tiva
Pino PD_0 é SCL
Pino PD_1 é SDA
Tiva I2C master serial console

Código do ‘master’

Código dos ‘slaves’