Hardware - Interface SPI
top of page
  • Leonardo Ritter

Hardware - Interface SPI

Atualizado: 16 de out. de 2022

Este artigo é dedicado à interface de comunicação SPI, abreviação para Serial Peripheral Interface, utilizada em microcontroladores (Arduíno, Raspberry e microcontroladores ARM, por exemplo), chips de memória Flash ROM e outros dispositivos de comunicação em que se necessita de uma interface fácil e de velocidade razoável.

A interface SPI, desenvolvida pela Motorola, é uma comunicação Full-Duplex (pode-se enviar e receber dados ao mesmo tempo) que exige no mínimo 4 fios. Diferente da interface RS-232 (a porta serial), a SPI possui linha de clock, ou seja, é uma comunicação síncrona entre emissor e receptor. A nomenclatura e utilidade de cada fio é mostrada na tabela abaixo:

Tabela 1 - Linhas de uma comunicação SPI


O escravo é selecionado quando a tensão do fio SS cair para nível LOW. Quando o nível voltar para HIGH o escravo fica ocioso. Este fio também pode ser utilizado para sincronismo de frame, isto é, marca o início e o fim da transferência de um pacote de dados. Enquanto o escravo e o mestre estiverem se comunicando, o sinal permanece e nível LOW e retorna ao HIGH quando a troca de dados terminar. É por este motivo que quando há apenas 1 escravo conectado ao mestre, este fio SS não pode ser aterrado, pois pode gerar uma perda no sincronismo do frame,

Diagrama 1


Quando o pino SS é mantido em nível HIGH, a saída do escravo, isto é, o pino MISO é colocado em alta impedância e não interfere no funcionamento de outro escravo que esteja conectado ao barramento.

Para cada escravo deve haver 1 fio para seleciona-lo. Por exemplo, se for conectado 3 escravos á um mestre de SPI, deverá haver 6 fios, sendo três para selecionar cada um dos escravos. Veja o desenho abaixo para entender melhor:

Esquema de ligação entre 3 escravos e 1 mestre

Diagrama 2


Este sistema pode ter um mestre para vários escravos. O mestre do barramento gera o sinal de sincronismo que é recebido por todos os escravos conectados a ele.

Toda a troca de dados deve acontecer nas duas direções, isto é, para o Mestre enviar 1 bit, ele precisa receber 1 bit do Escravo. Isso é uma exigência de hardware. Isso ocorre devido ao SPI ter o registrador de deslocamento, como você verá mais abaixo. De forma simples, não há como transmitir um dado sem receber outro em troca.

O controlador é baseado em um shift-register (registrador de deslocamento) que não passa de uma cascata de flip-flops ligada ao mesmo sinal de clock, onde a saída de um filp-flop é ligada na entrada de outro. Explicarei o funcionamento detalhado de um shift register futuramente, aguarde!

Veja abaixo, como é feita a troca de dados entre um mestre e um escravo SPI.

Exemplo de transferência de dados entre Master e Slave

Diagrama 3


Veja este exemplo de transferência de dados entre Master e Slave:

Diagrama 4 - Exemplo de transferência de dados entre Mestre e Escravo


O Master vai recebendo o que estiver no buffer do slave, mesmo que este dado não sirva para nada. Este é o protocolo de comunicação padrão do SPI.

A interface SPI permite a configuração da borda de clock através de sua polaridade de fase. Existem duas configurações possíveis: a CPOL (Clock Polarity) e CPHA (Clock Phase). Abaixo estão os modos possíveis para estas duas configurações.

Tabela 2


A definição do bit mais significativo (msb) e menos significativos (lsb) também deve ser definida. Veja os gráficos abaixo, que mostram como ocorre a transferência de dados utilizando as configurações CPOL e CPHA com a definição do 'msb':

Gráfico 1


Perceba que são transmitidos 8 bits por vez: 'lsb' (bit 0 ), bit 1, bit 2, bit 3, bit 4, bit 5, bit 6 e 'msb' (bit 7).

Gráfico 2


