Hardware - Interface SPI

Hardware - Interface SPI

29/08/2018

| Escrito por:

  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 foi desenvolvida pela Motorola e acabou virando popular na eletrônica digital.

  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.

 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 mas, mesmo assim há outro Super I/O externo, soldado na placa.

  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:

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

 

  Este diagrama acima é dos modelos SLB 9670VQ2.0 e SLB 9670XQ2.0 da Infineon Technology.

 

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

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.

 

  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. 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 e, dentre estes 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).

  Vamos comparar a interface SPI com outras populares atualmente:

  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.

  Caso não tenha visto o artigo sobre o Super I/O, clique aqui!

   É uma comunicação Full-Duplex (pode-se enviar e receber dados ao mesmo tempo) que exige no mínimo 4 fios. A nomenclatura e utilidade de cada fio é mostrada na tabela abaixo:

  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,

  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 a um mestre de SPI, deverá haver 6 fios, sendo três para selecionar cada um dos escravos. Veja o desenho abaixo para entender melhor:

  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 a 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.

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

  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. 

  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':

  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).

  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:

  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:

 Estes transistores obviamente estão embutidos no controlador SPI

 

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

 

  A interface SPI se tornou tão popular que recebeu algumas modificações. 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, 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 chip's de memória ROM, que normalmente devem transferir uma grande quantidade de dados. Ha 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.

 

 > 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).

  ----> 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 uma 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 clock's 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; Wikipedia(Somente artigos com fontes verificadas!); BuidBot.com; Biblioteca de datasheets e esquemas elétricos do Hardware Central.

Please reload

© 2019 Hardware Central Tecnologia Entretenimento e Comunicação do Brasil Ltda. Todos os direitos reservados.

Wix Editor / Revisão da web page: 3.0/2019 (07/10/19)