Forum TecTonny Dicas de aparelhos resolvidos
Páginas: 1
Um pouco sobre I2C By: tectonny Date: 01 Fev 2008, 23:02

I2C-BUS

A maioria dos equipamentos atuais contém pelo menos uma unidade micro-controladora e um grupo de ICs, para armazenar, exibir e executar as funções dos circuitos analógicos e digitais. Existem, é claro, muitas maneiras de interfacear estes circuitos com a unidade micro-controladora, pórem, seria um grande beneficio para o projeto do equipamento e também para o processo de produção se este interface fosse simples e padronizado.

O I2C-bus desenvolvido pela PHILIPS, foi estruturado para atender estas exigencias. Os dados são transferidos em ambas as direções até a taxa de 100kbits/s. Esta transmissão requer apenas duas linhas seriais; uma para os dados e outra para o clock. Desta forma, poucos terminais do micro-controlador são requeridos, e a construção da PCB também pode ser simplificada. Além disso o I2C-bus é na verdade um MULTI-MASTER capaz de controlar varios circuitos a ele conectados

Com o intuito de evitar qualquer perda de informação contida nos dados seriais, o I2C-bus incorpora um endereço unificado para cada circuito integrado em específico, e um protocolo de barras executa um procedimento de decisão para definir as prioridades de controle. Quando um circuito integrado com clock rápido se comuninca com outro de clock lento, o protocolo sincroniza efetivamente o sistema definindo a fonte de clock.

O I2C-bus suporta um range relativamente grande de micro-controladores e periféricos fabricados em diversas tecnologias.

DEFINIÇÃO DA TERMINOLOGIA I2C-BUS

TRANSMISSOR : O IC que fornece os dados para a barra.

RECEPTOR : O IC que recebe os dados da barra.

MASTER : O IC que inicia e finaliza a transferência de dados e gera o sinal de clock.

SLAVE : O IC endereçado pelo MASTER.

DECISÃO : Procedimento utilizado para assegurar que nenhuma informação seja perdida ou alterada, quando mais de um MASTER tenta simultaneamente assumir o controle da barra.

SINCRONIZAÇÃO : Processo para sincronizar os sinais de clock de dois ou mais ICs.

CARACTERÍSTICAS

l Duas linhas de barras seriais, as quais consistem de uma linha de clock ( SCL ) e uma linha de dados ( SDA ).

l Transferência de dados bidirecional, ou seja, a mesma linha transmite e recebe dados.

l Barra MULTI-MASTER real, ou seja, mais de um IC capaz de controlar a barra, pode ser conectado a ela. Cada MASTER gera seu próprio clock.

l Cada IC compatível com o I2C-bus possui um endereço único ( 7-bits ) e pode operar como transmissor ou receptor ( MASTER ou SLAVE ).

l ICs compatíveis com I2C-bus podem atuar como MASTERs ou SLAVEs durante a transferência de dados.

l O procedimento de decisão previne a perda ou a alteração dos dados quando os MASTERs estão competindo pelo uso da barra.

l O primeiro byte de uma transferência contém 7 bits de endereço SLAVE. O LSB deste byte é um bit de direção.

l Cada byte transferido é reconhecido pelo SLAVE.

l A implementação de um interface SLAVE é muito simplificada.

l O protocolo é padronizado.

l Qualquer MASTER pode operar a barra, até a razão de 100kbits/s. Consequentemente os dados transferidos são assincronos e o clock é gerado pelo MASTER que está controlando a barra. Se mais de um MASTER tentar simultameamente obter o controle da barra, o sistema de clock será derivado do MASTER que já estava em atividade.

l O nível de entrada para o I2C-bus foi determinado visando proteger os circuitos integrados contra transientes de linha, por exemplo: um resistor de até 300 W pode ser utilizado para proteger o circuito contra picos de alta voltagem nas linhas de clock e dados, devido a possíveis faiscamentos no cinescópio.

O número máximo de ICs que podem ser conectados à barra, é limitado apenas pela máxima capacitância da barra que é de 400pF.

Um exemplo típico de configuração I2C-bus em televisores é dado na figura abaixo.

 

 

 

 

CARACTERÍSTICAS GERAIS

Ambas as linhas SDA e SCL são bidirecionais e estão conectadas à alimentação via resistor PULL-UP ( veja figura abaixo ). Quando a barra está livre, ambas as linhas permanecem em nível H. O estágio de saída do IC conectado à barra deve possuir um coletor aberto ou um dreno aberto, para executar a função AND.

 

 

TRANSFERÊNCIA DE BIT

