
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 editorialGuia 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
| Sinal | Direção em relação ao controlador | Função | Ponto-chave |
|---|---|---|---|
| SCLK / SCK | saída | Clock serial | Seu nível em repouso é definido por CPOL. |
| MOSI | controlador → periférico | Dados transmitidos | Também chamado de COPI, SDI ou DIN. |
| MISO | periférico → controlador | Dados recebidos | Também chamado de CIPO, SDO ou DOUT; fica em alta impedância quando não selecionado. |
| CS / SS / nCS | saída, geralmente ativa em nível baixo | Seleção e delimitação do quadro | Normalmente, cada periférico precisa de um CS próprio. |
| GND | compartilhado | Referência e caminho de retorno | Mantenha-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.
| Modo | CPOL | CPHA | SCLK ocioso | Borda da amostra | Alterações dos dados em |
|---|---|---|---|---|---|
| 0 | 0 | 0 | Baixo | Subida | Descida |
| 1 | 0 | 1 | Baixo | Descida | Subida |
| 2 | 1 | 0 | Alto | Descida | Subida |
| 3 | 1 | 1 | Alto | Subida | Descida |
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
- Confira o nível de SCLK antes da ativação de CS.
- Identifique a borda em que os dados estáveis são amostrados: ela determina CPHA.
- Com CPHA = 0, o primeiro bit deve ser válido antes da primeira borda.
- 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âmetro | Significado | Risco quando violado |
|---|---|---|
fSCLK | Frequência máxima do clock | Erros intermitentes ou amostragem instável |
tSU(D) | Tempo de preparação de MOSI/MISO antes da borda de amostragem | Leitura do bit no nível errado |
tH(D) | Tempo de retenção dos dados após a borda de amostragem | O próximo bit corrompe o bit atual |
tCSS | Intervalo entre a ativação de CS e a primeira borda SCLK | Primeiro comando ignorado ou deslocado |
tCSH | Intervalo entre a última borda e a desativação de CS | Último bit não aceito |
tCSHI | Tempo de CS inativo entre quadros | Estado interno não reinicializado |
tDO | Atraso da saída MISO | Amostragem 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ção | Prática recomendada |
|---|---|
| Um CI, trilhas muito curtas | Conexão direta; valide modo e níveis lógicos |
| Vários CIs na placa | CS independente; MISO em alta impedância quando não selecionado |
| Oscilações parasitas em SCLK | Resistor em série perto do controlador; verifique com osciloscópio |
| Cabo ou interconexão | Reduza a frequência, intercale condutores GND, limite o comprimento e use transceptor se necessário |
| Muitas linhas CS | Decodificador, 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.
- Comece com um periférico a 100 kHz ou abaixo.
- Verifique alimentação, GND, reset e estado de CS antes de analisar os dados.
- Meça SCLK, CS, MOSI e MISO simultaneamente, usando a ativação de CS como disparo.
- Confira CPOL/CPHA, ordem dos bits e número exato de bordas por quadro.
- 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
- NXP — Guia de blocos SPI, rev. 3.0
- Microchip — Interface serial SPI
- Folhas de dados do controlador e dos periféricos usados: seus modos, temporizações, níveis e sequências de quadros prevalecem sobre estas orientações gerais.