Uno slave SPI può avviare una trasmissione in modalità full duplex?


8

Per quanto ne so, la trasmissione SPI per uno slave SPI funziona come di seguito:

  1. Il Master seleziona uno slave usando il pin SS
  2. Master e slave si scambiano dati contemporaneamente
  3. Il master avvia contemporaneamente l'orologio e la trasmissione dei dati (non c'è nessun orologio prima dell'operazione di scrittura)
  4. Il master interrompe la trasmissione ogni volta che lo desidera (interrompendo l'operazione di scrittura e la generazione dell'orologio), anche se lo slave ha più dati da inviare.

Esiste una configurazione SPI slave che consente allo slave di trasmettere dati senza il permesso del master?

Sto solo pensando ad alta voce. Supponiamo che vi sia un solo slave e un master continuo sia fornito dal master ecc.

Anche se l'istruzione presunta è vera, il master e lo slave non perdono la sincronizzazione dei byte (ovvero ricevono il flusso di bit) poiché non ci sono bit start-stop per SPI?

Sto facendo una domanda del genere perché ho letto la seguente sezione di questo documento .

2.2 Esempio SPI

L'esempio SPI allegato illustra l'uso di USART in modalità sincrona. USART1 è configurato come slave, mentre USART2 è master. Si svolgono le seguenti transazioni:

  • Trasmissione dati da master a slave.
  • Trasmissione dati da slave a master.
  • Trasmissione dati da master a slave e da slave a master contemporaneamente.

Il documento fornisce un esempio SPI ma realizza l'esempio utilizzando i dispositivi USART. E capisco che uno slave USART può iniziare una trasmissione senza il permesso del master.

Non sono riuscito a trovare il codice sorgente a cui fa riferimento il documento.


4
Lo slave, per definizione, non può avviare una transazione (potrebbe essere in grado di interrompere il master per avviare una transazione).
Peter Smith,

5
Il trasferimento unidirezionale di dati nella SPI tradizionale è solo qualcuno che ignora lo stato della linea andando nella direzione opposta. Scritture, letture e trasferimenti bidirezionali non sono affatto diversi. In effetti, ad esempio, molte periferiche SPI eseguiranno il timeout di una parola di stato durante la prima parola, prima ancora di sapere cosa viene richiesto, poiché non costa quasi nulla e consente un rapido polling dello stato.
Chris Stratton,

Risposte:


17

No, con SPI, tutte le comunicazioni sono gestite dal dispositivo master. Hai ragione sul fatto che il master non può semplicemente fornire un orologio continuo; non ci sarebbe modo di rilevare i confini dei byte.

Un dispositivo slave avrà spesso un pin di uscita separato per segnalare al master che ha dati disponibili. Questo pin è collegato a un ingresso su un microcontrollore e viene spesso utilizzato come interruzione.

Quindi, il dispositivo può far valere il pin, facendo girare il microcontrollore sul bus SPI.


Per informazioni più dettagliate, continua a leggere :) Questa è una versione leggermente modificata di una spiegazione trovata qui :

Il dispositivo slave può comunicare solo quando viene fornito un orologio dal master. Ciò complica la lettura dello slave, poiché è necessario che il master fornisca sufficienti cicli di clock per consentire allo slave di rispondere.

Quando si invia un comando SPI dal master, in realtà avvengono due trasmissioni durante gli stessi otto impulsi di clock. Il primo è che il tuo byte è escluso dalla linea MOSI. Allo stesso tempo, tuttavia, i dati vengono registrati nel microcontrollore tramite la linea MISO.

Ma poiché lo slave non ottiene il comando completo fino alla fine di queste transazioni, non presenta alcun dato al bus. Ciò si traduce in un valore ricevuto di 0x00 o 0xFF.

Quindi è necessario fornire altri otto clock per consentire allo slave di restituire il valore effettivo. In molte implementazioni di codice, questo viene fatto inviando un "byte fittizio" allo slave.

Si noti che, nella prima trasmissione, il master ignora tutto ciò che arriva dallo slave. Nella seconda trasmissione, lo slave ignora tutto ciò che viene inviato dal master.

Questo descrive il caso generale. Possono esserci ulteriori complessità. Ad esempio, alcuni circuiti integrati slave emettono effettivamente una sorta di byte di stato nello stesso momento in cui ricevono un comando dal master. Quindi, in questo caso, il master non dovrebbe scartare il primo byte ricevuto.


2
"il master non può semplicemente fornire un orologio continuo" In realtà ho visto un dispositivo non molto tempo fa che fa esattamente questo. Era una strana bestia. Purtroppo non ricordo il codice P / N.
Aaron,

@Aaron Buono a sapersi! Le persone continuano a diventare sempre più intelligenti :-)
bitsmack

7

No, master è quello che arbitra le selezioni di chip e guida l'orologio. Uno slave ascolterà sempre solo l'orologio e la selezione dei chip. Il trasferimento dei dati può essere ancora full duplex. Ci sono alcune implementazioni in cui l'orologio può essere continuo, ma non importa molto poiché la selezione dei chip viene utilizzata per sincronizzare comunque i confini dei byte. Ma poi ci sono sistemi multimaster, quindi in pratica puoi avere un meccanismo per i dispositivi per decidere chi è slave e master. O semplicemente includere un filo di "interruzione" separato per lo slave per segnalare al master che ha un pacchetto di dati per il master.


Potresti aggiungere un esempio di un sistema multimaster?
davidcary,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.