A escolha entre I2C e SPI, às duas principais opções de comunicação serial, afeta o design de um projeto, especialmente se for utilizado um protocolo de comunicação abaixo do ideal.
Tanto o SPI quanto o I2C trazem suas próprias vantagens e limitações como protocolos de comunicação, o que os torna adequados para aplicativos específicos. E logo você poderá também usar o i3C.
Esses três protocolos significam o seguinte os seguintes:
- SPI – Serial Peripheral Interface
- I2C – Inter-Integrated Circuit
- I3C – Improved Inter Integrated Circuit
Uma das novidades destes protocolos relativamente ao UART é serem síncronos, ou seja, um dos sinais envolvidos é um sinal de relógio.
Desta forma é possível usar transferências mais rápidas. Por exemplo, no protocolo SPI podem-se usar baudrates de 1000000bit/s ou mesmo mais.
Leia também: i2C: Visão geral do protocolo e barramento
Estes protocolos usam uma estratégia master-slave, onde o microcontrolador toma o papel de master, que ao gerar o sinal de relógio comanda a troca de dados com os outros dispositivos (os slaves).
Em resumo: SPI, I2C e I3C são protocolos de comunicação utilizados em sistemas eletrônicos para permitir a troca de informações entre componentes, como sensores, atuadores e microcontroladores. Cada um tem suas próprias características e é adequado para diferentes aplicações.
O protocolo SPI (Serial Peripheral Interface) é um protocolo de comunicação síncrono que utiliza quatro fios para transmitir dados: MOSI (Master Out, Slave In), MISO (Master In, Slave Out), SCK (clock) e SS (Slave Select). Ele é adequado para aplicações que exigem altas taxas de transferência de dados e em que o número de dispositivos conectados é relativamente baixo.
Já o protocolo I2C (Inter-Integrated Circuit) é um protocolo de comunicação assíncrono que utiliza dois fios para transmitir dados: SDA (Serial Data) e SCL (Serial Clock). Ele é adequado para aplicações em que o número de dispositivos conectados é relativamente alto e em que a taxa de transferência de dados é menor do que a do SPI.
O protocolo I3C (Improved Inter-Integrated Circuit) é uma evolução do protocolo I2C, que inclui recursos adicionais, como detecção de dispositivos e configuração automática de endereços, que tornam a comunicação mais eficiente e simplificada. Ele é adequado para aplicações em que há uma grande variedade de dispositivos conectados e em que a comunicação precisa ser rápida e eficiente.
A escolha entre esses protocolos depende das necessidades específicas de cada aplicação. Para escolher o protocolo mais adequado, é preciso levar em consideração fatores como a taxa de transferência de dados, o número de dispositivos conectados, a complexidade da comunicação, a disponibilidade de dispositivos compatíveis e a facilidade de implementação.
Comunicação SPI
SPI, Serial Peripheral Interface (Interface Periférica Serial) é uma interface de comunicação serial de quatro fios e muito baixa potência projetada para que controladores e periféricos de IC se comuniquem entre si.
O barramento SPI é um barramento full-duplex, que permite que a comunicação flua de e para o dispositivo mestre simultaneamente a taxas de até 10 Mbps.
A operação de alta velocidade do SPI geralmente o impede de ser usado para se comunicar entre componentes em PCBs separadas, devido ao aumento de capacitância que a comunicação a longa distância adiciona às linhas de sinal.
A capacitância da placa de circuito impresso também pode limitar o comprimento das linhas de comunicação SPI.
Embora o SPI seja um protocolo estabelecido, não é um padrão oficial. O SPI oferece várias variantes e personalizações que levam a problemas de compatibilidade.
As implementações de SPI sempre devem ser verificadas entre os controladores principais e os periféricos escravos para garantir que a combinação não tenha problemas de comunicação inesperados.
Leia também: Visão geral e benefícios do protocolo e barramento I2C
Comunicação por protocolo I2C
I2C é um protocolo oficial de comunicação serial padrão que requer apenas duas linhas de sinal projetadas para comunicação entre chips em uma PCB.
O I2C foi originalmente projetado para comunicação de 100kbps, mas modos de transmissão de dados mais rápidos foram desenvolvidos ao longo dos anos para atingir velocidades de até 3,4 Mbps.
O protocolo I2C foi estabelecido como um padrão oficial, que fornece boa compatibilidade entre implementações I2C e boa compatibilidade com versões anteriores.
SPI ou I2C: Qual escolher?
A seleção entre os dois principais protocolos de comunicação serial, requer um bom entendimento das vantagens e limitações e seu aplicativo. Cada protocolo de comunicação terá vantagens distintas que tenderão a se diferenciar conforme se aplica ao seu aplicativo.
As 13 principais diferenças entre SPI e I²C são:
- I2C requer apenas dois fios, enquanto o SPI requer três ou quatro.
- SPI suporta comunicação full-duplex de velocidade mais alta enquanto o I2C é mais lento.
- I2C consome mais energia que o SPI.
- I2C suporta vários dispositivos no mesmo barramento, sem linhas adicionais de sinal de seleção adicionais, através do endereçamento de dispositivos em comunicação, enquanto o SPI requer linhas de sinal adicionais para gerenciar vários dispositivos no mesmo barramento.
- I2C garante que os dados enviados sejam recebidos pelo dispositivo escravo, enquanto o SPI não verifica se os dados foram recebidos corretamente.
- I2C pode ser bloqueado por um dispositivo que falha ao liberar o barramento de comunicação.
- SPI não pode transmitir pela PCB, enquanto o I2C pode, embora em baixas velocidades de transmissão de dados.
- I2C é mais barato de implementar do que o protocolo de comunicação SPI.
- SPI suporta apenas um dispositivo mestre no barramento, enquanto o outro suporta vários dispositivos mestre.
- I2C é menos suscetível ao ruído que o SPI.
- SPI só pode percorrer distâncias curtas e raramente sair do PCB, enquanto o I2C pode transmitir dados por distâncias muito maiores, embora com taxas de dados baixas.
- A falta de um padrão formal resultou em várias variações do protocolo SPI, variações que foram amplamente evitadas com o protocolo I2C.
- No geral, o SPI é melhor para aplicações de alta velocidade e baixo consumo de energia, enquanto o outro é mais adequado para comunicação com um grande número de periféricos e alteração dinâmica da função do dispositivo mestre entre os periféricos no barramento I2C.
Ambos são protocolos de comunicação robustos e estáveis para aplicativos incorporados adequados para o mundo incorporado.
Leia também: Ohm e as leis básicas do circuito elétrico
i3C
O I2C é um barramento bem antigo, criado em 1982 pela Philips Semiconductor, com mais de 35 anos de vida!
É um barramento simples, com apenas duas linhas de comunicação: clock (SCL) e dado (SDA). Esta simplicidade facilita o projeto da placa de circuito impresso, mas traz algumas desvantagens.
O endereçamento é realizado no protocolo, sendo tipicamente limitado a 7 bits, permitindo um máximo de 127 dispositivos conectados ao barramento.
Outra grande desvantagem do barramento I2C é a velocidade de comunicação, tipicamente de 100Kbit/s a 400Kbit/s.
A especificação do I3C foi desenvolvida pelo MIPI Sensor Working Group da MIPI Alliance, que possui entre seus membros empresas gigantes como AMD, Broadcom, Google, Cadence, Intel, Lattice, MediaTek, Mentor Graphics, Nvidia, NXP, Qualcomm, Sony, STMicroelectronics, etc.
O barramento SPI também é bastante antigo, criado em meados da década de 80 pela Motorola.
Sua arquitetura é mais complexa, exigindo 4 linhas de comunicação: clock (SCLK), master output (MOSI), slave output (MISO) e slave select (SS).
Comparado ao I2C, sua grande desvantagem é a complexidade do projeto da placa de circuito impresso, principalmente se você tiver mais de um dispositivo SPI conectado ao barramento, o que exigirá pinos extras de I/O para fazer a seleção do slave (chip select).
Mas a velocidade de comunicação é muito maior, podendo chegar a 60 Mbit/s, dependendo do clock da CPU e do dispositivo.
O barramento SPI também consome menos energia que o barramento I2C.
No caso eles se complementam, cada um resolvendo um domínio de problemas diferentes. O I2C é mais simples, porém mais lento.
O SPI é mais rápido e consome menos energia, porém pode aumentar bastante a complexidade do projeto de hardware.
Além disso, ambos os barramentos I2C e SPI não suportam interrupções. Isso significa que será necessário o uso de pinos extras de I/O para receber interrupções de dispositivos conectados a estes barramentos.
O mesmo vale para gerenciamento de energia. Não existe nenhum suporte nestes barramentos para colocar um dispositivo em modo de baixo consumo, e normalmente a implementação de gerenciamento de energia é feita por fora, via algum registrador do dispositivo ou pino extra de I/O.
O barramento I3C tem tudo isso e muito mais!
Leia também: Técnicas de solução de problemas de circuito impresso ou PCB
O I3C é um padrão de barramento criado pela MIPI Alliance, a mesma responsável por outros barramentos bastante comuns como o CSI (Camera Serial Interface) para câmeras. O nome I3C vem de Improved Inter Integrated Circuit, e seu desenvolvimento começou em meados de 2014.
As metas do esforço do Grupo de Trabalho de Sensores MIPI foram anunciadas pela primeira vez em novembro de 2014 no Congresso Executivo de MEMS em Scottsdale AZ.
Fornecedores de ferramentas de automação de projeto eletrônico, incluindo Cadence, Synopsys e Silvaco, lançaram blocos de IP de controlador e software de verificação associado para a implementação do barramento I3C em novos projetos de circuitos integrados.
Em dezembro de 2016, a Lattice Semiconductor integrou o suporte I3C em seu novo FPGA conhecido como iCE40 UltraPlus. Em 2017, a Qualcomm anunciou o Snapdragon 845 Mobile SOC com suporte mestre I3C integrado. Em dezembro de 2017, a especificação I3C 1.0 foi lançada para análise pública. Quase simultaneamente, um patch do kernel do Linux introduzindo suporte para I3C foi proposto por Boris Brezillon.
Em junho de 2020, a Renesas Electronics lançou produtos I3C
O I3C traz o melhor dos mundos I2C e SPI. É simples, e assim como o I2C, utiliza apenas duas linhas de comunicação: clock (SCL) e dado (SDA). Mas é muito mais rápido que o I2C, com velocidades comparáveis ao SPI, começando em 10 Mbit/s e podendo passar de 30 Mbit/s!
O I3C possui suporte à interrupção integrado ao barramento de comunicação (In-Band Interrupt). Ou seja, você não precisa de pinos extras de I/O para receber uma requisição de interrupção de um dispositivo I3C. O mesmo acontece com gerenciamento de energia.
O endereçamento dos slaves é dinâmico. Isso significa que, durante a inicialização do barramento, o master atribui dinamicamente endereços aos slaves conectados ao barramento.
Além disso, cada dispositivo I3C possui um número identificador de 48 bits chamado Provisional ID, que contém informações sobre o dispositivo, incluindo o fabricante e o part number.
Desta forma, o master consegue identificar (enumerar) em tempo de execução os dispositivos conectados ao barramento. Ou seja, não será necessário declarar dispositivos I3C na árvore de dispositivos!
O barramento I3C é hotplug (eles chamaram esta funcionalidade de hot-join). Ou seja, você pode conectar um dispositivo no barramento I3C dinamicamente, em tempo de execução.
As Metas do i3C em relação ao SPI e I2C
Antes do lançamento público da especificação, uma quantidade substancial de informações gerais sobre ela foi publicada na forma de slides do 2016 MIPI DevCon.
Os objetivos para esta interface foram baseados em uma pesquisa de organizações membros do MIPI e membros do MEMS Industry Group (MIG). Os resultados desta pesquisa foram divulgados.
I3C V1.0
O projeto I3C inicial visou melhorar sobre I²C das seguintes maneiras:
- Interface de dois pinos que é um super conjunto do padrão I²C. Os dispositivos escravos I²C herdados podem ser conectados ao barramento mais recente.
- Design de baixo consumo de energia e com uso eficiente de espaço destinado a dispositivos móveis (smartphones e dispositivos IoT).
- Interrupções na banda no barramento serial, em vez de exigir pinos separados. Em I²C, interrupções de dispositivos periféricos normalmente requerem um pino não compartilhado adicional por pacote.
- Taxa de transferência de dados padrão (SDR) entre 10 e 12,5 Mbit / s usando níveis de E / S CMOS.
- Os modos de alta taxa de dados (HDR) permitem vários bits por ciclo de clock. Eles suportam uma taxa de transferência comparável ao SPI, embora exijam apenas uma fração da energia do modo rápido I²C.
- Um conjunto padronizado de códigos de comando comuns
- Suporte para fila de comando.
- Detecção e recuperação de erros (verificação de paridade no modo SDR e CRC de 5 bits para os modos HDR).
- Atribuição de endereço dinâmico (DAA) para escravos I3C, embora ainda suporte endereços estáticos para dispositivos legados I²C
- O tráfego I3C é invisível para dispositivos I²C legados quando equipados com filtros de pico I²C, alcançados por tempos SCl HIGH de menos de 50 ns
- Hot-join (alguns dispositivos no barramento podem ser ligados / desligados durante a operação)
- Operação multi-mestre com um protocolo bem definido para transferência entre os mestres
I3C — especificação básica
Após tornar o padrão I3C 1.0 acessível ao público, a organização posteriormente publicou a especificação I3C Basic, um subconjunto destinado a ser implementado por organizações não-membros sob uma licença RAND-Z.
A versão básica inclui muitas das inovações de protocolo em I3C 1.0, mas carece de algumas das potencialmente mais difíceis de implementar, como os modos opcionais de alta taxa de dados (HDR) como DDR. No entanto, o modo SDR padrão de até 12,5 Mbit / s é uma grande melhoria de velocidade / capacidade em relação a I²C.
Leia também: Projetos BeagleBone Black para Iniciantes
I3C V1.1
Publicada em dezembro de 2019, esta especificação está disponível apenas para membros do MIPI.
Comparativos entre i2C, SPI e i3C
Leia também: Motores de passo vs. Servomotores conheça as diferenças
I2C vs. I3C: Onde estão as diferenças?
- Design com economia de energia e economia de espaço para dispositivos móveis (smartphones e dispositivos IoT).
- Interface bipolar, um super conjunto do padrão I2C. Dispositivos escravos I2C mais antigos podem ser conectados ao barramento mais recente.
- Interrupções na banda no barramento serial em vez de exigir pinos separados.
- Taxa de transferência de dados padrão (SDR) de até 12,5 Mbps ao usar níveis de E / S CMOS
- Os modos HDR (alta taxa de dados) fornecem taxa de transferência comparável a SPI, mas requerem apenas uma fração do desempenho de modo rápido I2C.
- Um conjunto padronizado de códigos de comando comuns
- Suporte para filas de comando.
- Detecção e recuperação de erros (verificação de paridade no modo SDR e CRC de 5 bits para modos HDR)
- Atribuição de endereço dinâmico (DAA) para escravos I3C, mas ainda suporta endereços estáticos para dispositivos I2C mais antigos.
- Hot-Join (alguns dispositivos no barramento podem ser ligados e desligados durante a operação)
- Operação multi-master com transferência definida
Leia também: O que é PCB e como resolver problemas mais comuns?
Este Whitepaper explica as características do barramento, existe uma FAQ de leitura rápida que pode tirar muitas dúvidas sobre seu funcionamento, além-claro da especificação completa que pode ser baixada no site da MIPI Alliance.
Ainda não existem dispositivos compatíveis com I3C, mas o kernel Linux está em vias de suportá-lo.