In che modo il Raspberry Pi distingue tra più schede di espansione?


8

Ho appena iniziato a utilizzare GPIO sul Raspberry Pi per vari progetti. Ci sono molte schede breakout per l'RPi e molte hanno pin per impilare le schede una sopra l'altra. Sembra che i pin GPIO passino direttamente e tutte le schede abbiano gli stessi pin in comune. Per me questo significa che tutte le schede in una pila ricevono esattamente gli stessi segnali dall'RPi e dovrebbero comportarsi di conseguenza. Sembra che questo possa produrre molti errori con comandi destinati a una scheda che influiscono sul modo in cui un'altra scheda funziona, ma a quanto pare ciò non accade.

Quindi, come fa il Raspberry Pi a sapere quale scheda sta ricevendo quali comandi particolari? Esiste una sorta di comando di inizializzazione che solo una determinata scheda riconosce e quindi inizia ad accettare il resto dei comandi?


Questo è anche qualcosa che vedo con scudi arduino impilabili e altre varie piattaforme di elaborazione.
cspirou,

La risposta, temo, è che non esiste un modo standard per una scheda di rilevarne un'altra e riconfigurarsi. Dovrai esaminare i dettagli di ciascuna scheda prima dell'acquisto e prendere la tua determinazione della capacità di lavorare l'una con l'altra.
joan

Risposte:


5

I computer utilizzano un sistema chiamato bus per collegare più periferiche alla CPU tramite lo stesso set di fili. I2C e SPI sono esempi di sistemi di bus utilizzati con i pin pi GPIO, che abilitano più dispositivi sugli stessi pin fisici (gestiti dal bus interno) ma che utilizzano indirizzi diversi . L'indirizzamento è un'astrazione creata dal protocollo di sistema bus. È un po 'come il modo in cui è possibile avere più applicazioni di rete utilizzando la stessa connessione fisica a Internet, tutte in esecuzione contemporaneamente.

Ad esempio, guardando RTC Pi Plus , una delle schede impilabili dal tuo link di esempio:

inserisci qui la descrizione dell'immagine

Notare sul lato vicino le cinque connessioni in una scatola. Questi corrispondono ai pin sull'altro lato. Sono etichettati:

  • 5 V = Potenza, condivisibile con altri dispositivi.
  • GND = Terra, anche comune.
  • SDA e SCL = pin del bus I2C; sul pi che è pin 3 e 5. È possibile avere un certo numero di dispositivi sul bus I2C tutti usando questi stessi due pin per la comunicazione.
  • SQW = Credo che questo significhi "onda quadra" e forse uno dei nostri membri più elettronicamente informati lascerà un bel commento che spiega il suo scopo.

In altre parole, la maggior parte dei pin non viene utilizzata da questa scheda. Sono lì solo per consentire l'accatastamento. Quelli che usa sono tutti (o per lo più ancora non conoscono SQW) condivisibili contemporaneamente con altri dispositivi.

Il vero limite per impilare in questo modo sarà la quantità di energia che può essere fornita rispetto a ciò che viene consumato, non il numero di pin coinvolti. Forse sarebbe una limitazione se includessi altri alimentatori, ma penso che prima dovresti spostare lo stack all'esterno e iniziare a usare una scala per lavorarci sopra. ;)


3

Puoi avere solo una scheda HAT, quindi non c'è questo problema. Ci sono alcune schede in cui è possibile collegarne più di una ma quelle non sono schede HAT.


1
I HAT potrebbero non essere la cosa giusta da dire ma sto parlando di schede che si collegano ai pin GPIO. Il seguente sito mostra alte pile di tali schede. abelectronics.co.uk Posso modificare la domanda per rimuovere 'HATs'
cspirou

1

Quindi, come fa il Raspberry Pi a sapere quale scheda sta ricevendo quali comandi particolari?

Il Pi non può saperlo. Devi essere sicuro.

Il fatto è che se si collegano più schede di estensione, è necessario assicurarsi che le linee di segnale non vengano utilizzate più di una volta o implementare uno schema di bus in grado di funzionare con più dispositivi che condividono alcune linee (come già suggerito da @goldilocks). Per avere un'idea di come ciò possa essere fatto, consiglierei di leggere sul vecchio bus ISA . Qualcosa che potrebbe essere implementato usando GPIO come dati e linee di indirizzo (e se uno è pronto per il dolore).

Esiste una sorta di comando di inizializzazione che solo una determinata scheda riconosce e quindi inizia ad accettare il resto dei comandi?

Mentre i HAT sono fuori discussione, vale la pena dare un'occhiata allo schema di identificazione che usano. Nota che non ci sono HAT impilati * (per Raspberry Pi Blog : HAT impilabili presenti nella discussione sulle specifiche - ma alla fine è stato eliminato a causa del grande aumento della complessità della configurazione automatica e del potenziale errore dell'utente ). Quindi, in qualsiasi momento, solo un HAT sarà collegato, leggerà la sua EEPROM e renderà le sue informazioni disponibili nella struttura dei dispositivi.


* È possibile realizzare cappelli impilabili se sono dello stesso tipo e quindi non richiedono un'identificazione multipla e diversa, ad esempio l' Adafruit PWM / Servo HAT a 16 canali per Raspberry Pi .

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.