3.21. Fundamentos de SPI#
SPI (Serial Peripheral Interface) é um barramento série síncrono concebido para ligações de curto alcance e alta velocidade entre um controlador e um ou mais dispositivos periféricos na mesma placa. É a interface padrão para cartões SD, ecrãs, memória flash, ADCs e DACs, e uma vasta gama de sensores.
Ao contrário do UART, que não tem relógio partilhado e recupera a temporização a partir da própria linha de dados, o SPI utiliza um fio de relógio em paralelo com os fios de dados. O controlador conduz o relógio à frequência que desejar, e todos os outros dispositivos no barramento amostram os dados em sincronismo com esse relógio. Não há adivinhação de taxa de baud nem sobrecarga de enquadramento – apenas flancos de relógio e bits.
3.21.1. Os quatro fios#
Um barramento SPI full-duplex tem quatro fios:
SCK (relógio série). Conduzido pelo controlador. Cada bit é sincronizado na entrada ou saída num flanco deste sinal.
MOSI (saída do controlador, entrada do periférico). A linha de saída do controlador; o periférico amostra os bits a partir dela.
MISO (entrada do controlador, saída do periférico). A linha de saída do periférico; o controlador amostra os bits a partir dela.
CS (seleção de chip), por vezes designado SS (seleção de periférico). Uma linha separada por periférico. O controlador coloca o CS a baixo para iniciar uma transação e a alto novamente para a terminar; qualquer periférico com o CS desativado ignora completamente o barramento e deixa de conduzir a sua saída MISO.
Um byte SPI: o CS desce a baixo para selecionar o periférico, o SCK sincroniza oito bits, e MOSI e MISO transferem um byte cada um em direções opostas.#
Cada flanco de relógio move um bit em cada direção ao mesmo tempo. Um único pulso SCK envia simultaneamente um bit em MOSI e recebe um bit em MISO – o SPI é full-duplex ao nível dos fios. O software não tem de utilizar ambas as direções: as transações apenas de escrita e apenas de leitura são comuns, com a linha não utilizada ignorada ou mantida a alto.
3.21.2. Polaridade e fase do relógio#
Dois bits de configuração determinam exatamente qual o flanco do relógio que move os dados:
Polaridade do relógio (
polarity, por vezesCPOL) – o estado inativo do SCK.0significa que o relógio está inativo a baixo e pulsa a alto;1significa que o relógio está inativo a alto e pulsa a baixo.Fase do relógio (
phase, por vezesCPHA) – qual o flanco que amostra os dados.0amostra no primeiro flanco de cada pulso de relógio (flanco de subida);1amostra no segundo flanco (flanco de descida).
Em conjunto, estes dão quatro modos, convencionalmente designados Modo 0 a Modo 3. O Modo 0 (polarity=0, phase=0) é o mais comum e um padrão seguro para dispositivos desconhecidos.
A regra fundamental é que ambas as extremidades devem concordar com o modo. Modos desalinhados produzem dados incorretos mesmo que o relógio e as linhas de dados estejam corretamente ligados; se um dispositivo devolver dados sem sentido na primeira transação, o modo é a primeira coisa a verificar.
3.21.3. Múltiplos periféricos#
Vários periféricos podem partilhar as mesmas linhas SCK, MOSI e MISO, desde que cada um tenha a sua própria linha CS conduzida pelo controlador:
Todos os periféricos veem o mesmo relógio e dados, mas cada um vigia o seu próprio CS. Com o CS desativado (alto), um periférico ignora completamente SCK e MOSI e deixa MISO num estado de alta impedância para não interferir com outros dispositivos na linha.
O controlador ativa exatamente um CS de cada vez, executa a transação e desativa o CS para libertar o barramento.
Um microcontrolador com um único bloco SPI por hardware pode comunicar com tantos periféricos quantos os pinos GPIO livres disponíveis para as linhas CS – não existe endereçamento no próprio barramento.
3.21.4. Pontos fortes e fracos#
Os pontos fortes e fracos do SPI decorrem ambos da sua conceção:
Rápido. Dezenas de megahertz são alcançáveis em traços curtos com tradução de nível simples. Os leitores de cartão SD e os ecrãs SPI utilizam esta capacidade.
Simples ao nível dos fios. Sem endereçamento, sem confirmações, sem condições especiais de início/fim – apenas bits nos fios sincronizados com um relógio.
Consome muitos pinos. Três linhas partilhadas mais um CS por periférico. Uma placa com cinco dispositivos SPI utiliza oito pinos (três + cinco).
Curto alcance. O SPI pressupõe flancos limpos e rápidos, o que implica traços curtos na mesma placa. Para ligações mais longas, o I2C ou um dos barramentos com enquadramento é uma melhor opção.