O I2C é um protocolo de comunicação serial que foi criado por Philips Semiconductors em meados de 1996 com o objetivo de compor uma interface simples e padronizada.
Trata-se de uma comunicação bidirecional, com taxas de transferência de até 400kbits/s.
Este protocolo permite a comunicação entre diversos componentes através de um barramento de duas vias: uma de clock e outra de dados, tratando-se então de uma comunicação síncrona.
A princípio o protocolo I2C foi utilizado para interligar periféricos em uma mesma placa de circuito impresso, mas com o passar do tempo passou a ser utilizada para interligar outros periféricos, mesmo que eles não estivessem na mesma placa de circuito impresso.
Neste tipo de protocolo o dispositivo que irá começar a comunicação é o Mestre, podendo existir vários Escravos.
No protocolo I2C temos:
1-A linha de dados é chamada de SDA;
2-A linha de clock é chamada de SCL;
3-As linhas de SCL e SDA são colocadas em nível alto através de resistores de pull-up, por isso para deixá-las em nível alto bastá deixá-las em aberto;
4-O pino de dados (SDA) deve apenas ser colocado em nível baixo pelo Mestre e pelo Escravo, se for utilizar microcontrolador prefira as portas que sejam open-collector;
5- A velocidade de transferência depende exclusivamente da velocidade do clock (SCL);
6-A leitura de SDA deve ser feita enquanto a linha de SCL estiver em nível alto;
7-As mudanças de estado em SDA devem ser feitas enquanto a linha SCL estiver em nível baixo;
8-Somente o Mestre atua sobre a linha de SCL;
DIAGRAMA DE SINAIS DO BARRAMENTO I2C
A rotina para adquirir/enviar dados do/para o Escravo é a seguinte:
1°-O Mestre deve enviar o sinal de Start. Para tanto basta deixar a linha de clock (SCL) em nível alto (aberta) enquanto a linha de dados (SDA) passa de alto para baixo;
2°-O Mestre envia 7 bits de endereçamento. O Mestre é quem envia o SCL. Lembre-se: sempre que for enviar um bit mude o estado de SDA enquanto a linha de SCL estiver baixa, mude o estado de SCL para alto, espere, mude SCL para baixo, e daí já pode enviar o novo bit;
3°-O Mestre deve enviar um bit para o Escravo saber se vai ser feita um leitura ou uma escrita o bit R/W. 0 para leitura, e 1 para escrita;
4°-O Escravo envia o bit de ACK (aknowledge), para a confirmação de recebimento do byte. Para isso o Mestre deve deixar a linha de SDA em aberto. Se ACK=0 o byte foi recebido, se ACK=1 o byte não foi recebido;
5°-O Mestre (ou Escravo) irá enviar a sequencia de 8bits de dados, o qual será seguido de um sinal de ACK proveniente do Escravo (ou Mestre). Cada bit enviado (recebido) é feito sincronizado com o sinal de SCL vindo do Mestre;
6°-O Mestre envia o sinal de Stop. Para tanto basta deixar o SCL em nível alto enquanto o SDA passa de baixo para alto;
O protocolo I2C é muito utilizado em sensores, sintonizadores, e memórias EEPROM seriais. Veja que a comunicação entre Mestre e Escravo é muito simples e pode ser feita em qualquer velocidade até 400kbits/s (a velocidade é determinada pelo dispositivo Mestre que comanda a linha de SCL).
Uma boa idéia para quem utiliza microcontroladores é fazer a transmissão e a recepção do sinal no laço Main (principal) e o restante do programa na interrupção por estouro de timer, uma vez que o I2C não exige uma velocidade fixa de trasmissão.
Esta postagem é apenas uma ajuda para quem nunca utilizou o protocolo I2C. Se você for utilizar algum dipositivo I2C é imprescindível que você leia o datasheet, pois lá você encontrará informações detalhadas sobre seu componente.
Espero que este tutorial seja de grande ajuda aos projetistas que desejam utilizar dispositivos I2C em seus projetos.
Que Deus abençõe,
Leandro da Silva
Referências
[1] LEÃO, Humberto Caio Camilo. SISTEMA DE MEDIÇÃO, CORTE E RELIGAMENTO DE ENERGIA, UTILIZANDO O PADRÃO IEEE 1451. Belém, 2006;
[2]http://www.best-microcontroller-projects.com/i2c-tutorial.html. AN I2C TUTORIAL.
*nao entendi nada hehehe
ResponderExcluirsaaudades bjs
parabéns continue, estudando leandro!