32
I²C Bus I²C Bus Inter Integrated Circuits Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Embed Size (px)

Citation preview

Page 1: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

I²C BusI²C BusInter Integrated Circuits BusInter Integrated Circuits Bus

Guilherme Castilhos, Jeferson Oliveira

Programação de Periféricos

PUCRS

Page 2: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Tópicos DiscutidosTópicos Discutidos

• Introdução ao I²C

• Licenciamento

• Convenções Elétricas

• Convenções do Protocolo

• Modos de Operação

• Transferência

• Endereçamento

• Operações de Escrita e Leitura

• Finalizando a Transmissão

• Multi-Master

• Sincronização de Clock

• Arbitragem

• Clock Stretching

• Velocidades

• Tecnologias Derivadas

• Aplicações

• I²C no Linux

• Ferramentas de Desenvolvimento - Phillips

• Conclusões

• Referências

Page 3: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Introdução ao I²CIntrodução ao I²C

O I²C é de fato um padrão mundial, atualmente é implementado em mais de 1000 diferentes CIs fabricados por mais de 50 companhias. Além disso, a versatilidade do I²C é usada em várias arquiteturas de controle como System Management Bus (SMBus), Power Management Bus (PMBus), Intelligent Plataform Management Intarface (IPMI) e Advanced Telecom Computing Architecture (ATCA).

I2C-bus specification and user manual

19 June 2007

Page 4: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Introdução ao I²CIntrodução ao I²C

• I²C significa Inter-Integrated Circuit

• Foi desenvolvido pela Phillips na década de 80

• Define convenções elétricas e protocolo para comunicação

• O objetivo era criar um meio de comunicação simples entre componentes de uma mesma placa de circuito impresso

• Hoje em dia vemos o I²C sendo usado, principalmente, para conectar periféricos em placas-mãe, sistemas embarcados e celulares. Não necessariamente na mesma placa, mas também conectando componentes ligados por cabos.

Page 5: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

LicenciamentoLicenciamento

• Desde 1º de outubro de 2006, nenhuma taxa de licenciamento é cobrada para implementar o protocolo I²C

• Mas ainda é cobrada uma taxa de 2500 euros para se obter um I²C slave address (dados de agosto de 2007)

• Procedimentos para obter um I²C slave address• http://www.nxp.com/products/interface_control/i2c/support/requestform

• Formulário de solicitação de um I²C slave address• http://www.nxp.com/products/interface_control/i2c/support/requestform/

support_tools

Page 6: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Convenções ElétricasConvenções Elétricas

• I²C usa apenas dois sinais (fios) dreno-aberto, bidirecionais, com resistores de pull-up

• SDA – Serial Data

• SCL – Serial Clock

• Os componentes apenas “puxam” os sinais para o nível baixo ou deixam o sinal flutuando em Vdd (nível alto)

• Os resistores de pull-up Rp

garantem o nível lógico correto, mantendo os sinais em Vdd quando nenhum componente está colocando o sinal em nível baixo

• Tensões típicas: 3.3V e 5V

Exemplo com um mestre (microcontrolador) e três nodos escravos (ADC, DAC e microcontrolador), com resistores de pull-up Rp

Exemplo de comportamento dos sinais SDA (verde) e SCL (vermelho) em um barramento I²C

Page 7: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Convenções ElétricasConvenções Elétricas

• O número máximo de nodos no barramento é obviamente limitado pelo espaço de endereçamen-to, mas também pela capacitância total do barramento, de 400 pF

• A relação entre o resistor de pull-up e a capacitância do fio afetam o comporta-mento temporal dos sinais SDA e SCL

Vcc I²C supply voltage, typically ranging from 3.3V to 5.5V

GND Common ground

SDA Serial data (I²C data line)

SCL Serial clock (I²C clock line)

Rp Pull-up resistance (a.k.a. I²C termination)

Rs Serial resistance

Cp Wire capacitance

Cc Cross channel capacitance

A imagem mostra um circuito equivalente de uma conexão I²C entre dois periféricos (mestre e escravo), mostrando todos os fatores que são relevantes para o I²C.

Descrição dos itens da figura acima.

Cc

Cp Cp

Rs1 Rs2

Rs1 Rs2

RpRp

SDA

SCL

Vcc

GND

I2C Device #1

I2C Device #2

SDAin

SDAout

SCLin

SCLout

SDAin

SDAout

SCLin

SCLout

Page 8: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Conveções do ProtocoloConveções do Protocolo

• Por definição o protocolo I²C funciona utilizando um barramento com os sinais de clock (SCL) e de dados (SDA) e um espaço de endereçamento de 7 bits, com 16 endereços reservados, sendo assim apenas 112 nodos podem se comunicar no mesmo barramento

• Master – nodo que controla o clock

• Slave – nodo que não tem controle sobre o sinal de clock

• O barramento é multi-master, ou seja, vários mestres podem estar presentes

• Um master pode operar como slave e vice-versa