Devido à grande variedade de tecnologias utilizadas nos circuitos integrados ( CMOS, NMOS, I2L ) que podem ser conectados ao I2C-bus, os níveis lógicos L e H não são fixos e dependem da associação com o nível de Vdd. Um pulso de clock é gerado para cada bit transferido.

VALIDADE DOS DADOS

Os dados da linha SDA devem permanecer estáveis durante o período H dos pulsos de clock. Os níveis lógicos da linha de dados devem mudar de H para L ou de L para H, somente quando o sinal de clock da linha SCL estiver em nível L, conforme mostra a figura abaixo.

 

 

 

 

CONDIÇÃO DE PARTIDA E PARADA

No processo de transmissão de dados do I2C-bus surge uma situação única, a qual é definida como condição de partida e parada ( ver figura ). Uma transição de H para L da linha SDA durante o tempo em que a linha SCL permanece em H é definida como condição de partida. Uma transição de L para H da linha SDA durante o período H da linha SCL, define uma condição de parada.

As condições de partida e parada são sempre geradas pelo MASTER. A barra é considerada como ocupada após a condição de partida, e livre um certo período de tempo após a condição de parada.

A detecção das condições de partida e parada pelos ICs conectados à barra é possível, se estes possuirem o interface necessário. Contudo alguns micro-controladores que não possuem tal interface, executam uma amostragem da linha SDA de no mínimo duas vezes por período de clock, para poderem identificar a transmissão.

 

 

TRANSFERÊNCIA DE DADOS

Cada byte contido na linha SDA é composto de oito bits. O número de bytes que pode ser transferido é ilimitado. Cada byte é acompanhado de um bit de reconhecimento. Se o IC receptor ( SLAVE ) não for capaz de receber um outro byte completo de dados até que alguma função seja executada, como por exemplo uma interrupção interna, o SLAVE deverá levar a linha de clock a nível L , forçando o MASTER a entrar em um modo de espera. Os dados serão lidos novamente, quando o SLAVE liberar a linha de clock.

 

 

 

 

RECONHECIMENTO

A transferência de dados com o reconhecimento é obrigatória. O reconhecimento é relacionado ao pulso de clock e é gerado pelo MASTER. O MASTER libera a linha SDA ( nível H ) durante a ocorrência dos pulsos de clock. O IC receptor ( SLAVE ) leva a linha SDA a nível L durante o período H do pulso de reconhecimento.

Usualmente, o SLAVE endereçado é obrigado a gerar um reconhecimento logo após cada byte ter sido recebido. Quando o SLAVE não reconhece um endereço ( por exemplo: impossibilidade de recepção, devido à execução de alguma função em tempo real ), o SLAVE deve deixar a linha de dados em nível H; desta forma, o MASTER gera então uma condição de parada com o intuito de abortar a transferência.

Se o SLAVE reconhecer o endereço, mas depois de algum tempo na transferência não receber mais nenhum byte de dados, o MASTER deverá novamente abortar a transferência. Esta condição é indicada pelo SLAVE, devido à não geração do reconhecimento logo após a recepção do primeiro byte de dados. O SLAVE deixa a linha de dados em nível H e o MASTER gera a condição de parada.

 

 

DECISÃO E GERAÇÃO DE CLOCK

Todos os MASTERs geram seu próprio clock na linha SCL para transferir uma mensagem no I2C-bus. Os dados são válidos apenas durante o período H dos pulsos de clock. É necessário portanto definir um clock para produzir um procedimento de decisão de bit a bit na linha SCL. O sincronismo do clock é obtido por meio de uma conexão AND entre os clocks de todos os ICs e a linha SCL. Isto significa que uma transição de H para L na linha SCL força o IC a iniciar uma contagem de seu período L de clock, estando o clock deste IC em L, a linha SCL permanecerá neste estado até que o IC passe o clock para H novamente. Contudo, a transição de L para H do clock deste IC, não causará mudança de estado na linha SCL se um outro clock de um outro IC ainda estiver no período L. A linha SCL será portanto mantida em L pelo IC cujo clock possuir o maior período L. Os ICs com o período L de clock menor que os outros, entram em um estado de espera H durante este tempo.

 

Quando todos os ICs envolvidos concluirem a contagem dos períodos L de seus respectivos clocks, a linha SCL será levada para H, e portanto liberada. Neste instante, não haverá mais diferenças entre os clocks gerados pelos ICs e o estado da linha SCL, e todos os ICs iniciarão a contagem do período H de seus clocks. O primeiro IC a completar a contagem deste período H levará a linha SCL para L, e todos os ICs terão seus clocks sincronizados.

Deste modo então, é gerado o sincronismo do clock na linha SCL, sendo que, o período L é determinado pelo IC com o clock de maior período L e o período H pelo IC com o clock de menor período H.