Perceba que são transmitidos 8 bits por vez: 'lsb' (bit 0 ), bit 1, bit 2, bit 3, bit 4, bit 5, bit 6 e 'msb' (bit 7).

Veja como as linhas de dados e as linhas de clock se comportam em uma transmissão CPHA 0 / CPOL 0:

Gráfico 3


Diferente da I²C e da OneWire, a interface SPI possui sinais mais definidos e em direção fixa. Para que isso aconteça, é colocado um circuito Push-Pull em cada pino da interface. Um circuito Push-Pull é feito de dois transistores, como mostrado no desenho abaixo:

Gráfico 4 - Estes transistores obviamente estão embutidos no controlador SPI

Para a interface I²C se utiliza um esquema Pull-Up.

 

Vamos comparar a interface SPI com outras populares atualmente:

Tabela 3 - Comparação entre I²C, RS-232 e SPI


A faixa de frequência em que o I³C opera se estende a alguns kHz. As primeiras versões trabalham na faixa dos 100 kHz, depois surgiu a de 400 kHz (Modo rápido), 1 MHz (Fast Mode Plus) e 3,4 Mhz (Ultra Fast Mode).

A interface RS-232 possui apenas duas linhas para transferências de dados e a I³C possui uma linha de dados e outra de clock para conectar até 127 dispositivos.

Neste tópico, alguns exemplos de aplicações da interface SPI...


O chip Flash ROM do BIOS


Dentre os vários usos, a comunicação SPI é utilizada para conectar o chip de memória Flash ROM (onde está gravado o firmware do aparelho) ao Super I/O, como podemos ver na grande maioria das placas-mãe atuais.

Imagem 1 - Perceba o chip de 8 pinos ao lado da marca "Turbo Key"

O chip com o firmware (BIOS, POST, Setup) pode estar ligado diretamente ao Chipset Ponte-Sul, como é o caso do chipset AMD SB700 na ASUS M5A78L-M/USB3 da imagem acima, ou pode estar ligado ao chip Super I/O da placa-mãe. Lembrando que a Ponte Sul tem um Super I/O embutido, no entanto, mesmo assim há outro Super I/O externo, soldado na placa.


Caso não tenha visto o artigo sobre o Super I/O, CLIQUE AQUI!


Abaixo, você pode ver um chip de memória Flash ROM da marca Winbond.

Modelo de chip de memória Flash ROM da Winbond com interface SPI

Folder 1 - Lembrando que VCC e GND são para alimentação elétrica. /WP serve para proteger contra escrita. Tanto /HOLD quanto /WP são de uso opcional, não fazem parte da interface SPI e podem ser implementados através de um GP I/O do microcontrolador.

 

Módulos TPM


Outro sistema que pode utilizar a interface SPI são os módulos TPM (Trusted Platform Module), que criptografa os dados circulantes pelo computador. O conector TPM já possui espaço para a interface LPC e SPI. Veja o diagrama de um chip TPM com interface SPI abaixo:

Diagrama 5 - Os pinos PIRQ#, RESET# e GPIO não fazem parte da interface SPI.

O Diagrama 5 é dos modelos SLB 9670VQ2.0 e SLB 9670XQ2.0, da Infineon Technology.

 

Mouses ópticos Gamers / Mouses ópticos sem fio


Atualmente vemos um aumento considerável da complexidade do circuito de mouses e teclados, que além de servirem como interface pra uso do PC ganham mais e mais funções - algumas um tanto quanto superficiais.

Mouses que antigamente integravam apenas um único chip com sensor de imagem, DSP, gerenciamento de energia e interface com o PC agora são divididos em mais substratos complexos, tal como o mouse gamer Philco PMS70:

Imagem 2 - Mouse gamer Philco PMS70


O fabricante destaca as luzes RGB, sua resolução (em DPI) e seus sete botões configuráveis com 'grandioso atrativo' para comprar.


Ao pesquisarmos seu controlador, vimos que o PixArt PMW3325IC não é uma espécie de SoC tal como aqueles Multilaser baratões. :v

Veja o resumo da estrutura do chip:

Folder 2 - Chip sensor de imagem do mouse com interface SPI