Exemplo com um mestre (microcontrolador) e três nodos escravos (ADC, DAC e microcontrolador)

Page 9: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Modos de OperaçãoModos de Operação

• Existem quatro modos de operação distintos:

• Master Transmit – O nodo está controlando o clock e enviando dados para um slave

• Master Receive – O nodo está controlando o clock e recebendo dados de um slave

• Slave Transmit – O nodo não está controlando o clock e está enviando dados para um master

• Slave Receive – O nodo não está controlando o clock e está recebendo dados de um master

Exemplo com um mestre (microcontrolador) e três nodos escravos (ADC, DAC e microcontrolador)

Page 10: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

TransferênciaTransferência

• Visão geral de uma transferência:

• Inicia com o START bit (S) quando o SDA é baixado enquanto o SCL está alto.

• Então, SDA prepara o bit transferido enquanto o SCL está baixo (azul) e o dado é recebido quando SCL levanta (verde).

• Quando a transferência está completa, um STOP bit (P) é enviado deixando o SDA ser levantado enquanto SCL fica constantemente alto.

Diagrama de tempo de uma transferência de dados.

Page 11: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

EndereçamentoEndereçamento

• O master inicia enviando um START bit seguido de 7 bits de endereço do slave com que ele deseja se comunicar, depois é enviado um bit que indica se o master deseja escrever ou ler do slave, caso o slave exista no barramento vai responder com um bit de acknowledge (A)

• O endereço do slave é enviado do bit mais significativo ao menos significativo

Primeiro byte depois do procedimento de START

Page 12: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

EndereçamentoEndereçamento

• Endereços reservados

[1] The general call address is used for several functions including software reset.[2] No device is allowed to acknowledge at the reception of the START byte.[3] The CBUS address has been reserved to enable the inter-mixing of CBUS compatible and I2C-bus compatible devices in the same system. I2C-bus compatible devices are not allowed to respond on reception of this address.[4] The address reserved for a different bus format is included to enable I2C and other protocols to be mixed. Only I2C-bus compatible devices that can work with such formats and protocols are allowed to respond to this address.

Page 13: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

EndereçamentoEndereçamento

• General Call – 0000 0000 – Endereça todos componentes do barramento. Se o componente não precisa da informação fornecida ele devolve um NACK. Todos outros componentes devolvem um ACK e passam a se comportar como slaves receivers. O segundo byte contém um comando (por exemplo, 0000 0110 (06H) Software Reset)

• 0000 0000 (00H) não é permitido como segundo byte.

Page 14: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

EndereçamentoEndereçamento

• Start Byte – É usado quando existe uma diferença de velocidade entre um microcontrolador relativamente lento (que não tem uma interface I²C on-chip e portanto tem que controlar o barramento via software) e um componente rápido hardware rápido.

• Neste caso a transferência é precedida por um procedimento de START mais longo que o normal.

Page 15: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Operação de EscritaOperação de Escrita

• Após o procedimento de START e do endereçamento

• Se o master deseja escrever no slave então ele envia os bytes e a cada byte recebido o slave responde enviando um bit de ACK.

• Neste caso o master está em modo master transmit e o slave está no modo slave receive

Bit de R/W em nível lógico 1 operação de leitura do slave, nível lógico 0 operação de escrita no slave.

Page 16: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Operação de LeituraOperação de Leitura

• Após o procedimento de START e do endereçamento

• Se o master deseja ler do slave então ele recebe bytes do slave e depois de cada byte recebido ele responde enviando um bit de ACK, exceto depois do último byte

Bit de R/W em nível lógico 1 operação de leitura do slave, nível lógico 0 operação de escrita no slave.

Page 17: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Finalizando a TransmissãoFinalizando a Transmissão

• O master então termina a transmissão com um STOP bit

• Ou pode mandar um novo START bit, se ele quiser manter o controle do barramento para outra transferência

Bit de R/W em nível lógico 1 operação de leitura do slave, nível lógico 0 operação de escrita no slave.

Page 18: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Multi-MasterMulti-Master

• Pode existir mais de um master ao mesmo tempo no I²C

• Dois ou mais masters podem começar uma transmissão ao mesmo tempo. Para não haver conflitos, eles precisam de métodos para tomar a decisão de qual tomará o controle do barramento e completará a transmissão

• Isso é feito com a Sincronização do Clock e a Arbitragem

• Quando há apenas um master, esses métodos não são necessários

Page 19: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Sincronização do ClockSincronização do Clock

• O sincronismo do clock é obtido por meio de uma conexão AND entre os clocks de todos os dispositivos e a linha SCL

• A transição de High para Low na linha SCL força os dispositivos a iniciar uma contagem de seu período Low de clock

• Estando o clock de algum desses dispositivos em Low, a linha SCL permanecerá neste estado até haver a transição de Low para High do último dispositivo

• Os dispositivos com o período de clock menor que os outros, entram em um estado de espera High durante este tempo

