Fork me on GitHub

05/03/13

Comunicação SPI

Comunicação SPI(Serial Peripheral Interface )





A Serial Peripheral Interface é um protocolo de dados seriais síncronos utilizado em microcontroladores para comunicação entre o microcontrolador e um ou mais periféricos. Também pode ser utilizado entre dois microcontroladores.


A comunicação SPI sempre tem um Master, isto é, sempre um será o Master e o restante será Slave. Por exemplo, o PIC é o Master e os outros periféricos são Slave. Esta comunicação contém 4 conexões:

  • MISO (Master IN Slave OUT) - Dados do Slave para Master;
  • MOSI (Master OUT Slave IN) - Dados do Master para Slave;
  • SCK (Serial Clock) - Clock de sincronização para transmissão de dados entre o Master e Slave;
  • SS (Slave Select) - Seleciona qual escravo receberá os dados.
 
Alguns periféricos são apenas Slave, por exemplo, cartão SD, memória flash e alguns sensores.
Geralmente estes periféricos contém a mesma pinagem que acima ou a pinagem abaixo:
  • SDI (Slave Data IN) - Pino de dados de entrada;
  • SDO - (Slave Data OUT) - Pino de dados de saída;
  • CS - Seleção de Chip;
  • SCK - Clock de sincronização.
Vantagens:
  • Comunicação full duplex; 
  • Flexibilidade protocolo completo para os bits transferidos; 
  • Não se limita a 8-bit palavras;
  • Escolha arbitrária do tamanho da mensagem, conteúdo e finalidade Interface de hardware extremamente simples;
  • Normalmente mais baixos requisitos de energia do que I2C devido a menos circuitos;
  • Não necessita de resistores de pull-up;
  • Escravos usar relógio do mestre, e não precisam de osciladores de precisão; 
  • Os escravos não precisa de um endereço único;
 Fonte: wikipedia
Desvantagens:
  • Requer mais pinos do CI;
  • Sinais de out-of-band Chip Select são obrigatórios nos barramentos comuns;
  • Sem controle de fluxo de hardware pelo escravo (mas o mestre pode atrasar o clock seguinte para diminuir a taxa de transferência);
  • Não há reconhecimento do escravo (o mestre poderia estar transmitindo a lugar nenhum e não saberiamos);
  • Suporta apenas um dispositivo mestre;
  • Nenhum protocolo de verificação de erros é definido;
  • Geralmente propenso a causar picos de ruído em comunicação defeituoso;
  • Sem um padrão formal, validar a conformidade não é possível;
  • Lida apenas com curtas distâncias em relação ao RS-232, RS-485, ou CAN-BUS;
  • Muitas variações existentes, o que torna difícil encontrar ferramentas de desenvolvimento, como adaptadores de host que suportam essas variações;
Fonte: wikipedia


Exemplo:
Este exemplo controla o potenciômetro Digital AD5206. Possui 6 canais, isto é, 6 potenciômetros. Possui os seguintes pinos: A1, W1, B1 ... A6, W6, B6.


Código: Exemplo com PIC
MikroC PRO PIC
sbit CS0 at RC0_bit;
sbit CS0_Direction at TRISC0_bit;


void AD5206_write(short channel, short value){
CS0 = 0; //seleciona o periferico
SPI1_Write(channel); //envia o endereço de um dos potenciometros(0 - 5)
SPI1_Write(value);  //envia o valor de posicao do potenciometro(0 - 255)
CS0 = 1; //deseleciona o periferico
}

void main() {
int i;
CS0_Direction = 0; //define pino cs como saida
CS0 = 1;

 SPI1_Init();
 
 while(1){
//este loop faz alterar o valor do potenciometro do canal 0
  for(i=0; i<255; i++){
   AD5206_Write(0, i);//incrementa de 0 a 255
   delay_ms(100);
  }
  
//este loop faz alterar o valor do potenciometro do canal 0
  for(i=255; i>=0; i--){
   AD5206_Write(0, i);//decrementa de 255 a 0
   delay_ms(100);
  }
 }
}





Código: Exemplo com Arduino
Arduino IDE



7 comentários:

  1. Olá, no codigo em C, onde estão as rotinas SPI1_Init e SPI1_Write? Obrigada

    ResponderExcluir
    Respostas
    1. SPI1_Write e SPI1_Init são da biblioteca SPI, do próprio MikroC PRO PIC.

      Excluir
    2. vc tem alguma coisa semelhante pro compilador HITECH? Obrigada pela ajuda

      Excluir
  2. Olá Tiago será que você pode me ajudar com o CI ISD1730? é um ci para gravação e reprodução de faixas de áudio, ele trabalha com comunicação SPI, porém não estou conseguindo fazer o microcontrolador acessar a faixa de memória exata que gravei a mensagem e no tempo certo de reprodução. meu e-mail é henrique-sousa1994@hotmail.com

    ResponderExcluir
  3. É possível fazer a comunicação spi com o pic 16f628A?
    Vc teria algum exemplo usando o RTC DS1302?

    ResponderExcluir

Postagens Relacionadas!!