Note que na tabela "Key Parameters", a interface SPI é descrita como sendo de três fios!

Isto ocorre pois, neste caso, a linha "MOSI" e "MISO" é substituída por apenas uma linha Half-Duplex "SDIO" (Serial Data Input / Output). Essa simplificação se deve ao sensor de imagem ter de enviar mais dados do que receber, afinal sua função é informar a movimentação do mouse.


Agora, um exemplo de mouse sem fio (Wi-Fi): o meu bom e velho Mitsuo M526G.

Imagem 3 - Mouse sem fio Mitsuo M526G


Ele também possui um sensor de imagem separado do MCU e conectado a ele por uma interface SPI:

Folder 3 - Chip sensor de imagem do mouse com interface SPI


Diferente do chip da PixArt, este Avago ADNS-5090 possui as linhas "MOSI" e "MISO".


Para saber mais sobre o funcionamento de mouses de bolinha e ópticos, CLIQUE AQUI!

Neste tópico algumas informações extras sobre a interface SPI...


Melhorias e retrocompatibilidade


Uma das vantagens da SPI em relação as outras é que cada fabricante pode aperfeiçoa-la da maneira que quiser, desde que mantenha a compatibilidade com todos os dispositivos. Um destes aperfeiçoamentos pode ser a taxa de transferência maior, como é o caso do chip de memória Flash Adesto AT45BD0100D que pode chegar a 66 Mbps (66 MHz de clock).

Sendo a interface SPI tão popular, recebeu algumas modificações ao longo dos anos. Vamos detalhar algumas delas abaixo:


Dual SPI: Uma extensão que faz as duas linhas de dados trabalharem em modo Half-Duplex, ou seja, as duas são utilizadas para enviar dados numa mesma direção, desta forma dois bits são transmitidos por pulso de clock. Para que este modo funcione, um dos dispositivos deve mandar um comando ao receptor pedindo o modo dual, sendo que após isso, a linha MOSI se torna SIO0 (Serial Input / Output 0) e passa a transmitir os bits pares e a linha MISO se torna SIO2 (Serial Input / Output 1) e passa a transmitir os bits impares.

Os dados ainda são transmitidos em msb, só que a linha SIO1 transmite os bits 7, 5, 3 e 1 de cada Byte, enquanto o SIO0 transmite os bits 6, 4, 2 e 0 de cada Byte.

Este modo é bastante utilizado em chips de memória ROM, que normalmente devem transferir uma grande quantidade de dados. Há duas variantes utilizados nestes chips de memória:

--> Os comandos de leitura de memória em modo dual aceitam o envio e o endereço do mestre no modo único e apenas retornam os dados no modo duplo.

--> Os comandos de Entrada / Saída dupla enviam o comando no modo único, depois enviam o endereço e retornam os dados no modo duplo.


CURIOSIDADE: Retorne ao Philco PMS70 e note que seu PixArt traz apenas uma linha de dados "SDIO" que opera em modo Half-Duplex, algo como um "Mono SPI".

Quad SPI: É adicionado duas linhas de dados extras (SIO2 e SIO3) que funcionam da mesma forma das linhas SIO0 e SIO1, desta forma, com 4 linhas em modo Half-Duplex, é possível transmitir quatro bits por ciclo de clock. Assim como no Dual SPI, deve ser utilizado um comando específico para ativar o modo Quad, sendo que este comando é enviado em modo SPI padrão. Há duas variantes do Quad SPI:

--> Os comandos são enviados em linha única, mas endereços e dados são transferidos de um dispositivo para outro no modo Quad.

--> Os comandos e endereços enviados em uma única linha, mas dados transferidos de um dispositivo pro outro utilizam as quatro linhas.

QPI / SPI: Uma extensão do modo Quad SPI que permite que até mesmo os comandos sejam transferidos em modo Quad. Outra extensão aplicada em alguns dispositivos com interface Quad SPI permite que se utilize o padrão DDR (Double Data Rate - Dupla Taxa de Transferência), fazendo com que o modo Quad transmita 8 bits por pulso de clock (dois bits em cada linha SIO).


