i2c: o que é, funcionamento, endereço, e módulo para usar no Arduino

i2c

O protocolo i2c é muito usado em projetos que envolvem Arduino, sendo um dos tipos de comunicação entre sistemas mais importantes.

Por meio desse protocolo, dispositivos diferentes em sua composição podem comunicar-se entre si, e isso acontece graças a um barramento compartilhado.

Ainda, esse protocolo inteligente é eficaz na transferência de dados — por isso é tão comum usar esse sistema em computadores, sensores, smartphones e, em alguns casos, em sistemas de escala industrial.

Para saber mais sobre a importância do i2c e seus usos, é importante ter algumas noções básicas e conceitos acerca desse sistema.

A equipe da Victor Vision, sua melhor parceira em projetos e displays, preparou um guia completo sobre o tema, além de apresentar, aqui nesse artigo, um módulo para usar no Arduino.

Acompanhe até o final e boa leitura!

O que é o i2c?

Antes de entendermos as principais aplicações desse protocolo, é preciso entender para que serve o i2c.

A sigla corresponde a Inter-Integrated Circuit, que nos leva a deduzir, pela sua denominação, que se trata de um circuito integrado.

Ele foi desenvolvido pela Phillips em 1982, e até hoje é utilizado para conectar dispositivos periféricos de baixa velocidade a respectivos controladores, garantindo comunicação de curta distância.

Com o i2c, é possível realizar a comunicação entre dispositivos a placas-mãe, circuitos de aquisição, e também gestão de dados.

Funcionamento do i2c: como usar?

i2c

Foto: Shutterstock

Um protocolo de comunicação desse tipo funciona com base na interação dos elementos presentes seguindo uma hierarquia denominada de “mestre/escravo”.

Seguindo esse raciocínio, um projeto com esse protocolo garante que vários dispositivos conectados “conversem” entre si, desde que um deles seja designado como “mestre”, enviando e requisitando as informações e dados que devem passar pelos “escravos”.

Início e 1° byte

Um fator importante sobre a comunicação i2c é que a sua constituição depende de 1 clock e um endereço de 7 bits na mesma linha SDA.

É por meio dessa composição que pode ser realizada uma transmissão de dados.

Inclusive, a transmissão só funciona de maneira decrescente, ou seja, do bit mais significativo, para o menos significativo.

  1. para a detecção do início de uma transmissão, a linha de dados SDA passa de nível alto para baixo, mas apenas quando a linha SCL (clock) estiver em nível alto;
  2. depois disso, a linha SCL oscila, conforme a frequência estipulada no dispositivo;
  3. ao mesmo tempo, a linha SDA envia cerca de 7 bits correspondentes ao endereço do dispositivo alvo, sempre um por vez — a cada intervalo que a linha SCL estiver em nível baixo;
  4. depois de rodados 7 bits, um bit é enviado para que se confirme se deve escrever ou ler um registrador do dispositivo em questão;
  5. após o primeiro byte, o escravo informa se recebeu, ou não, as informações destinadas, e isso acontece com a linha SDA em nível baixo;
  6. o mestre, nesse momento, deve deixar a linha SDA livre, para a circulação do bit conhecido como ACK, ou acknowledge;
  7. se o escravo não recebe os dados da forma correta, a linha fica em nível alto e recebe o nome de NACK, ou not acknowledge.

2° byte

Se a etapa anterior acontece com sucesso, o mestre do circuito envia o endereço do registrador que tem como objetivo a gravação ou leitura de dados.

Esse endereço em questão é formado por um byte, e deve ser enviado da forma como determinamos no passo a passo acima.

A partir disso, o processo do 1° byte se repete, com o escravo enviando o ACK correspondente.

Com sucesso obtido nessa etapa, o próximo passo pode ser de escrita ou de leitura — vamos determinar melhor esses passos logo abaixo.

Link para produtos/pbox

Escrita

Com o segundo ACK realizado com eficácia, o mestre envia o byte que possui os dados a serem gravados no registrador do sistema.