O procedimento de decisão acontece na linha SDA da seguinte forma: se um MASTER está transmitindo um nível H, enquanto outro está tansmitindo um nível L, o estágio de saída de dados deste MASTER será desativado, porque o nível da barra não corresponde ao seu próprio nível.

O procedimento de decisão continua por muitos bits. O primeiro estágio é a comparação dos bits de endereço; se os MASTERs estiverem cada um tentando endereçar o mesmo IC, o processo de decisão continuará com a comparação dos bits de dados. Devido ao fato dos endereços e as informações de dados serem utilizados como critério de desição no I2C-bus, nenhuma informação é perdida durante este processo.

Um MASTER que perdeu o controle da barra, pode gerar pulsos de clock até o final do byte no qual o controle foi perdido.

Se um MASTER perde o controle da barra durante o estágio de endereçamento, é possível que o MASTER vencedor esteja tentando endereçá-lo. O MASTER perdedor deve portanto ser chaveado imediatamente para o modo SLAVE.

A figura abaixo mostra o procedimento de decisão envolvendo dois MASTERs; é claro mais que dois MASTERs podem ser envolvidos ( dependendo de quantos MASTERs estejam conectados à barra ). No momento em que existe uma diferença entre o nível dos dados internos do MASTER que está gerando o DATA 1 e o nível atual da linha SDA, a saída de dados é desativada, o que significa que um nível H é então conectado à barra. Isto não afetará a transferência de dados iniciada pelo MASTER vencedor. Desde que o controle do I2C-bus seja decidido apenas pelos endereços e dados fornecidos pelos MASTERs que estão competindo pelo uso da barra, não há MASTER central, e também nenhuma ordem de prioridade na barra.

 

 

 

 

Além de ser utilizado no procedimento de decisão, o mecanismo de sincronização do clock pode ser utilizado para habilitar os receptores para uma transferência de dados mais rápida dos MASTERs para os SLAVEs, a nível de byte ou bit.

A nível de byte, um IC pode ser capaz de receber bytes de dados em uma razão relativamente rápida, mas necessita de mais tempo para armazenar o byte recebido ou preparar a transferência de outro byte. O SLAVE carrega a linha SCL com um nível L depois da recepção e reconhecimento, forçando o MASTER a entrar em um estado de espera até que o SLAVE esteja pronto para a transmissão do próximo byte.

A nível de bit, um IC tal qual um microcomputador sem o interface I2C-bus incorporado, deixaria o clock da barra lento, devido à extensão de cada período L do clock. Assim sendo, a velocidade de cada MASTER seria adaptada à razão de operação interna deste IC.

FORMATO

O formato dos dados está ilustrado na figura abaixo. Após a condição de partida, é fornecido um endereço de SLAVE. Este endereço estende-se ao longo de sete bits; o oitavo bit é um bit de direção ( W/R ): um nível L indica uma transmissão ( WRITE ) e um nível H indica uma requisição de dados ( READ ). A transferência de dados sempre termina na condição de parada, gerada pelo MASTER. Contudo, se um MASTER ainda desejar comunicar-se com a barra, ele pode gerar uma outra condição de partida e endereçar um outro SLAVE sem antes gerar uma de parada. Varias combinações de escrita/leitura são possíveis dentro de uma transferência.

 

 

Os formatos possíveis de transferência de dados são:

A ) Transmissão do MASTER para o SLAVE, sem alteração de direção.

 

 

 

 

 

B ) Transmissão do SLAVE para o MASTER logo após a leitura do primeiro byte.

 

 

 

 

No momento do primeiro reconhecimento, o MASTER passa a assumir o papel de receptor e o SLAVE o de transmissor. Este reconhecimento é ainda gerado pelo SLAVE.

C ) Formatos combinados

 

 

 

 

Durante a troca de direção, a condição de partida e o endereço para o SLAVE são ambos repetidos, mas com o bit R/W invertido.

NOTAS:

1 ) Formatos combinados são utilizados, por exemplo, para controlar uma memória serial. Durante o primeiro byte de dados, a localização interna da memória deve ser escrita. Após a repetição da condição de partida, os dados podem ser transferidos.

2 ) Todas as decisões para acrescentar ou retirar localizações previamente acessadas na memória, são estabelecidas durante o desenvolvimento do IC.

3 ) Cada byte é seguido por um reconhecimento como indicado no bloco A

4 ) ICs compatíveis com o I2C-bus devem aplicar um reset na sua barra durante o recebimento de uma condição de partida, de modo a antecipar o endereço fornecido pelo SLAVE.

 

 

ENDEREÇAMENTO