ATENÇÃO: Não confunda QPI / SPI com a tecnologia QPI (QuickPath Interconnect) dos processadores da Intel ou com a tecnologia Serial I / O Quad, abreviada pela sigla SQI.

eSPI: Uma extensão criada pela Intel Corporation chamada de Enhanced Serial Peripheral Interface, feita para substituir o velho barramento LPC (Low Pin Count), que era baseado no padrão ISA. O padrão eSPI trouxe uma menor quantidade de trilhas ao projeto, redução da tensão de trabalho para cerca de 1,8 Volts e aumento significativo do desempenho.

O eSPI inclui uma linha Alert# para cada escravo conectado ao mestre, isso faz com que quando um dispositivo escravo fizer uma requisição puxando o sinal para LOW, o mestre conceda imediatamente. Em projetos de orçamento limitado, o mestre pode ter apenas uma linha Alert# conectada em todos os escravos, só que quando um deles fizer uma requisição ao mestre, ele deverá verificar todos os dispositivos presentes no barramento para achar o respectivo pedinte. Quando todos os escravos do barramento são atendidos, o sinal da linha Alert# é puxado para HIGH.

Na interface eSPI, as linhas do barramento SMBus e de GPI/O podem ser implementadas de forma virtual, reduzindo ainda mais os custos com o projeto, diferente do barramento LPC, onde qualquer linha GPI/O, SMBus ou outra interface deveria ser implementada separadamente. Endereçamento de memória de 64 bits também é permitido no eSPI, mas só é habilitado quando não há endereços de 32 bits.

O eSPI é completamente retro-compatível, ou seja, um dispositivo com esta tecnologia pode compartilhar o barramento SPI comum afim de reduzir custos de projeto, ou pode utilizar um barramento exclusivo, o que significa mais desempenho, e que é muito utilizado em chips de memória Flash ROM.

A especificação eSPI permite que os projetistas usem comunicações de 1 bit por ciclo (SPI padrão), 2 bits por ciclo (Dual SPI) ou 4 bits por ciclo (Quad SPI) em clocks de 20 a 66 Mhz, tudo isso para permitir uma ampla versatilidade, possibilitando a criação de dispositivos de alto desempenho ou de baixo custo sem mudar drasticamente as especificações da interface.

Outra novidade é que, escravos eSPI têm permissão para usar o mestre como um proxy para executar operações de escrita / leitura em outro escravo, só que utilizando o nome do dispositivo eSPI solicitante. Isto pode ser utilizado em chips de memória Flash ROM escravos com interface SPI padrão.

Para finalizar, devemos lembrar que há uma interface com nome parecido, a SSI, sigla para Synchronous Serial Interface (Interface Serial Síncrona) e possui grandes diferenças se comparada com a SPI, portanto, não as confunda, pois de parecido elas só possuem o nome. Vamos detalhar o SSI em artigos futuros.


Gostou do artigo? Achou que falta alguma coisa? Mande uma mensagem pelo Facebook ou pelo hardwarecentrallr@gmail.com. Compartilhe este conteúdo e ajude a divulgar e espalhar conhecimento!

 

FONTES e CRÉDITOS

Texto, tabelas e imagens: Leonardo Ritter

Referências: Embarcados.com; Datasheets da PixArt e Avago; Wikipedia (Somente artigos com fontes verificadas!); BuidBot.com; Biblioteca de datasheets e esquemas elétricos do Hardware Central.


Última atualização: 16 de Outubro de 2022.

1.830 visualizações

O Hardware Central abandonou de vez o Facebook. Não temos mais fanpage e a caixa de comentários que aqui habitava foi chutada pra longe! Não somos Mainstream! Redes socias não combinam com nós! Somos a galera dos livros!

Como também repassamos conteúdo de terceiros, não é justo restringir a cópia! O uso do conteúdo do HC e de toda a internet deve ser livre!

Para relatar erros, incongruências ou sugerir conteúdo, nos chame pelo hardwarecentrallr@gmail.com! Não somos perfeitos, mas sempre é possível melhorar!

bottom of page