LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: KammutierSpule em 18 de Março de 2014, 15:49

Título: SPI modo slave - protocolo / maquina de estados
Enviado por: KammutierSpule 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:
Título: Re: SPI modo slave - protocolo / maquina de estados
Enviado por: Njay 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...
Título: Re: SPI modo slave - protocolo / maquina de estados
Enviado por: KammutierSpule 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.

:/
Título: Re: SPI modo slave - protocolo / maquina de estados
Enviado por: senso 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.
Título: Re: SPI modo slave - protocolo / maquina de estados
Enviado por: Njay 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.