I²C vs SPI para sensores de pressão —Guia de seleção de interface

Guias de engenharia

I²C vs SPI para sensores de pressão – Escolha o barramento certo ou odeie seu layout mais tarde

Você escolheu seu sensor de pressão. Você conhece o alcance, a precisão, o pacote. Então você vê duas variantes na página de pedidos: I²C e Spi. Mesmo sensor. Mesmo preço. Quatro letras diferentes. Veja como decidir – com números reais, não com a teoria dos livros didáticos.


A atualização de dois minutos

Pule isso se você já conectou os dois barramentos antes. Se ainda não o fez, aqui está o suficiente para acompanhar o resto do artigo:

I²C
  • Fios: 2 — SDA (dados) + SCL (relógio)
  • Tipo de sinal: Dreno aberto, puxado para cima com resistores
  • Endereçamento: Endereço de 7 bits por dispositivo
  • Direção: Meio duplex
  • Velocidade: 100 kHz/400 kHz/1 MHz/3,4 MHz
  • Controlar: Iniciado pelo mestre; escravos respondem apenas quando abordados
Spi
  • Fios: 4 — MOSI, MISO, SCLK + 1× CS por dispositivo
  • Tipo de sinal: CMOS push-pull
  • Endereçamento: Nenhum — a linha CS seleciona o dispositivo
  • Direção: Full-duplex
  • Velocidade: 1MHz a 50MHz
  • Controlar: Mestre controla o relógio; sem alongamento do relógio

Neste ponto você pode pensar: "SPI is faster, so SPI wins, end of article." Não exatamente – a velocidade quase nunca importa para um sensor de pressão. Aqui está o porquê.


O argumento da velocidade que não importa

Um sensor de pressão MEMS típico faz uma leitura a cada 1 a 100 milissegundos — o tempo de conversão do ADC domina, não a velocidade do barramento. Mesmo a 1 ms por amostra (amostragem de 1 kHz), você está pressionando talvez 48 bits por leitura. Isso é 48kbps.

I²C a 400 kHz transfere aproximadamente 320 kbps após sobrecarga. SPI a 1 MHz transfere 1 Mbps. Qualquer um é 7× a 20× mais rápido do que a taxa de dados do sensor. A menos que você esteja amostrando frequências ultrassônicas – o que não acontece, porque a pressão não muda tão rápido – a velocidade do barramento é irrelevante. O sensor é o gargalo, não os fios.

Conclusão sobre velocidade: não importa. O ADC do sensor é o fator limitante. Decida por outros motivos.


Contagem de pinos: o argumento que realmente importa em quadros pequenos

CenárioPinos I²C usadosPinos SPI usados
1 sensor2(SDA+SCL)4 (MOSI + MISO + SCLK + CS)
2 sensores2 (ônibus compartilhado)5 (ônibus compartilhado + 2× CS)
4 sensores2 (ônibus compartilhado)7 (ônibus compartilhado + 4× CS)

Se o seu MCU for um STM32 com 80 GPIOs – quem se importa. Mas em um ESP32-C3 com 15 GPIOs utilizáveis ​​executando um display, BLE, dois botões e um cartão SD – esses 2 pinos extras para picada SPI. O I²C economiza pinos, independentemente de quantos sensores compartilham o barramento.

Nota: I²C custa para você dois resistores pull-up. SPI não custa nada. Dois resistores 0402 de 4,7 kΩ custam cerca de US$ 0,002 no total e ocupam 2 mm² de espaço na placa – não nada, mas perto disso.

Resumindo sobre os pinos: o I²C vence quando os GPIOs estão apertados. Com um MCU rico em pinos, a vantagem desaparece – decida por outros fatores.


Projetos de múltiplos sensores: onde o I²C realmente brilha

Três sensores de pressão na mesma PCB — uma referência barométrica, um nível de tanque, uma saída de bomba. Com I²C: atribua a cada sensor um endereço diferente, conecte SDA e SCL em paralelo, pronto. Dois vestígios. Três sensores. Zero pinos MCU extras. Com SPI: três linhas CS separadas no topo do MOSI/MISO/SCLK compartilhado — seis fios no total.

Atenção: Os dispositivos I²C precisam de endereços exclusivos. A maioria dos sensores de pressão oferece exatamente dois endereços (um alfinete amarrado alto ou baixo). Isso significa que você obtém dois sensores no barramento antes de precisar de um multiplexador I²C como o TCA9548A – que acrescenta ~$0,50 e alguns mm². O SPI não tem esse limite; basta adicionar uma linha CS por sensor.

