Comunicação SPI – Parte 1

SPI
Este post faz parte da série Comunicação SPI

O objetivo deste artigo é definir os princípios da comunicação SPI (Serial Peripheral Interface), quais são suas vantagens e onde esses dispositivos são utilizados. Também vamos analisar os fundamentos básicos de hardware.

Tipos de Comunicação Serial

Uma vez que os equipamentos eletrônicos vêm agregando mais e mais funções, a utilização de diversos circuitos integrados torna-se cada vez mais comum. No entanto, não é mais possível estender longos barramentos de comunicação paralelos, pois tornariam as placas de circuito impresso caras e muito grandes. Logo, uma comunicação serial entre esses dispositivos se torna necessária.

Diversas tecnologias de interligação serial entre dispositivos foram desenvolvidas, podendo ser separadas em duas grandes categorias, a comunicação síncrona e a comunicação assíncrona. Dentre os métodos de comunicações mais conhecidos, destacam-se três:

  • UART: Universal Asynchronous Receiver Transmitter;
  • SPI: Serial Peripheral Interface;
  • I2C: Inter Integrated Circuit.

Já estamos bastante familiarizados com a comunicação serial assíncrona pelo uso do padrão UART (RS232). No entanto, existem grandes vantagens no uso de uma comunicação serial síncrona (SPI, I2C e I2S) em detrimento da assíncrona.

Além disso, há grandes diferenças mesmo entre os protocolos síncronos. Apesar do padrão de cada protocolo definir limites máximos de taxas, cada fabricante possui a liberdade de desenvolver dispositivos com suas velocidades. Abaixo temos um comparativo entre diversos padrões dispositivos seriais:

Tecnologia

Barramento de comunicação

Taxa máxima

Fluxo de dados

UART (RS232)

2 (sem controle de fluxo)

115.200 bps

Half ou Full Duplex

SPI

3 + nº de Slaves

2 Mbps

Full Duplex

I2C

2 (até 127 dispositivos)

400 Kbps

Half Duplex

Como um exemplo de que esses limites podem ser ultrapassados, temos AT45BD0100D da Adesto. Essa memória SPI pode chegar até 66MHz (66Mbps) de taxa de transferência. Para o I2C, o 24FC64 da Microchip pode chegar a 1MHz (1Mbps).

Na comunicação serial síncrona definimos também o conceito de Mestre-Escravo. Normalmente o gerador do sinal de sincronismo é definido como o Mestre (Master) da comunicação. Para os dispositivos que utilizam do sinal de sincronismo gerado damos a definição de Escravo (Slave). A ligação mais comum desse tipo de comunicação é um Master e vários Slaves.

master_slave

Comunicação SPI

A comunicação SPI possui algumas características básicas. Primeiramente os sinais de comunicação possuem uma direção fixa e definida. Isso significa que sempre existem dois transistores definindo o estado de um pino (Push-Pull). Essa característica é uma das grandes diferenças entre outras comunicações seriais como I2C e OneWire, que possuem um mesmo barramento de dados para os sinais de entrada e saída através do esquema de dreno-aberto (Pull-Up).

Apesar de utilizar dois sinais de comunicação de dados em vez de um, é possível atingir velocidades maiores de comunicação. Isso porque há pouca deformação do sinal.

Outra característica é que toda troca de dados acontece sempre em ambas as direções. Em outras palavras, cada bit trocado entre o Master e um Slave trás um bit do Slave para o Master. Dessa forma, definimos que a comunicação é sempre full-duplex.

Os pinos básicos de comunicação entre dispositivos SPI e o esquema padrão de ligação são dados conforme abaixo:

Pino

Nome Padrão

Significado

Nomes Alternativos

Do Master para o Slave

MOSI

Master Output Slave Input

SDO, DO, SO

Do Slave para o Master

MISO

Master Input Slave Output

SDI, DI, SI

Clock

SCLK

Serial Clock

SCK, CLK

Seleção de Slave

SS

Slave Select

CS, nSS, nCS

O sinal de SS da SPI funciona como Seleção de Escravo (Slave Select). É um sinal ativo em nível baixo, o que significa que o dispositivo é selecionado quando este pino se encontra em nível baixo. No entanto, muitos dispositivos utilizam este sinal como sincronismo de frame. Dessa forma, é um sinal importante que deve ser respeitado.

O Dispositivo

O princípio básico de um dispositivo SPI é o Shift-Register. Esse tipo de dispositivo faz a conversão de um registrador paralelo para sinais seriais de acordo com clock. Cada borda recebida no terminal de clock do dispositivo significa um bit transferido. Da mesma forma esse tipo de dispositivo é capaz de receber dados vindos de maneira serial e convertê-los para um valor em um registrador paralelo.

ShiftRegisterSemParalela

A SPI não apenas é capaz de fazer essa conversão serial/paralelo, como também possui o gerador de clock, o controle para a troca do frame e o slave-select. Dessa forma, tornando ele um dispositivo de comunicação completo. Na figura abaixo podemos observar como ele se dispõe.

Forma de Onda

Por padrão a comunicação SPI permite a configuração das bordas de comunicação do clock através de sua polaridade e fase. A configuração da polaridade se dá através de CPOL (Clock Polarity), e a configuração da fase se dá através de CPHA (Clock Phase). Seus modos possíveis são:

Modo

CPOL

CPHA

Borda de troca

Transição

Nível em IDLE

0

0

0

Subida

Meio do bit

1

1

0

1

Descida

Começo do bit

0

2

1

0

Descida

Meio do bit

0

3

1

1

Subida

Começo do bit

1

Outra característica fundamental na comunicação SPI é a definição da posição do bit mais significativo (MSB). Através de DORD é possível definir que o bit mais significativo será o primeiro (DORD = 0) ou o último (DORD = 1) bit trocado. É possível observar todas essas características através das duas imagens abaixo:

Conclusão – Comunicação SPI

Pudemos observar as principais características da comunicação SPI, além de um comparativo de hardware com outros tipos de comunicação. Observamos diagramas do funcionamento do dispositivo e entendemos como se dá a forma de onda.

No próximo artigo vamos entender quais são as principais características de software para sua comunicação, utilizando o Arduino como hardware base. Também vamos estudar a estrutura de software com um dispositivo de mercado.

E a série continua

Leia também a sequência desse artigo em Comunicação SPI – Parte 2, onde abordamos mais detalhes de comunicação e os fundamentos básicos de software, e Comunicação SPI – Parte 3, onde apresentamos um exemplo de comunicação entre um microcontrolador AT89S8253 e uma memória 25LC256.

Referências para SPI

https://gse.ufsc.br/~bezerra/disciplinas/ProgPerif/sem04.2/Seminarios/RicardoPlaner/Apresentacao.htm
https://www.youtube.com/watch?v=QMNck8nKw-k
https://www.ni.com/example/31163/en/
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
https://home.kpn.nl/thomas_7/1wire/1wire_isolating.html
https://www.adestotech.com/sites/default/files/datasheets/doc3639.pdf
https://ww1.microchip.com/downloads/en/DeviceDoc/21189T.pdf

Comunicação SPI

Comunicação SPI – Parte 2
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
25 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Sebastião
Sebastião
05/02/2023 12:24

Muito bom, parabéns.

MArcos
MArcos
28/01/2023 11:56

Muito didático e bem elaborado o artigo, obrigado pelo empenho em compartilhar o conhecimento!

Hayoatha
Hayoatha
13/02/2022 12:45

Muito Obrigado, ajudou bastante. Mas acho que tem um erro na tabela Nome e Nome alternadido. O Alternativo do MISO deveria ser o SDO ou DO e não DI ou SDI. Pelo menos na Maioria dos Esquemas Elétricos que vi são assim.

Eduardo
Eduardo
04/06/2021 16:19

Caro Francesco obrigado por sua exposição. Estou usando um arduino com 3 periféricos fazendo comunicação SPI. 2 termopares controlados por dois Max 31856 e 1 cartão SD. Acontece que eu não consigo fazer os dois Max lerem as temperaturas e o SD receber os valores e gravar, ao mesmo tempo. Usando a biblioteca SD.h, os Max funcionam e leem temperaturas, mas não ocorre a gravação dos dados no SD. Usando a biblioteca SdFat.h, ocorre a comunicação entre o arduino e o cartão SD, ocorrendo a gravação, mas os valores de temperatura nos termopares permanecem zerados, ou seja, provavelmente não há… Leia mais »

OLICIO DA SILVA JUNIOR
OLICIO DA SILVA JUNIOR
06/12/2020 14:37

Muito bom, comunicação clara e objetiva, parabéns!

João Garcia
João Garcia
02/12/2020 12:18

Excelente, Francesco! Muito didática a sua explicação.

Luciano
Luciano
09/05/2020 03:01

Bom dia. Você poderia me indicar alguém que pode me ajudar com um projeto de eletrônica da faculdade? Mediante pagamento, claro. Envolve microcontroladores e o protocolo SPI. Agradeço.

Lucas Daniel
Lucas Daniel
28/12/2019 08:48

Bom dia, estou efetuando um projeto no arduino Mega 2560 onde uso um display no qual usa os mesmos pinos padrões do módulo RFID RFC 522, é possível alterar as portas para comunicar ambos dispositivos?

Lucas Ribeiro Santana
Lucas Ribeiro Santana
06/06/2018 15:44

Olá Francesco! Sou estudante do curso técnico de eletrônica na ETEC Takashi Morita, e estou com dificuldade para compreender algumas coisas referentes aos protocolos SPI e I2C, sobre qual devo usar e entendê-los melhor.
Enfim, estou fazendo um projeto de TCC que consiste em uma fechadura NFC, onde usarei o arduino, uma shield para motores DC e uma outra shield leitora de NFC, gostaria apenas de saber qual protocolo devo usar? ou como devo escolher entre protocolos? (o que devo levar em conta para a decisão ou se devo consultar alguma especie de Datasheet).
Agradeço desde já, ótimo conteúdo!

Fernando
Fernando
16/02/2018 21:01

Caro, poderia confirmar os nomes alternativos dos pinos MISO e MOSI, em outras documentações estão MISO->SO e MOSI->SI.

Francesco Sacco
Francesco Sacco
Reply to  Fernando
20/02/2018 15:32

Entre na discussãoOlá Fernando, Sim, dependendo do fabricante existem nomes alternativos. Mas é bom ficar atento, porque o funcionamento muda também. Usando a Atmel como exemplo, os nomes são MISO (Master Input Slave Output) e MOSI (Master Output Slave Input). Perceba que o pino MISO vai ser entrada se o SPI estiver configurado como Master, e será saída se estiver configurado como Slave. Já a Microchip, por exemplo, coloca SI (Serial Input) e SO (Serial Output). No entanto, SI é sempre entrada, não importa se está como Master ou como Slave. Se estiver configurado como Master, o SI está fazendo… Leia mais »

Home » Hardware » Comunicação SPI – Parte 1

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: