Qual è il bus seriale incorporato più popolare? [chiuso]


8

Sto progettando un dispositivo incorporato che vorrei rendere interoperabile con periferiche di terze parti tramite un bus seriale. Dovrei scegliere SPI, I²C o qualche altro bus?

Le periferiche avranno una larghezza di banda piuttosto bassa (alcuni sensori che comunicano sul bus, intervengono periodicamente) e molto probabilmente entro un metro o meno dal controller. L'unico compito del controller è quello di raccogliere i dati del sensore, impacchettarli in qualche modo e quindi inviarli a un modulo wireless tramite un altro bus (anche se il bus del sensore potrebbe essere potenzialmente riutilizzato anche per questo).


3
Dipende da quali periferiche si desidera interagire, a quali tensioni, a quali velocità ea quale distanza.
Toby Jaffey,

1
Ho aggiunto ulteriori dettagli alla domanda
pfyon

1
Non posso credere che UART non sia stato menzionato affatto ... sto solo dicendo.
vicatcu,

Correggimi se sbaglio, ma non pensavo che UART fosse un autobus. Ho pensato che fosse solo una comunicazione seriale tra due dispositivi.
pfyon,

Quindi un bus non è per la comunicazione seriale tra due dispositivi? Lo stai scontando perché a volte viene usato solo punto-punto? PCIe, SATA, HT sono generalmente punto-punto. Indipendentemente da ciò, la maggior parte delle periferiche UART può essere utilizzata per RS-422, RS-485 o LIN che sono multi-drop.
Nick T,

Risposte:


12

Se non sei sicuro, e le tue esigenze sono piuttosto vaghe, sceglierei I²C.

La principale differenza tra SPI e I²C è che SPI richiede una linea di selezione del chip per ogni periferica. I²C trasmette un indirizzo periferico all'inizio della comunicazione, quindi non necessita di linee di selezione del chip. Le linee di selezione del chip diventano ingombranti dopo le prime.

D'altra parte, SPI è probabilmente più facile da implementare e da eseguire nel debug. Potrebbe essere il vincitore se vuoi solo connetterti a un paio di dispositivi.

Escluderei l'USB a meno che non abbiate bisogno di elevate velocità di trasmissione dati su distanze relativamente lunghe (m anziché cm). Escluderei anche RS-232 a meno che non sia ancora il 1976 e le tue periferiche abbiano bisogno di un segnale enorme per distinguere un po 'dal rumore.

Potresti considerare Dallas 1-wire, ma sospetto che non sia così comune come I²C, e un bus "1-wire" che ha bisogno di 2 fili per funzionare mi è sempre sembrato un po 'sospetto.


1
Penso che se hai un controller molto semplice e devi usare il bit banging (fondamentalmente facendo funzionare manualmente l'orologio) è molto più semplice implementare SPI su 4 porte GPIO rimaste.
Wouter Simons,

1
Penso che tu abbia ragione sul fatto che sia più facile bitbang SPI di I2C. Spero che non finisca per sbattere un po 'però.
pfyon,

3
+1 per lo stile di pesca del sistema a 2 fili commercializzato come "1 filo".
Semaj,

E a peggiorare le cose, molti chip che implementano il sistema a 1 filo (+ terra) richiedono un terzo pin - Vcc - perché non possono funzionare a causa della potenza parassita! Quando penso a un bus a 1 filo, sto immaginando una configurazione accoppiata in modo capacitivo, con un raddrizzatore a ponte a corrente limitata e un codice di linea auto-clock; non 2 o 3 fili.
Kevin Vermeer,

"1-wire" avrebbe dovuto essere chiamato "1-data-wire", dato che è più quello che è. I fili extra sono GND e (a volte) una linea di alimentazione stabile.
Johan

3

Dal momento che hai detto che sarebbe bassa larghezza di banda, allocarei abbastanza IO per gestire sia SPI che I2C. Se possibile, avrei anche ulteriori linee CS in modo da poter eseguire più dispositivi SPI. Inoltre, non dimenticare di guardare come alimenterai la periferica. Se si sta esaurendo la batteria per ottenere la massima durata, è necessario impostare il dispositivo in modalità di risparmio energetico o rimuovere l'alimentazione quando non viene utilizzato. Utilizzare anche il modulo controller seriale dei controller, se possibile, molti controller misureranno SPI, I2C e seriale. Se è possibile e dividere il wireless dal sensore, ciò semplifica l'arresto dei dispositivi quando non vengono utilizzati. Inoltre alcuni sensori hanno una linea che dirà al controller quando devono essere sottoposti a manutenzione, quindi si desidera avere anche un IO aggiuntivo che entra in un pin, idealmente da cui è possibile generare un interrupt.


2

La domanda è un po 'un problema a causa di problemi di definizione.

La comunicazione serializzata è fondamentalmente ciò di cui hai bisogno se vuoi comunicare con alcune periferiche esterne senza utilizzare umpteen porte sul controller. Fondamentalmente ogni metodo di comunicazione seriale richiede un orologio e una configurazione su come gestire le connessioni dati.

SPI è un bus a 4 fili. I2C è un bus a 2 fili.

Ognuno ha caratteristiche diverse. Ciò a cui devi rispondere è quanto deve essere veloce la tua comunicazione, quanto deve essere affidabile, quali opzioni offre il tuo microcontrollore, ecc.

Questo articolo di Wikipedia e questo sito di riferimento spiegano molto più chiaramente di me, segui anche i riferimenti per saperne di più!


2

Fondamentalmente, dovresti scegliere tra I2C e SPI.

Indipendentemente dal bus utilizzato, è necessario considerare il livello di tensione dei sensori e delle periferiche di terzi. Puoi farlo creando il tuo convertitore con due MOSFET (va solo in un modo - Pick up / no change o down / no change; solo un problema se devi far funzionare i tuoi sensori a 3.3 e interfacciare con master a 1.8 e 5V). Vedi AN10441 di NXP [PDF]. Questo funzionerà anche con SPI (basta rimuovere i pullup). Sarà necessario aggiungere una linea al connettore per stabilire una tensione di riferimento (se non lo si sta già facendo).

Un aspetto negativo di I2C è che sei limitato al clock più lento del bus. Se un sensore è in grado di supportare solo 100kHz e si desidera parlare con la memoria a 400kHz o 1MHz (entrambe le velocità valide), il comportamento del sensore più lento non è specificato. Se si utilizza SPI, la linea di selezione del chip significa che il sensore più lento non ascolterà nemmeno ciò che è sul bus e si possono eseguire velocità diverse per sensori diversi.


1

Vorrei usare I2C. Assicurati solo di poter ottenere un modulo wireless in grado di comunicare su I2C se vuoi averlo sullo stesso bus dei tuoi sensori. La maggior parte delle periferiche di comunicazione che ho visto usano SPI non I2C.

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.