Domanda:
Solo il master può avviare la comunicazione in SPI mentre in I2C lo slave può anche avviare la comunicazione?
Prawn Hongs
2019-05-13 09:08:48 UTC
view on stackexchange narkive permalink

È possibile che uno schiavo inizi la comunicazione in SPI?

Ho pensato che a causa della selezione del chip, ovvero la funzione NSS, solo il master può comunicare la comunicazione.Tuttavia, in I2C, lo slave può anche iniziare la comunicazione cambiando il flag RW nella comunicazione i2c.È corretto?

Solo per aggiungere risposte esistenti, un approccio comune a questo sarebbe quello di utilizzare un pin GPIO separato come interruzione che segnala al master che lo slave ha dati letti da leggere.
@Prawn_Hongs puoi chiarire cosa intendi per "iniziare"?Penso che potresti confonderti con la lettura / scrittura dei dati master / slave.
Cinque risposte:
TemeV
2019-05-13 09:39:58 UTC
view on stackexchange narkive permalink

Con entrambi solo il master può avviare la comunicazione.Tuttavia, I²C può avere più master ei nodi possono cambiare i ruoli, quindi è un po 'più flessibile.Ma dire che lo schiavo potrebbe iniziare la comunicazione non è ancora corretto.

Un modo comune in cui uno slave indica che desidera comunicare con il master è utilizzare un segnale di interruzione.Su molti sensori e ADC sono chiamati "dati pronti" o qualcosa di simile.Dopo che uno slave ha affermato il segnale, il master sa che lo slave ha alcuni nuovi dati disponibili.

user
2019-05-13 15:44:54 UTC
view on stackexchange narkive permalink

Sia SPI che I2C consentono solo al master la comunicazione iniziale.Tuttavia, è possibile che i dispositivi slave indichino che è successo qualcosa che merita di comunicare con loro tramite un pin di interruzione.

I pin di interrupt sono abbastanza comuni su circuiti integrati con bus seriali.Il pin cambia stato per indicare che si è verificato un evento e il master può quindi guardare il pin per sapere quando deve comunicare con lo slave per scoprire cosa è successo.

Anche in questo caso, però, spetta al master avviare la comunicazione e può semplicemente ignorare lo slave se lo desidera.

Justme
2019-05-13 09:37:17 UTC
view on stackexchange narkive permalink

No, in I2C solo il master può iniziare a comunicare sul bus e tutti gli slave devono seguire il master.Uno slave non può iniziare la comunicazione e in particolare lo slave non può modificare in alcun modo il flag RW.

CL.
2019-05-13 11:10:58 UTC
view on stackexchange narkive permalink

Con SPI, la linea MOSI trasmette sempre i dati dal master allo slave e la linea MISO trasmette sempre i dati dallo slave al master.

Con I²C, c'è solo una singola linea dati per entrambe le direzioni.Il bit R / W controlla quale dispositivo trasmette byte di dati e con il dispositivo trasmette i bit ACK, ma il bit R / W stesso è sempre controllato dal master.(Il bit R / W può essere modificato con una condizione di avvio ripetuto, ma solo dal master.)

E l'orologio è sempre controllato dal master.(Uno slave I²C può ritardare i cicli di clock con il clock stretching, ma non può generare nuovi cicli di clock.)

supercat
2019-05-14 00:19:08 UTC
view on stackexchange narkive permalink

In SPI, ogni dispositivo ha un ruolo fisso come master o slave. In I2C, i ruoli dei dispositivi possono cambiare dinamicamente. Qualsiasi dispositivo che avvia una transazione sul bus (invece di sollecitare una transazione tramite alcuni mezzi al di fuori del bus) deve comportarsi come master per quella transazione, ma quel dispositivo potrebbe comportarsi come slave per transazioni avviate da altri dispositivi. Ad eccezione di un paio di dettagli, I2C si basa sul fatto che ci siano esattamente un master e uno slave per ogni transazione particolare:

  1. Quando si utilizzano formati di indirizzamento più lunghi, più dispositivi possono agire provvisoriamente come slave in attesa del loro indirizzo completo. In quello stato, l'unica cosa che gli schiavi possono fare è indicare al master che lo schiavo a cui il master è interessato potrebbe essere pronto a rispondere.

  2. Più dispositivi possono agire simultaneamente come master se tutti desiderano inviare gli stessi dati contemporaneamente. Ciò può potenzialmente causare problemi se ad es. due dispositivi richiedono ciascuno che un dispositivo incrementi un contatore e quindi simultaneamente richiedono che il dispositivo lo decrementi. Se i due master inviano richieste identiche bit per bit, nessuno dei due perderebbe l'arbitrato, e quindi ciascuno penserebbe che la sua richiesta sia stata rispettata.

La maggior parte dei sistemi I2C contiene un solo dispositivo che può mai fungere da master, ma il protocollo consentirebbe più dispositivi. A meno che non si preveda che un bus abbia più master, tuttavia, è più facile implementare un dispositivo che si aspetta di essere l'unico master rispetto a uno che può coesistere con altri master sul bus.

Come funziona l'arbitrato del bus con I2C?Le periferiche I2C sugli MCU non trasmettono alla cieca senza ascoltare le collisioni?
@Navin: Qualsiasi dispositivo che vede un fronte di discesa su SCL deve mantenere basso SCL fino a quando non ha determinato cosa, se non altro, deve fare con SDA, e ogni volta che il master rilascia SCL è necessario attendere fino a quando non diventa effettivamente alto (tutti lo hanno rilasciato) prima di procedere.Se due master creano simultaneamente condizioni di avvio, ognuno potrebbe pensare di avere il bus (quello che è più veloce aspetterebbe che l'altro rilasci SCL dopo ogni bit) finché uno non prova a trasmettere un 1 e l'altro uno 0, a quel punto lo 0vincerebbe e il dispositivo che ha provato a trasmettere un 1 sarebbe sceso dal bus.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...