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.