Conclusão sobre multissensor: I²C vence pela simplicidade de fiação de até dois sensores idênticos. Além disso, use SPI ou um mux I²C - nenhum deles é claramente melhor, é uma chamada de layout.


Imunidade ao ruído: aquela em que o SPI avança

Sensores de pressão de alta resolução medem alterações tão pequenas quanto 0,03 hPa – aproximadamente o peso de um mosquito pousando em sua mesa, traduzido em um sinal elétrico. Nessa resolução, o ruído é importante.

Características de ruído I²C

Linhas de dreno aberto com resistores pull-up produzem bordas de rampa RC, e não transições CMOS limpas. Os valores pull-up são um compromisso: muito forte desperdiça poder; muito fraco torna o tempo de subida lento e abre uma janela para acoplamento de ruído. Em um ambiente barulhento – próximo a um driver de motor, regulador de comutação ou qualquer coisa com PWM – o I²C pode apresentar falhas. O protocolo não possui detecção de erros integrada além do bit ACK (alguns sensores adicionam um byte CRC à carga útil, o que ajuda).

Características de ruído SPI

Os drivers CMOS push-pull conduzem ativamente os estados alto e baixo. As bordas são nítidas. A linha CS é bloqueada exatamente quando o escravo deveria ouvir – ignorando tudo no barramento no resto do tempo. SNR inerentemente melhor.

Na prática, um layout de PCB limpo com traços curtos, um plano de aterramento e tampas de bypass manterão o I²C satisfeito na maioria dos projetos. Mas se o seu sensor estiver em um cabo a um metro de distância do MCU ou compartilhar um gabinete com qualquer coisa que alterne amperes de corrente - a imunidade a ruído do SPI é uma vantagem genuína.

Conclusão sobre ruído: SPI é a escolha mais segura em ambientes eletricamente hostis. No mesmo PCB a alguns centímetros do MCU, o I²C está bem.


Complexidade de firmware: o desempate sobre o qual ninguém fala

Firmware I²C

A state machine. Start condition → send address + R/W bit → wait for ACK → read/write register pointer → read/write data → stop condition. Every step has a timeout, a retry path, and a "what if the sensor holds SDA low because it's still converting" case. Most MCU vendors provide a HAL. Most of those HALs have edge-case bugs you'll discover at 11 PM.

Firmware SPI

Assert CS → shift bytes → de-assert CS. That's it. The sensor doesn't get to say "I'm not ready" by clock-stretching or NAKing. The master controls the clock; the slave responds or stays silent.

Dor de depuração: Quando o SPI não funciona, você testa quatro linhas com um analisador lógico e vê exatamente o que está acontecendo. Quando o I²C não funciona, você olha para uma tela cheia de NAKs e se pergunta se são os valores pull-up, o endereço, o tempo ou a capacitância do barramento. Um analisador lógico de US$ 8 resolve ambos – mas o I²C consumirá mais do seu tempo.

Conclusão sobre firmware: SPI é bare metal menos irritante. Com um HAL ou biblioteca, é praticamente uma lavagem. O I²C leva mais tempo para depurar quando quebra.


Consumo de energia: ambos são erros de arredondamento

Um barramento I²C de 400 kHz com pull-ups de 4,7 kΩ queima cerca de 00,7 mA enquanto estiver ativo. O SPI não queima essencialmente nada no nível do barramento - corrente de comutação puramente CMOS nessas velocidades (microamperes).

Context: the pressure sensor element and ADC draw ~5 µA at 1 Hz sampling and 0.3 µA in standby. Whether the bus burns 0.5 mA or 0.05 mA for the 2 ms it takes to read a sample — the energy difference is picowatt-hours. Your BLE radio burns more power sending one "hello" packet than the bus choice will save across the sensor's entire operating lifetime.

Conclusão sobre potência: não escolha I²C ou SPI com base na potência. A diferença é pequena demais para importar. Em vez disso, decida sobre pinos, ruído ou integridade do firmware.


Fluxo de decisão – quatro perguntas, sem matriz

1Quantos sensores idênticos em um barramento?

Um → Qualquer um funciona

Nenhuma vantagem de qualquer maneira. Vá para a pergunta 2.

Dois → I²C provavelmente vence

