collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
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.598
    • 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...

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
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.733
  • 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.598
    • 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.