Salve, che tipologie di bus si utilizzano solitamente quando si vogliono collegare 2 processori (master) oltre che tra loro anche a dei devices (ovvero a delle risorse hw condivise)? Sò che l'I2C prevede già la gestione delle collisioni ma è half-duplex mentre l'SPI non prevede la gestione delle collisioni ma è full-duplex e più veloce...
...cosa mi consigliate? (Il tutto va su pcb).
Grazie
Didn't find your answer? Ask the community — no account required.
F
F. Bertolazzi
MrRipple:
Visto che nessun altro si arrischia, ti faccio notare che lo SPI ha un clock separato dai dati, che è pilotato solo dal master, che quindi deve essere unico. Direi che puoi simulare la presenza di un secondo master con un segnale che va da questo al master vero e proprio e lo "obbliga" ad avviare il clock. Essendo la comunicazione bidirezionale il risultato è praticamente lo stesso che se fossero due master.
Per quanto riguarda i chip select puoi o lasciarli gestire dal "master principale" che, quando riceve l'interrupt dal "master secondario", si aspetterà per prima cosa l'indirizzo del chip select da abilitare per il byte successivo, oppure pilotarli con entrambi i master, mettendo una resistenza di pull-up vicino ad ogni slave e pilotando i chip select tra due soli stati, ovvero basso o alta impedenza.
Il bus I2C è a collettore aperto, quindi le collisioni logiche non sono collisioni elettriche. E' appunto per mancanza di un elemento attivo che "tira su" il segnale che è più lento dello SPI.
Per questo motivo non vedo altre soluzioni multi-master in SPI, perché nella situazione in cui nessuno dei due master ha il controllo, il clock ed i chip select rimarrebbero "appesi", fatto che potrebbe dare origine a situazioni molto incresciose, tipo Radio Vaticana che viene interpretata come clock.
Insomma, salvo tu non abbia periferiche semplici tipo shift register, necessità di comunicazione veloce oppure se usi controller che non hanno un'apposita periferica, lascerei perdere lo SPI ed andrei sull'apposito IIC.
M
MrRipple
Grazie per la risposta... e scusa per il ritardo della mia... anche io mi sono autoconvinto che l'unico modo "decente" è quello di utilizzare un I2C... e la tua risposta me ne dà una giustificata conferma...
grazie ancora. ciao
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.