Dois endereços, dois fios. A menos que os sensores estejam distantes – então SPI.

Três ou mais → SPI

A menos que você goste de ler as planilhas de dados do multiplexador I²C.

2A que distância está o sensor do MCU?

Mesmo PCB, <100 mm → Qualquer um

I²C funciona bem no nível da placa com layout limpo.

Cabo >200 mm → SPI

Ou I²C com buffer diferencial (PCA9615). O I²C nunca foi projetado para cabos.

>1 metro → Nenhum

Use 4–20 mA ou RS-485. Você está em território de transmissores industriais.

3Qual é o ambiente EMI?

PCB silencioso, sem motores → Qualquer um

O layout limpo com tampas de bypass mantém o I²C satisfeito.

BLDC, GSM, conversor buck próximo → SPI

Drivers push-pull e portas CS evitarão leituras fantasmas.

4É você quem está escrevendo o driver?

HAL/biblioteca existe → Qualquer um

A abstração torna a diferença insignificante. Use o que o resto do tabuleiro usa.

Escrevendo do zero → SPI

Menos estados, sem atrasos no relógio, sem conflitos de endereço.

Portando uma biblioteca Arduino → I²C

A maioria das bibliotecas de sensores amadores tem como padrão I²C. Verifique a biblioteca primeiro.


The "Why Not Both" Card

Interface Dupla

Alguns sensores são fornecidos com tanto I²C quanto SPI na mesma matriz, selecionável por meio de um pino ou bit de registro. Isso é genuinamente útil em dois cenários:

Flexibilidade de prototipagem

Comece com I²C em um Arduino ou placa breakout porque é mais fácil de conectar. Ao girar seu próprio PCB, mude para SPI se seu layout se beneficiar disso. Mesmo sensor, mesma lógica de firmware, apenas uma chamada HAL diferente.

Flexibilidade de SKU de produção

Um design de PCB, SKUs diferentes. Um SKU usa I²C porque compartilha o barramento com um sensor de temperatura/umidade. Outro precisa de SPI para rastreamentos mais longos para uma placa de sensor remoto. Você não redesenha nada - altera uma linha de BOM e uma faixa de resistor.

Se o seu candidato a sensor não suportar ambos os barramentos, isso não será um obstáculo. Mas ter a opção é uma daquelas coisas que você não aprecia até girar novamente o tabuleiro às 2 da manhã.


Resumo lado a lado

FatorI²CSpiGanhador
Contagem de fios24 + 1 por sensorI²C
VelocidadeAté 3,4 MHzAté 50MHzEmpate - o sensor ADC é o gargalo
Multissensor (mesmo tipo)Máximo 2 sem muxIlimitado (um CS por sensor)SPI além de 2 sensores
Imunidade ao ruídoDreno aberto, bordas RCCMOS push-pull, bordas nítidasSpi
Complexidade de firmwareMáquina de estado, ACK/NAK, tempos limiteAfirmar CS, deslocar bytes, concluídoSPI (bare metal); Empate (com HAL)
Dificuldade de depuraçãoMais difícil – caça NAKMais fácil – sinais diretosSpi
Consumo de energia~0,7 mA (pull-ups ativos)~0 mA (sem pull-ups)Tie - delta é picowatt-hora
Passa cabosNão recomendado >200 milímetrosTolera traços mais longosSpi
Componentes externos2× resistores pull-upNenhumEmpate - 2 × 0402 resistores ≈ $ 0,002

DR

Contagem de alfinetes I²C usa menos fios. Decisivo quando os GPIOs estão rígidos.
Velocidade Não importa. O ADC do sensor é sempre o gargalo.
Multissensor I²C é mais limpo para ≤2 sensores idênticos. O SPI é melhor dimensionado além disso.
Barulho SPI vence. Decisivo perto de motores, switchers ou módulos GSM.
Firmware SPI é bare metal mais simples. Com um HAL, é uma lavagem. O I²C leva mais tempo para depurar quando quebra.
Poder Não escolha com base no poder. A diferença é picowatt-hora.
Interface dupla O melhor dos dois mundos: um design, troque à vontade. Use-o como um recurso, não como uma reflexão tardia.

Não tem certeza de qual interface se adapta ao seu design? Conte-nos seu MCU, as restrições da sua placa e seu ambiente – nós indicaremos a parte certa, geralmente dentro de uma hora.

Entre em contato →
Role até o topo

Contate-nos