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:
- 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
- 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ário | Pinos I²C usados | Pinos SPI usados |
|---|---|---|
| 1 sensor | 2(SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 sensores | 2 (ônibus compartilhado) | 5 (ônibus compartilhado + 2× CS) |
| 4 sensores | 2 (ô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?
Nenhuma vantagem de qualquer maneira. Vá para a pergunta 2.
Dois endereços, dois fios. A menos que os sensores estejam distantes – então 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?
I²C funciona bem no nível da placa com layout limpo.
Ou I²C com buffer diferencial (PCA9615). O I²C nunca foi projetado para cabos.
Use 4–20 mA ou RS-485. Você está em território de transmissores industriais.
3Qual é o ambiente EMI?
O layout limpo com tampas de bypass mantém o I²C satisfeito.
Drivers push-pull e portas CS evitarão leituras fantasmas.
4É você quem está escrevendo o driver?
A abstração torna a diferença insignificante. Use o que o resto do tabuleiro usa.
Menos estados, sem atrasos no relógio, sem conflitos de endereço.
A maioria das bibliotecas de sensores amadores tem como padrão I²C. Verifique a biblioteca primeiro.
The "Why Not Both" Card
Interface DuplaAlguns 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
| Fator | I²C | Spi | Ganhador |
|---|---|---|---|
| Contagem de fios | 2 | 4 + 1 por sensor | I²C |
| Velocidade | Até 3,4 MHz | Até 50MHz | Empate - o sensor ADC é o gargalo |
| Multissensor (mesmo tipo) | Máximo 2 sem mux | Ilimitado (um CS por sensor) | SPI além de 2 sensores |
| Imunidade ao ruído | Dreno aberto, bordas RC | CMOS push-pull, bordas nítidas | Spi |
| Complexidade de firmware | Máquina de estado, ACK/NAK, tempos limite | Afirmar CS, deslocar bytes, concluído | SPI (bare metal); Empate (com HAL) |
| Dificuldade de depuração | Mais difícil – caça NAK | Mais fácil – sinais diretos | Spi |
| Consumo de energia | ~0,7 mA (pull-ups ativos) | ~0 mA (sem pull-ups) | Tie - delta é picowatt-hora |
| Passa cabos | Não recomendado >200 milímetros | Tolera traços mais longos | Spi |
| Componentes externos | 2× resistores pull-up | Nenhum | Empate - 2 × 0402 resistores ≈ $ 0,002 |
DR
Não sabe se você precisa de um sensor de pressão absoluta, manométrica ou diferencial? Leia o guia em inglês simples →
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 →