• Quando todos concluírem a contagem dos períodos Low, a linha SCL será levada para High, e portanto liberada

Page 20: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Sincronização do ClockSincronização do Clock

• Neste instante, não haverá mais diferenças entre os clocks e o estado da linha SCL

• O primeiro dispositivo que for pra Low levará a linha SCL para Low, e todos estarão com seus clocks sincronizados

Page 21: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

ArbitragemArbitragem

• A arbitragem é um procedimento de decisão que acontece na linha SDA da seguinte forma:

• Se um master está transmitindo um nível High, enquanto outro está transmitindo um nível Low, 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 dispositivo, o processo de decisão continuará com a comparação dos bits de dados.

A figura acima mostra a arbitragem envolvendo dois masters. No momento em que existe diferença entre o nível dos dados do MASTER e o nível atual da linha SDA, a saída de dados é desativada

Page 22: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Clock StretchingClock Stretching

• Numa comunicação I²C, o master que determina a velocidade do clock.

• No entanto, há situações em que o slave não é capaz de cooperar com o velocidade do clock fornecida pelo master, e precisa diminuir um pouco a velocidade. Isto é feito por um mecanismo chamado Clock Stretching.

• Alguns masters, que se encontram no interior de alguns ASICs não suportam Clock Stretching. Muitas vezes estes dispositivos são marcados como "two-wire interface" e não I²C.

Page 23: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

VelocidadesVelocidades

• Originalmente o I²C era limitado a 100kbit/s. Com o tempo foram feitas várias modificações na especificação e agora temos 4 velocidades de operação, que são:

• Standard-mode (Sm) - com um bit rate de até 100 kbit/s

• Fast-mode (Fm) - com um bit rate de até 400 kbit/s

• Fast-mode Plus (Fm+) - com um bit rate de até 1 Mbit/s

• High-speed mode (Hs-mode) - com um bit rate de até 3.4 Mbit/s

Page 24: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Tecnologias DerivadasTecnologias Derivadas

• O I²C é usado como protocolo de comunicação para várias arquiteturas de sistema

• Essas arquiteturas adicionaram comandos e extensões específicas de aplicação na especificação base do I²C

• Em geral componentes simplesmente I²C podem ser usados em qualquer uma dessas arquiteturas

• Arquiteturas:

• CBUS compatibility

• SMBus - System Management Bus

• PMBus - Power Management Bus

• IPMI - Intelligent Plataform Management Intarface

• ATCA - Advanced Telecom Computing Architecture

Page 25: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

AplicaçõesAplicações

• I²C é apropriado para periféricos onde a simplicidade e baixo custo de fabricação são mais importantes que a velocidade.

• Aplicações comuns do I²C são:

• Leitura de dados de configuração de EEPROMS em memórias DDR2 SDRAM e outras placas de PC

• Gerenciamento de sistemas de suporte para placas PCI, através de uma conexão SMBus 2.0

• Acesso a chips NVRAM que mantém configurações de usuários

• Acesso a ADs e DAs de baixa velocidade

Page 26: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

AplicaçõesAplicações

• Mudança no balanço de contraste, saturação e cor em monitores (Display Data Channel)

• Mudança de volume de som em caixas de som inteligentes

• Controle de displays OLED/LCD, como em celulares

• Leitura de monitores de hardware e sensores de diagnóstico, como termostato de processador e velocidade de uma ventoinha

• Leitura de Real Time Clocks (RTC)

• Ligar e desligar o fornecimento de energia de componentes de um sistema

Page 27: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

AplicaçõesAplicações

Page 28: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

I²C no LinuxI²C no Linux

• No Linux o I²C é manipulado com um módulo específico do kernel

• Detalhes de como implementar um I²C client podem ser encontrados na documentação específica do kernel e em:

• /usr/include/linux/i2c.h

Page 29: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Ferramentas de DesenvolvimentoFerramentas de Desenvolvimento

Page 30: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

Ferramentas de DesenvolvimentoFerramentas de Desenvolvimento

Page 31: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

ConclusõesConclusões

• Um particular ponto forte do I²C é o fato de um microcontrolador controlar uma rede de componentes com apenas dois pinos de I/O e software

• Periféricos podem ser removidos e adicionados do barramento I²C enquanto o sistema está em atividade, o que o torna ideal para aplicações que necessitam de hot swapping de componentes

• Baixo consumo de energia

• Baixo custo

• Limitações:

• Velocidade

• Gerenciamento de endereços

Page 32: I²C Bus Inter Integrated Circuits Bus Guilherme Castilhos, Jeferson Oliveira Programação de Periféricos PUCRS

ReferênciasReferências

• [1] The I²C-Bus Specification – Version 2.1 – January 2000

• [2] I²C-Bus Specification and User Manual – Rev. 03 – June 2007

• [3] http://www.i2c-bus.org

• [4] http://en.wikipedia.org/wiki/I%C2%B2C

• [5] http://www.semiconductors.philips.com/i2c