collapse

* Links de Robótica

* Posts Recentes

Apresentação por beirao
[Hoje às 22:47]


Díodo schottky por beirao
[Hoje às 22:46]


Fonte de Alimentação Simétrica com carregadores por Njay
[Hoje às 21:06]


pasta de soldar por fergas
[Ontem às 11:47]


duvidas sobre utilização de um osciloscopio(zito) num circuito básico por vasco
[19 de Agosto de 2017, 01:09]


A Paixão da Física Walter Lewin , Warren Goldstein por Njay
[18 de Agosto de 2017, 11:45]


Gerar CPL file a partir dos Gerbers? por Hugu
[18 de Agosto de 2017, 00:22]


Ajuda num relógio para termoacumulador por dennis_boy
[17 de Agosto de 2017, 00:07]


Aspiração para CNC por LVirtual
[14 de Agosto de 2017, 17:34]


Ligar motor de drive de DVD por jm_araujo
[14 de Agosto de 2017, 09:25]

Autor Tópico: SPI modo slave - protocolo / maquina de estados  (Lida 1247 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Online KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.103
SPI modo slave - protocolo / maquina de estados
« em: 18 de Março de 2014, 15:49 »
Alguem ja implementou ou consegui indicar leituras (tutorials / app notes) para a implementacao num MCU de SPI em modo slave, relativamente a "como fazer o protocolo / maquina de estados" ?

As minhas duvidas sao:
  • Como implementar inicio do comando?
  • É possivel usar o nSS para fazer clear à rececpao do comando?
  • Como lidar com comandos de escrita / leitura e envio / rececpao de buffer de dados?
  • Como detectar e recuperar erros na trama?
« Última modificação: 18 de Março de 2014, 15:56 por KammutierSpule »

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.057
    • Tróniquices
Re: SPI modo slave - protocolo / maquina de estados
« Responder #1 em: 18 de Março de 2014, 17:04 »
Em geral decides tu... o SPI em si decide pouco mais do que como é que bytes é trocado entre 2 dispositivos.

O que geralmente marca o inicio da transmissão (e o fim) é a linha de select, que pode funcionar como um "enable" do clock do registo de dados. Activas o select, mandas um pacote (conjunto de bytes) e desactivas o select. Fica assim bem marcado o inicio e o fim do pacote.

Decides o protocolo que queres ter. Pode ser por exemplo pacotes de tamanho fixo, pacote com o tamanho do pacote no 1º byte, o mesmo 1º byte tem o tipo de pacote/mensagem e cada tipo tem um tamanho fixo, etc etc.

Se algures a meio da recepção do pacote a linha de select é desactivada, deitas tudo fora e voltas ao inicio. Contudo, tu é que decides como queres fazer.

Em geral o bus é de "proximidade" e não há erros de transmissão... mas se quiseres apontar para uma cena tipo "militar" ou "aeroespacial" podes sempre ter um ou mais bytes de CRC/checkshum no pacote (ou encriptar, etc etc).

Mas basicamente se és tu que tás a fzer ambos os lados da comunicação, tu é que decides como queres fazer dentro das limitações/comportamento do bus...

Online KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.103
Re: SPI modo slave - protocolo / maquina de estados
« Responder #2 em: 18 de Março de 2014, 19:03 »
O que geralmente marca o inicio da transmissão (e o fim) é a linha de select, que pode funcionar como um "enable" do clock do registo de dados. Activas o select, mandas um pacote (conjunto de bytes) e desactivas o select. Fica assim bem marcado o inicio e o fim do pacote.

Se algures a meio da recepção do pacote a linha de select é desactivada, deitas tudo fora e voltas ao inicio.

'E suposto existirem mecanismos no MCU para suportar isto (detectar inicio e final o SS)?

Os MCUs quando activam o modo SPI, tem um interrupt para quando recebem um byte via SPI. Isto serve para Master ou Slave.
Quando activamos o modo SPI Salve, o SPI core do MCU vai usar a linha SS para aceitar o shift de dados feito pelo CLK do Master.

Mas sera possivel configurar a linha SS como interrupcao externa num MCU ao mesmo tempo que esta configurada para SS do modulo SPI??
O ideal eh que desse e essa interrupcao tivesse prioridade ah interrupcao do SPI, assim dava para implementar o inicio / fim nessa interrupcao tal como disseste.

Os poucos (um ou dois apenas) exemplos que consegui encontrar, usam apenas o byte recebido para fazer o protocolo, nao detectando o inicio final da trama pela linha SS.

:/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.359
  • Helpdesk do sitio
Re: SPI modo slave - protocolo / maquina de estados
« Responder #3 em: 18 de Março de 2014, 19:26 »
Se a linha SS gera uma interrupção quando vai a low, não precisas de mais nenhuma interrupção, digo eu.
Em micros mais antigos, não tens tipicamente um controlador de interrupções com prioridades configuraveis, em coisas mais recentes tens(tipo ARM).

Sei que num atmega, se o configurares como slave, assim que mexes no SS ele gera uma interrupção, a partir dai tratas do teu código, SPI é algo extremamente simples, é pouco mais que dois shift-registers.
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.057
    • Tróniquices
Re: SPI modo slave - protocolo / maquina de estados
« Responder #4 em: 18 de Março de 2014, 21:38 »
Tens que ver os detalhes no micro que queres usar. Em último caso implementas o SPI em software, mas duvido muito que tenhas que chegar a esse ponto excepto se o micro que queres usar não tiver periférico SPI.