Este é o primeiro artigo escrito exclusivamente para o Portal Embarcados.com.br e trata da comunicação entre dispositivos utilizando o barramento I2C.
Histórico
O barramento I2C foi desenvolvido em meados da década de 80
pela Philips Semiconductors. (Hoje a parte de semicondutores chama-se NXP). O
propósito original era interconectar a CPU a chips controladores de
televisores.
Periféricos em sistemas embarcados são freqüentemente
conectados à CPU através de memória mapeada em I/O. Isso significa conectar os
periféricos diretamente ao barramento de dados e endereços da CPU, utilizar
decodificadores de endereço e uma lógica de controle para gerenciar tudo isso.
Conforme a quantidade de periféricos aumenta, as conexões se
tornam mais complexas, os custos de projeto e desenvolvimento aumentam, além de
tornar a placa suscetível a interferências eletromagnéticas (EMI).
Uma pesquisa realizada pela Philips para resolver este
problema resultou na criação de um barramento de 2 fios chamado barramento I2C,
acrônimo para Inter IC Bus (numa tradução livre para o português, barramento
para interconexão de circuitos integrados).
Hoje o barramento I2C é utilizado em inúmeros e diferentes
tipos de chips no mercado: memórias, displays, conversores A/D e D/A, sensores
de temperatura, etc. É aceito no mercado como um padrão de-fato, e adotado não
só pela Philips (NXP), mas também por outras empresas de semicondutores, como
Texas Instruments, Atmel, Maxim, Intel, ST Microeletronics, etc.
Barramento I2C
O barramento I2C consiste fisicamente de 2 fios e uma
conexão com o terra. Os dois fios são bi-direcionais, SDA (Serial Data Line) e
SCL (Serial Clock Line).
Os dispositivos são interconectados através destes dois
sinais, formando um barramento I2C. No barramento I2C, um dispositivo pode
atuar como MASTER ou SLAVE, sendo que o MASTER é o responsável pela
comunicação.
Segue abaixo uma figura que demonstra os dispositivos em uma
rede I2C:
Todos os dispositivos conectados em uma rede I2C possuem um
endereço, e podem atuar como transmissores ou receptores, independente se este
dispositivo for uma CPU, uma memória ou um display LCD.
Todos os dispositivos na rede podem atuar como MASTER ou
SLAVE. O dispositivo que iniciar a transmissão é considerado o dispositivo
MASTER.
Protocolo I2C
De forma geral, o protocolo de comunicação I2C tem o
seguinte fluxo:
1.
O dispositivo MASTER envia para o barramento I2C um sinal de
START. Com isso o dispositivo MASTER tem a atenção de todos os dispositivos
conectados ao barramento.
2.
O dispositivo MASTER envia um registro com o endereço que
deseja acessar, e se deseja realizar leitura ou escrita. Todos os dispositivos
irão receber este registro. Aqueles que não possuírem o endereço requisitado
irão ignorar o registro e aguardar o sinal de STOP. Aquele que tiver o endereço
enviado irá responder com um sinal de ACKNOWLEDGE.
3.
Assim que o MASTER receber o sinal de ACKNOWLEDGE, poderá
iniciar a transmissão ou requisição dos dados. Assim que a transferência
terminar, o MASTER irá enviar um sinal de STOP, que liberará o barramento para
que outros dispositivos possam então atuar como MASTER.
O sinal de START consiste em levar a linha SDA para o nível
baixo, e depois a linha SCL para o nível baixo, conforme a figura abaixo:
Após o envio do sinal de START, o primeiro byte transmitido
representa o registro de endereçamento do dispositivo que se deseja acessar no
barramento I2C. Os sete primeiros bits representam o endereço, e o último bit
indica se deseja realizar leitura ou escrita, conforme figura abaixo:
Os sinais de clock são gerados pelos dispositivos MASTER
através da linha SCL. Os dados são válidos apenas quando o sinal SCL estiver em
nível alto.
O sinal de STOP consiste em levar a linha SCL para o nível
alto, e depois a linha SDA para o nível alto, conforme a figura abaixo:

Para acessar outros documentos ou artigos sobre I2C, acesse a seção de links e downloads do Portal Embarcados.com.br.
Um abraço!
Sergio Prado.
Administrador do Portal Embarcados.com.br
|