ElectroDesignForgeElectroDesignForge
Sinais e interfacesProjeto de PCB

Interface SPI: modos, timing e fiação

Compreenda CPOL, CPHA, MOSI, MISO, SCLK e CS, em seguida, crie um ônibus SPI confiável com tempo, níveis lógicos, topologias e orientação de depuração.

Redigido e revisado tecnicamente porElectroDesignForge Engineering Team

Ver o processo editorial

Guia de referência

O SPI (Serial Peripheral Interface) conecta um controlador a CIs próximos, como memórias flash, ADCs/DACs, displays, sensores e dispositivos de RF. Esse enlace serial síncrono é rápido e opera em full duplex, mas não é um protocolo completamente padronizado: o formato dos quadros e os limites elétricos são definidos nas folhas de dados dos dispositivos.


Referência rápida

SinalDireção em relação ao controladorFunçãoPonto-chave
SCLK / SCKsaídaClock serialSeu nível em repouso é definido por CPOL.
MOSIcontrolador → periféricoDados transmitidosTambém chamado de COPI, SDI ou DIN.
MISOperiférico → controladorDados recebidosTambém chamado de CIPO, SDO ou DOUT; fica em alta impedância quando não selecionado.
CS / SS / nCSsaída, geralmente ativa em nível baixoSeleção e delimitação do quadroNormalmente, cada periférico precisa de um CS próprio.
GNDcompartilhadoReferência e caminho de retornoMantenha-o próximo aos sinais, especialmente fora da placa.

MOSI e MISO descrevem a direção dos dados do ponto de vista do controlador. Os nomes COPI (Controller Out, Peripheral In) e CIPO (Controller In, Peripheral Out) tornam esses papéis claros mesmo sem consultar o esquema.

O SPI não define endereçamento, confirmação de recebimento nem uma taxa máxima universal. O protocolo do dispositivo define comandos, endereços de registradores, bytes fictícios e respostas. Assim, um analisador lógico pode decodificar bits válidos enquanto o dispositivo permanece em silêncio porque a seleção por CS ou o comando está incorreto.

Verifique antes de conectar: níveis lógicos, taxa SCLK permitida, modo SPI, ordem MSB/LSB, tamanho da palavra, nível ativo do CS e tempos do CS. Domínios de 1.8 V, 2.5 V, 3.3 V e 5 V não são automaticamente compatíveis.


Os quatro modos: CPOL e CPHA

  • CPOL (polaridade do clock) define o nível de SCLK em repouso: 0 = baixo, 1 = alto.
  • CPHA (fase do clock) define a borda de amostragem. Com CPHA = 0, a primeira borda após CS amostra o primeiro bit; com CPHA = 1, essa borda altera o bit e a borda seguinte o amostra.
ModoCPOLCPHASCLK ociosoBorda da amostraAlterações dos dados em
000BaixoSubidaDescida
101BaixoDescidaSubida
210AltoDescidaSubida
311AltoSubidaDescida

A borda inicial é a primeira transição a partir do nível de repouso; a borda final é a segunda. CPHA = 0 amostra na borda inicial, enquanto CPHA = 1 amostra na borda final. Isso vale para ambos os valores de CPOL.

Lendo um diagrama de tempo

  1. Confira o nível de SCLK antes da ativação de CS.
  2. Identifique a borda em que os dados estáveis são amostrados: ela determina CPHA.
  3. Com CPHA = 0, o primeiro bit deve ser válido antes da primeira borda.
  4. Confira os atrasos de saída na folha de dados; os dados nem sempre mudam exatamente na borda oposta.

CPHA incorreto frequentemente desloca os bits; CPOL incorreto pode produzir uma sequência aparentemente plausível, mas amostrada nos instantes errados. 0x00, 0xFF ou um ID inválido são sintomas possíveis, não diagnósticos conclusivos.


Tempo além da frequência

ParâmetroSignificadoRisco quando violado
fSCLKFrequência máxima do clockErros intermitentes ou amostragem instável
tSU(D)Tempo de preparação de MOSI/MISO antes da borda de amostragemLeitura do bit no nível errado
tH(D)Tempo de retenção dos dados após a borda de amostragemO próximo bit corrompe o bit atual
tCSSIntervalo entre a ativação de CS e a primeira borda SCLKPrimeiro comando ignorado ou deslocado
tCSHIntervalo entre a última borda e a desativação de CSÚltimo bit não aceito
tCSHITempo de CS inativo entre quadrosEstado interno não reinicializado
tDOAtraso da saída MISOAmostragem prematura em alta velocidade

O orçamento de temporização inclui o atraso do conversor de níveis, o tempo de propagação na trilha ou no cabo, a velocidade real das bordas e a carga capacitiva. Uma frequência que funciona em uma placa compacta pode falhar após a adição de um conector ou ramificação.

Para o CS usual, ativo em nível baixo: mantenha SCLK no nível de repouso definido por CPOL, ative CS, aguarde tCSS, apresente o primeiro bit com antecedência suficiente se CPHA = 0, gere as bordas e aguarde tCSH antes de desativar CS. Alguns componentes exigem CS baixo durante toda a sequência comando–endereço–dados; outros executam uma operação quando CS sobe.


Fios MOSI, MISO, SCLK e CS

