Comunicazione SPI tra 2 MCU

Ho la necessità di comunicare una serie di parametri gestiti da una board con ATMEGA1284P ad una altra board sempre con ATMEGA 1284P.
Per una serie di motivi ho deciso di utilizzare la trasmissione dati tramite protocollo SPI, quindi utilizzando una MCU come Master e una come Slave , che pero’ e’ la prima volta che mi accingo ad utilizzare. Non consigliatemi di usare la I2C o la seriale, vorrei usare la SPI (e’ anche l’ occasione giusta per imparare ad usarla :)).
Il master deve interrogare lo slave quando ne ha necessita’.
Ho studiato un po la Libreria SPI, pero’ mi pare di aver capito che funziona solo come master, quindi non so come far funzionare lo slave.
Sto cercando anche in rete, ma sto avendo qualche difficoltà!

Potete darmi una mano a capire come procedere? c’e’ qualche altra libreria che devo usare?
Grazie

Deltoz:
Ho studiato un po la Libreria SPI, pero' mi pare di aver capito che funziona solo come master, quindi non so come far funzionare lo slave.
Sto cercando anche in rete, ma sto avendo qualche difficoltà!

La libreria SPI di Arduino funziona solo come master, per la modalità slave devi scriverti una tua libreria e/o set di funzioni.
Sei cosciente del fatto che la SPI non può comunicare a distanze maggiori di pochi cm ?

Devo scrivermela io ? possibile che non abbiano previsto questa possibilita’ ? Non c’e’ alcuna libreria non ufficiale da poter usare?
io me la scriverei pure, ma non so di preciso come funziona il protocollo, quindi non saprei come procedere.
Come distanza ho fatto delle prove con SD su cavo flat e fino a 40-50 cm non ho riscontrato problemi, anche a velocita’ alta. quindi mi basta.

Deltoz:
Devo scrivermela io ? possibile che non abbiano previsto questa possibilita' ?

Non è stato previsto per il semplice motivo che i micro sono sempre master, solo le periferiche sono dei slave in SPI.
Non è una cosa molto intelligente utilizzare la SPI come bus per far comunicare due micro, ci sono sistemi migliori e meno critici, p.e. la RS485 che permette velocità altissime anche su cavi lunghi.

Capisco.
Bhe' tra le altre motivazioni per cui vorrei usare la SPI e' che ho a disposizione solo 1 pin sulla MCU Master a disposizione, non posso usare gli altri sistemi di trasmissione.
Ho provato ad usare il protocollo manchester per trasmissione su singolo pin, funziona anche, ma vorrei trovare il modo per utilizzare la spi.
Anche se inusuale devo trovare un modo per farlo, spero che ci sia qualcuno che abbia gia' sviluppato una libreria che posso utilizzare. Altrimenti devo capire come fare per scrivermela io (limitatamente alle mie capacita' da autodidatta).

http://forum.arduino.cc/index.php/topic,22187.0.html

puo' funzionare?

Deltoz:
Capisco.
Bhe' tra le altre motivazioni per cui vorrei usare la SPI e' che ho a disposizione solo 1 pin sulla MCU Master a disposizione, non posso usare gli altri sistemi di trasmissione.

Sarà un pochino difficile usare la SPI con un solo pin visto che ne servono almeno tre :slight_smile:

Eddai.....
e' vero che sono sprovveduto....ma mica fino a sto punto!!! :stuck_out_tongue:
Intendo dire 1 pin utile da usare come SS oltre ai MISO MOSI e CLK......gia' usati con altri dispositivi con altri SS....

Deltoz:
e' vero che sono sprovveduto....ma mica fino a sto punto!!! :stuck_out_tongue:
Intendo dire 1 pin utile da usare come SS oltre ai MISO MOSI e CLK......gia' usati con altri dispositivi con altri SS....

Se usi la RS485 ti servono solo due pin in totale contro i 3-4 della SPI.

Forse mi devo essere espresso male.
Io sul Master la SPI la uso gia' per gestire altri dispositivi, quindi non posso liberare MOSI MISO e CLK.
Mi e' rimasto 1 solo pin digitale, che potrei usare come SS per il dispositivo Slave che intendo gestire.
Non posso usare trasmissioni seriali 2 fili.....ne ho solo 1 disponibile.
Ho trovato altro... Gammon Forum : Electronics : Microprocessors : SPI - Serial Peripheral Interface - for Arduino

Interessante.