neste artigo, vamos aprender sobre o que o protocolo de comunicação I2C é, o seu hardware, como são transferidos os dados e configurações diferentes em que opera.
contorno
Introdução à comunicação I2C
comunicação I2C é a forma curta para circuitos inter-integrados., É um protocolo de comunicação desenvolvido pela Philips Semiconductors para a transferência de dados entre um processador central e múltiplos ICs na mesma placa de circuito usando apenas dois fios comuns.
Devido à sua simplicidade, é amplamente adotado para a comunicação entre microcontroladores e sensores, monitores, IoT dispositivos, Eeprom, etc.este é um tipo de Protocolo de comunicação serial síncrono. Significa que os bits de dados são transferidos um a um em intervalos regulares de tempo definidos por uma linha de clock de referência.,
Características
A seguir estão algumas das funcionalidades mais importantes do protocolo de comunicação I2C:
- Apenas duas linhas de ônibus (fios) são necessárias para controlar qualquer dispositivo/IC em I2C rede
- Não há necessidade de acordo prévio sobre a taxa de transferência de dados, como na UART de comunicação. Assim, a velocidade de transferência de dados pode ser ajustada sempre que necessário, o mecanismo simples para a validação de dados transferidos
- utiliza um sistema de endereçamento de 7 bits para atingir um dispositivo específico/IC no barramento I2C
- redes I2C são fáceis de escalar., Novos dispositivos podem simplesmente ser conectados às duas linhas comuns de barramento I2C
Hardware
o barramento físico I2C
barramento I2C (fios de Interface) consiste de apenas dois fios e são nomeados como linha de relógio Serial (SCL) e linha de dados Serial (SDA). Os dados a serem transferidos são enviados através do fio SDA e são sincronizados com o sinal de clock do SCL. Todos os dispositivos / ICs na rede I2C estão conectados às mesmas linhas SCL e SDA como mostrado abaixo:
ambas as linhas de barramento I2C (SDA, SCL) são operadas como drivers de drenagem aberta., Isso significa que qualquer dispositivo / IC na rede I2C pode dirigir SDA e SCL baixo, mas eles não podem dirigi-los alto. Assim, um resistor pull up é usado para cada linha de ônibus, para mantê-los Altos (em Voltagem positiva) por padrão.
a razão para usar um sistema de drenagem aberta é que não haverá chances de curto-circuito, o que pode acontecer quando um dispositivo tenta puxar a linha alta e algum outro dispositivo tenta puxar a linha baixa.os dispositivos conectados ao barramento I2C são categorizados como mestres ou escravos., Em qualquer momento do tempo, apenas um único mestre permanece ativo no ônibus I2C. Ele controla a linha de clock SCL e decide que operação deve ser feita na linha de dados SDA.todos os dispositivos que respondem às instruções deste dispositivo mestre são escravos. Para diferenciar entre vários dispositivos escravos conectados ao mesmo barramento I2C, cada dispositivo escravo é fisicamente atribuído um endereço permanente de 7 bits.
Quando um dispositivo mestre quer transferir dados de ou para um dispositivo escravo, ele especifica este endereço de dispositivo escravo particular na linha SDA e, em seguida, prossegue com a transferência., Assim, efetivamente a comunicação ocorre entre o dispositivo mestre e um dispositivo escravo em particular.
Todos os outros dispositivos escravos não respondem a menos que o seu endereço seja especificado pelo dispositivo principal na linha SDA.
Data Transfer Protocol
The following protocol (set of rules) is followed by master device and slave devices for the transfer of data between them.
os dados são transferidos entre o dispositivo principal e os dispositivos escravos através de uma única linha de dados SDA, através de sequências padronizadas de 0’s e 1’s (bits)., Cada sequência de 0’s e 1’s é denominado como uma transação e os dados em cada transação é estruturado como abaixo:
Iniciar Condição
Sempre que um dispositivo mestre/IC decide iniciar uma transação, ele muda o SDA linha de alta tensão, nível a um baixo nível de tensão antes de SCL parâmetros da linha de alta para baixa.
Uma vez que uma condição inicial é enviada pelo dispositivo mestre, todos os dispositivos escravos ficam ativos, mesmo se eles estão em Modo de latência, e esperar pelos bits de endereço.,
Bloco de endereços
compreende 7 bits e são preenchidos com o endereço do dispositivo escravo para/do qual o dispositivo principal necessita de enviar/receber dados. Todos os dispositivos escravos no bus I2C comparam estes bits de endereço com o seu endereço.
Bit de leitura/escrita
Este bit especifica a direção da transferência de dados. Se o dispositivo principal / IC necessitar de enviar dados para um dispositivo escravo, este bit é definido como “0”. Se o master IC precisa receber dados do dispositivo escravo, ele é definido como “1”.,
ACK/NACK Bit
fica para Reconheceu/Não-Reconhecido bits. Se o endereço físico de qualquer dispositivo escravo coincide com o endereço transmitido pelo dispositivo mestre, o valor deste bit é configurado para ” 0 ” pelo dispositivo escravo. Caso contrário, permanece na lógica ‘1’ (padrão).
Bloco de dados
compreende 8 bits e eles são definidos pelo remetente, com os bits de dados que ele precisa para transferir para o receptor., Este bloco é seguido por um bit ACK/NACK e é definido para ‘0’ pelo receptor se ele recebe dados com sucesso. Caso contrário, fica na lógica ‘1’.esta combinação de bloco de dados seguida de bit ACK/NACK é repetida até que os dados sejam completamente transferidos.
condição de paragem
após os blocos de dados necessários serem transferidos através da linha SDA, o dispositivo principal muda a linha SDA do nível de baixa tensão para o nível de alta tensão antes que a linha SCL mude de alta para baixa.,
nota: a lógica ‘0’ ou a configuração de um bit para ‘0’ é equivalente à aplicação de baixa tensão na linha SDA e vice-versa.como funciona praticamente A comunicação I2C?
uma comunicação/transação I2C é iniciada por um dispositivo mestre para enviar dados para um dispositivo escravo ou para receber dados dele. Vamos aprender sobre o trabalho de ambos os cenários em detalhe.,
Enviar Dados para um Dispositivo Slave
O seguinte sequência de operações executadas quando um dispositivo mestre tenta enviar dados para um determinado dispositivo escravo através de I2C bus:
- O dispositivo mestre envia a condição de início
- O dispositivo mestre envia o 7 bits de endereço que corresponde ao dispositivo escravo a ser alvo
- O dispositivo mestre define a Leitura/Gravação de bits a ‘0’, o que significa uma gravação
- Agora, dois cenários são possíveis:
- Se nenhum dispositivo escravo corresponde com o endereço enviado pelo dispositivo mestre, o próximo ACK/NACK bit permanece em ‘1’ (padrão)., Isto indica ao dispositivo mestre que a identificação do dispositivo escravo não foi bem sucedida. O relógio mestre irá terminar a transacção actual através do envio de uma condição de Parada ou uma nova condição de Início
- Se um dispositivo escravo existe com o mesmo endereço especificado pelo dispositivo mestre, o dispositivo escravo define o ACK/NACK bit a ‘0’, que sinaliza o mestre de dispositivo de um dispositivo escravo é eficazmente
- Se um dispositivo escravo é alvo com êxito, o dispositivo mestre envia agora 8 bits de dados, que só é considerado e recebido pelo alvo dispositivo escravo., o dispositivo que controla cada um deles:
Leitura de Dados de um Dispositivo Slave
A sequência de operações permanecem os mesmos como no cenário anterior, exceto para o seguinte:
- O dispositivo mestre define a Leitura/Gravação de bits a ‘1’ em vez de ‘0’, que sinaliza o alvo dispositivo escravo que o dispositivo mestre está esperando dados
- 8 bits correspondente ao bloco de dados enviados pelo dispositivo escravo e o ACK/NACK bit é definido pelo dispositivo mestre
- uma Vez que os dados necessários são recebidos pelo dispositivo mestre, ele envia um NACK pouco., Em seguida, o dispositivo slave pára de enviar dados e libera a linha sda
Se o dispositivo mestre para ler dados de localização interna específica de um dispositivo slave, ele primeiro envia os dados de localização para o dispositivo slave usando os passos no cenário anterior. Ele então inicia o processo de leitura de dados com uma condição de início repetida.,
A figura abaixo representa o total de bits de dados enviados na linha SDA e o dispositivo que controla cada um deles:
Conceito de relógio de alongamento
Vamos dizer que o dispositivo mestre iniciado uma transação e enviado bits de endereço de um determinado dispositivo escravo seguido por uma Leitura pouco de ‘1’. O dispositivo escravo específico precisa enviar um bit ACK, imediatamente seguido de dados.
mas se o dispositivo escravo precisar de algum tempo para obter e enviar dados para o dispositivo mestre, durante esta lacuna, o dispositivo mestre vai pensar que o dispositivo escravo está enviando alguns dados.,
para evitar isso, o dispositivo slave mantém a linha de clock SCL baixa até estar pronto para transferir bits de dados. Ao fazer isso, o dispositivo escravo sinaliza o dispositivo mestre para esperar por bits de dados até que a linha de relógio é liberado.é tudo para este artigo. Dê uma olhada nos projetos abaixo para ter uma idéia de como a comunicação I2C é praticamente implementada, entre microcontroladores/Arduinos e diferentes sensores:
RFID baseado no sistema de estacionamento de automóveis
interfaceando Arduino com uma unidade de processamento de Movimento interfaceando Arduino com relógio em tempo Real