Controlador MOSI ─────────► Periférico SDI / DIN
Controlador MISO ◄───────── Periférico SDO / DOUT
Controlador SCLK ─────────► Periférico SCK
Controlador nCS  ─────────► Periférico nCS
GND              ─────────►  GND

MISO só pode ser compartilhado se todos os periféricos não selecionados realmente colocarem a saída em alta impedância. Um resistor de pull-up ou pull-down define o nível em repouso, mas não resolve o conflito entre duas saídas ativas.

SCLK costuma ser o sinal mais crítico: muda a cada bit, sincroniza todos os receptores e pode apresentar oscilações parasitas. Mantenha-o curto, sobre um plano de terra contínuo e longe de entradas analógicas sensíveis. Um resistor em série de algumas dezenas de ohms junto ao controlador pode amortecer uma conexão ponto a ponto; valide o valor com um osciloscópio.

CS permite que apenas um periférico responda. Um resistor de pull-up que mantenha o sinal inativo pode ser útil durante o reset do controlador; antes de adicioná-lo, verifique os resistores internos, o consumo de energia e as exigências de tempo de subida.


Topologias SPI

Estrela com CS independente

SCLK e MOSI chegam a cada CI; cada um recebe seu próprio CS. Somente o periférico selecionado aciona MISO.

                   ┌──────────► Periférico A
Controlador ─ SCLK ├──────────► Periférico B
            ─ MOSI ├──────────► Periférico C
            ─ MISO ◄────────── saídas compartilhadas, alta impedância quando não selecionadas
           ─ CSA  ───────────► A
           ─ CSB  ───────────► B
           ─ CSC  ───────────► C

Essa é a topologia recomendada: é simples de depurar e não passa os bytes por outros dispositivos. Quando há poucos GPIOs disponíveis, um decodificador ou expansor pode gerar os sinais CS; considere seu atraso e estado durante a inicialização do sistema.

Encadeamento em cascata (daisy chain)

Alguns registradores de deslocamento e drivers de LED são projetados para encadeamento em cascata. A saída serial de cada dispositivo alimenta a entrada do seguinte; todos compartilham SCLK e CS.

Controlador MOSI ─► Dispositivo 1 ─► Dispositivo 2 ─► Dispositivo 3
Controlador SCLK ─► todos os dispositivos
Controlador CS   ─► todos os dispositivos
Controlador MISO ◄─ saída do último dispositivo, se houver

O comprimento do quadro é a soma das palavras de todos os dispositivos, e a ordem física determina a ordem dos bytes. Esse arranjo não serve para periféricos SPI comuns que apenas compartilham um barramento.

Barramento compartilhado e integridade do sinal

Cada ramificação cria um trecho sem terminação que degrada as bordas conforme a frequência de SCLK aumenta. Prefira distribuição compacta e ramificações curtas. Para ligações por cabo ou entre placas, reduza fSCLK, ofereça um retorno de terra próximo e meça no receptor. SPI não é uma interface diferencial projetada para longas distâncias.

SituaçãoPrática recomendada
Um CI, trilhas muito curtasConexão direta; valide modo e níveis lógicos
Vários CIs na placaCS independente; MISO em alta impedância quando não selecionado
Oscilações parasitas em SCLKResistor em série perto do controlador; verifique com osciloscópio
Cabo ou interconexãoReduza a frequência, intercale condutores GND, limite o comprimento e use transceptor se necessário
Muitas linhas CSDecodificador, registrador de deslocamento ou expansor com estado seguro na inicialização

Níveis lógicos e depuração

Compare os limiares VIH/VIL e os limites máximos absolutos nos dois sentidos. Um sinal MISO de 1,8 V pode ser baixo demais para uma entrada de 3,3 V; uma saída de 5 V pode danificar uma entrada de 3,3 V que não tolere essa tensão. Conversores de nível bidirecionais com MOSFET, comuns em I²C, não são automaticamente adequados para SCLK rápido ou MOSI: escolha um buffer ou conversor especificado para os níveis, a frequência e a carga usados.

  1. Comece com um periférico a 100 kHz ou abaixo.
  2. Verifique alimentação, GND, reset e estado de CS antes de analisar os dados.
  3. Meça SCLK, CS, MOSI e MISO simultaneamente, usando a ativação de CS como disparo.
  4. Confira CPOL/CPHA, ordem dos bits e número exato de bordas por quadro.
  5. Leia um ID ou registrador de estado documentado e então aumente a frequência gradualmente.

Um analisador lógico ajuda a verificar o protocolo; para avaliar bordas, oscilações, ruído e reflexões, é necessário um osciloscópio. Meça perto da entrada do periférico: observar apenas a saída do controlador pode ocultar problemas na linha.


Lista de verificação

  • CPOL, CPHA, ordem de bits e comprimento de palavra explicitamente documentado em esquema e firmware.
  • Um CS por periférico, salvo se a folha de dados especificar uma cadeia em cascata.
  • MISO em alta impedância quando não selecionado; nenhuma disputa entre saídas.
  • Limiares lógicos, máximos absolutos e temporização verificados nos dois sentidos.
  • SCLK curto sobre plano de terra contínuo; qualquer resistor em série validado.
  • Estado seguro de CS durante o reset e a inicialização da alimentação.
  • Medição do lado do receptor após a adição de cabo, conector, tradutor ou ramo.

Referências