O procedimento de endereçamento do I2C-bus é executado de forma que o primeiro byte após a condição de partida determina qual SLAVE será selecionado pelo MASTER. Usualmente este primeiro byte é enviado após o processo de partida. A exceção é o endereço de "chamada geral " que endereça todos os ICs. Quando este endereço é utilizado, todos os ICs devem teoricamente responder com um reconhecimento. Contudo, ICs podem ser fabricados para ignorar este endereço. Neste caso, o segundo byte do endereço de chamada geral define então a ação a ser tomada.

Os primeiros sete bits do primeiro byte compõem o endereço de SLAVE ( ver figura ). O oitavo bit é o LSB ( least significant bit ), o qual determina a direção da mensagem. Um nível L na posição LSB do primeiro byte determina uma escrita de informação em um SLAVE pré selecionado. Um nível H nesta posição significa que o MASTER lerá a informação proveniente do SLAVE selecionado.

 

 

 

 

 

Quando um endereço é fornecido,cada IC no sistema compara os primeiros sete bits após a condição de partida com este endereço. Se eles forem iguais, o IC considera-se endereçado pelo MASTER como um SLAVE receptor ou SLAVE transmissor, dependendo do bit R/W.

UM endereço SLAVE comporta uma parte programável e uma fixa. Desde que haja ICs identicos no sistema, a parte programável do endereço SLAVE habilita o número máximo possível destes ICs para serem conectados ao I2C-bus. O número de bits de endereços programáveis de um IC depende do número de pinos disponíveis. Por exemplo, se um IC tem quatro bits fixos e tres bits de endereço programáveis, um total de 8 ICs idênticos podem ser conectados na mesma barra.

A formatação I2C-bus está alocada no endereço I2C. A combinação de bits 1111XXX do endereço SLAVE é reservada com propósitos de extensões futuras. O endereço 1111111 é reservado aos endereços de extensão. Isto significa que o processo de endereçamento deve continuar nos bytes seguintes. ICs que não utilizam a extensão de endereço não reagem à recepção deste byte. As sete outras possibilidades no grupo 1111 também são utilizadas com propósitos de extensão, mas ainda não estão alocadas. A combinação 0000XXX foi definida como um grupo especial. Os seguintes endereços foram alocados conforme ilustra a tabela da página seguinte.

 

PRIMEIRO

BYTE

   

ENDEREÇO SLAVE

R/W

   

0000 000

0

endereço de chamada geral

ver nota abaixo

0000 000

1

byte de partida

 

0000 001

X

endereço CBUS

 

0000 010

X

endereço reservado

 

0000 011

X

a ser definido

 

0000 100

X

   

0000 101

X

   

0000 110

X

   

0000 111

X

   

 

NOTAS:

1 ) Nenhum IC pode executar o reconhecimento com o byte de partida.

2 ) O endereço CBUS foi reservado para habilitar o mixer interno do CBUS com ICs I2C-bus no mesmo sistema. ICs compatíveis I2C-bus não respondem e nem recebem este endereço.

3 ) Um endereço reservado para uma barra de formato diferente é incluido para habilitar a mixagem do I2C-bus e de outros protocolos. Somente ICs compatíveis com estes formatos e protocolos podem responder a este endereço.

O endereço de chamada geral deve ser utilizado para endereçar qualquer IC conectado ao I2C-bus. Porém, se um IC não necessitar de nenhum dado fornecido pela estrutura de chamada geral, este endereço pode ser ignorado devido ao não reconhecimento. Se um IC necessitar de dados do endereço de chamada geral, o endereço será reconhecido e o IC passará a proceder como um SLAVE receptor. O segundo byte e os seguintes são reconhecidos por cada SLAVE receptor capaz de manipular estes dados. Um SLAVE que não possa processar um destes dados, deve ignorá-los através do não reconhecimento. O significado do endereço de chamada geral é sempre especificado no segundo byte.

 

 

 

 

SINCRONISMO

O clock no I2C-bus possui um período L de no mínimo 4.7 m s e um período H de no mínimo 4 m s. Os MASTERs podem gerar uma barra de clock com uma frequência até 100kHz. Todos os ICS conectados à barra devem ser capazes de efetuar transferências com frequências até 100kHz, e cada um deles deve transmitir ou receber com esta velocidade ou responder ao procedimento de sincronização do clock, o qual força o MASTER a entrar em um estado de espera e estender o período L do clock. Neste caso é claro, a frequência é reduzida.

 


Re: Um pouco sobre I2C By: rickteck Date: 12 Maio 2009, 07:51
Coloquei em anexo o arquivo salvo em PDF, é importante que muitos leiam.


Re: Um pouco sobre I2C By: tectonny Date: 12 Maio 2009, 11:09
Muito bom Ricardo.
Páginas: 1