É importante lembrar que, se o registrador possuir mais de 1 byte de espaço, essa etapa e o ACK se repetem até que seja finalizado o envio completo.

Ainda, a penúltima informação enviada na linha escrita deve ser um ACK.

Quando a transmissão de dados chega ao fim, a linha SDA sobe de nível, enquanto a linha SCL fica em alta – isso é chamado de bit de parada.

Leitura

Para processos de leitura, logo após das etapas de 1° e 2° bytes, considerando o sucesso do segundo ACK, o mestre envia um novo bit de início; após isso, envia, também, o endereço do escravo e, assim, repete o processo da etapa 3 do 1° byte.

Quando finalizado o endereço do escravo, o bit de leitura deve ser enviado e, após ele, um ACK.

Com um resultado correto do último ACK enviado, o escravo, então, envia os dados gravados no seu registrador, seguido do mestre enviando o ACK.

Aqui, a penúltima informação a ser enviada deve ser um NACK vindo do mestre.

Por fim, quando o mestre já recebeu todos os dados para transmissão, ocorre um bit de parada.

O que é endereço de i2c?

Considerando a interação entre mestre e escravo, e para que esta ocorra da forma correta, o mestre precisa saber qual endereço ele deve contatar, garantindo que a comunicação seja eficaz.

Para isso, o endereço de cada integrante de um barramento na comunicação i2c deve ser único.

Outras propriedades e detalhes do i2c

Além das etapas presentes em cada byte, bem como os processos de escrita, leitura, e funcionamento pleno do endereço, confira abaixo outros detalhes importantes acerca de um sistema i2c:

Barramentos

É comum que barramentos que envolvam mais de dois mestres aconteçam, trazendo falhas na comunicação do sistema.

Isso porque, em um protocolo i2c, é possível que dois mestres transmitam dados simultaneamente — para tal, é preciso uma arbitragem que evita erros de comunicação.

Aqui, cada mestre deve ser apto a verificar o nível da linha SDA na qual está trabalhando, comparando com o nível cujo qual ele espera.

Alongamento do clock

Quando diferentes velocidades de processamento coincidem, e um escravo fique defasado de seu mestre predeterminado, ou mesmo não esteja apto para receber ou enviar dados, ocorre o processo de alongamento de clock.

Aqui, o escravo mantém a sua linha SCL em nível baixo depois de receber ou enviar seu byte — assim, seu mestre de comunicação deve esperar que a linha SCL volte para o nível alto.

Módulo i2c: o que é i2c no Arduino? (Protejo e primeiros passos)

Pessoa segurando i2c

Foto: Shutterstock

O módulo adaptador i2c para display LCD é o mais indicado para ser utilizado em projetos que envolvem LCD, além de marcar presença em projetos com Arduino, como citamos no início do artigo.

Outros microcontroladores também podem se beneficiar desse sistema: o único requisito é que se tenha suporte ao protocolo i2c.

Confira o vídeo abaixo:

Aqui no blog da Victor Vision você confere os melhores e mais completos conteúdos para seus projetos; confira!

Conclusão

No artigo de hoje, você conferiu o que é um módulo i2c e como usar esse sistema de comunicação em projetos diversos, inclusive usando Arduino.

Esse protocolo foi desenvolvido para que seja possível a comunicação entre periféricos com apenas duas linhas de dados: Serial Data e Serial Clock.

Continue ligado em nosso blog para mais conteúdos completos!

3 comentários em “i2c: o que é, funcionamento, endereço, e módulo para usar no Arduino”

  1. Olá. Bastante esclarecedor. Entendo que cada módulo vem com seu endereço já programado de fábrica em seu hardware. Mas quando for necessário utilizar mais de um módulo idêntico? É preciso alterar o endereço deles? Como? Obrigado.

    1. Obrigado pela mensagem! Há módulos que possuem parte do endereço selecionável por pinos externos. Outros ainda podem ter alteração via software, e você programa novo endereço. Na maior parte dos casos, endereços iguais vão precisar de barramentos diferentes, ou multiplexados.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *