Comunicação SPI – Parte 1

SPI
Este post faz parte da série Comunicação SPI. Leia também os outros posts da série:

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

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

PushPull_PullUp

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

SPI

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.

device

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:

cpol_1
SPI

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

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

Outros artigos da série

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.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
26 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
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 »

Fernando França
07/12/2015 14:20

Parabéns pelo excelente artigo, muito didático.

Francesco Sacco
Reply to  Fernando França
14/12/2015 14:25

Obrigado Fernando.
Fico feliz que tenha gostado.

Francisco Márcio Braga Freitas
Márcio Freitas
07/10/2015 11:55

Parabéns, Francesco, pelas informações, pois elas são muito úteis para quem trabalha com microcontroladores como eu. Valeu!

Francesco Sacco
Reply to  Márcio Freitas
14/12/2015 14:26

Olá Márcio,
Que bom que gostou. A ideia era dar uma explicação bem detalhada para quem não conhecia o SPI, ou apenas utilizava e não tinha ideia de como funcionava.
Obrigado pelo retorno. 🙂

ANTONIO CARLOS SOARES DA SILVA
Antonio Soares
14/01/2015 20:57

parabéns gostei muito!!!!!!!!!!!!

Francesco Sacco
Reply to  Antonio Soares
15/01/2015 14:40

Olá Antonio,
Obrigado pelo retorno. Fico feliz que tenha gostado.
Um abraço.

Marcelo Rodrigo Dos Santos Andriolli
Marcelo Andriolli
05/05/2014 09:21

Parabéns Francesco!! Algo que acho que seria bacana, é apresentar algumas ferramentas de depuração para comunicação digital, como por exemplo analizador lógico.

Francesco
Reply to  Marcelo Andriolli
05/05/2014 16:08

Olá Marcelo,
Gostei da idéia. Acho muito bom o Logic8 da SaleAE. Vou arrumar um e fazer um artigo sobre as depurações.
Valew.

Marcelo Rodrigo Dos Santos Andriolli
Marcelo Andriolli
Reply to  Francesco
05/05/2014 19:00

Legal Francesco! Novamente parabéns pelo artigo!

Talvez você goste:

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services