SPI è significativamente più veloce del bit banging?


8

Ho un progetto basato su una foto 18f4550. Per scrivere su un registro a scorrimento '595, c'è un netto vantaggio nell'usare spi su normali io pin? Ho sentito che SPI è più veloce, ma non sono sicuro di come. Utilizza un clock diverso e più veloce rispetto al resto del chip o è semplicemente più efficiente? Posso mandare in bit un byte attraverso normali pin io in un numero piuttosto piccolo di istruzioni. Lo SPI consuma meno potenza di elaborazione? Durante i calcoli abbastanza intensi mi sposterò abbastanza spesso, quindi desidero dedicare il maggior numero possibile di cicli al mio processo e non spostarmi.

La mia ragione principale per non voler usare spi è che il mio layout attuale renderebbe un po 'più difficile accedere ai pin richiesti perché ne sto già usando alcuni per altre cose e dovrei mescolare le cose. Volevo scoprire quali vantaggi ci sono prima di iniziare a strappare le cose e spostarle.


5
Puoi fare SPI bit-banging.
Starblue,

Risposte:


17

Supponendo che si stia confrontando un "motore" seriale o sincrono seriale spi nel micro per generare la stessa sequenza tramite "bit-banging", allora sì, tende ad essere un po 'più veloce, ma soprattutto il processore può distribuire un intero byte a la periferica invia e poi fa altre cose mentre viene trasmessa. Nel caso del bit-banging, il processore tende ad essere legato durante la trasmissione (anche se poiché il micro tende ad essere il master e la maggior parte delle periferiche sono completamente statiche, è possibile tollerare la pausa del mid-byte per eseguire un interrupt o persino eseguire il polling cose - ADC seriali con clock dell'interfaccia e attività di intervallo di campionamento che rappresentano esempi notevoli di eccezioni)

Su MCU più capaci potrebbe anche essere possibile programmare un controller DMA per eseguire un trasferimento multi-byte dalla memoria attraverso il motore SPI senza ulteriore attenzione da parte del processore, specialmente se sono importanti solo i dati in una direzione.

Ma molti progetti di micro-controller finiscono per essere altamente ottimizzati per il loro compito; se puoi risparmiare i cicli e tollerare la riduzione della velocità, complicando il tuo software per poter usare qualunque GPIO rendere più pulito il layout fisico non è affatto una scelta insolita.


Sì questo ^. Come menziona Chris, il più grande vantaggio dell'utilizzo delle periferiche hardware è che puoi trasferire un byte di dati da un flusso alla periferica e ricevere una notifica di interruzione se ha finito di spostarlo e pronto per un altro byte. Ciò consente di liberare l'utilizzo della CPU per altre cose mentre il byte viene spostato, il che può essere una durata nei cicli macchina data la velocità di trasmissione di questi protocolli seriali.
Jon L

3
Non una vita per SPI. Se stai parlando di velocità, allora potresti benissimo eseguire l'SPI a 10 MHz, che è solo 10 istruzioni PIC a tutta velocità. Non è certo un'età. Quasi il tempo sufficiente per preparare il prossimo byte. È appena il tempo di servire un interrupt.
Rocketmagnet,

2
Potrebbe essere giusto dire che molto dipende dal baud rate previsto / richiesto, che non è stato dichiarato. Tuttavia, come ho sottolineato, se il micro è il master potrebbe essere libero di essere in ritardo nell'invio del byte successivo, a condizione che l'applicazione possa tollerare l'irregolarità / riduzione della velocità effettiva.
Chris Stratton,

1
@Rocketmagnet, sto corretto. SPI è molto più veloce di quanto pensassi - immagino di averlo inserito con protocolli seriali più lenti come UART (dove 9600 baud è ~ 10 kHz).
Jon L

1
Si noti inoltre che SPI master è relativamente facile da bit bang. Lo slave SPI può essere un po 'più difficile in quanto la selezione del chip e le transistioni di clock devono essere specificatamente temporizzate e gestite (come un pin di interruzione esterno). Uso spesso lo stile SPI master bit bang nei miei progetti, soprattutto se non ho bisogno di alte prestazioni ma voglio una tavola pulita (anche per l'incisione domestica). Si noti inoltre che è pratica comune fare il contrario: spostare i dati nei registri di spostamento (HC595 ecc.) Usando SPI e un GPIO (latch pin).
Hans,

10

Vantaggi del bit-banging:

  • Controllo assoluto sul protocollo.
  • Se il tempo per eseguire le istruzioni sul microcontrollore è più veloce del baudrate dell'SPI, può essere più veloce, ma è improbabile. Ci vorrebbe un baudrate SPI a bassissima velocità con un microcontrollore a velocità relativamente elevata.
  • Può avere una latenza inferiore rispetto a un interrupt SPI.
  • Scelta dei pin.

Svantaggi del bit banging:

  • Richiede molto più codice per gestire -Baudrate timing -Campionamento affidabile dei bit ricevuti -Bordi dei frame di processo * Ogni segmento di codice sopra consuma tempo che potrebbe essere impiegato per l'esecuzione di altro codice.

Vantaggi dell'SPI:

  • Register configura handle tempismo baudrate, campionamento bit ricevuto ed elaborazione dei conteggi dei frame
  • La maggior parte dei microcontrollori con SPI ha un vettore di interruzione dedicato per ogni periferica SPI (ricontrolla il tuo micro!)
  • Una volta configurato, è sufficiente verificare se il buffer SPI TX / RX è vuoto / pieno e scrivere / leggere un byte.
  • Se è disponibile DMA, l'SPI può trasmettere grandi buffer di dati contigui senza alcuna interferenza del software.

Svantaggi di SPI:

  • Una periferica aggiuntiva da apprendere e configurare (è davvero uno svantaggio?)
  • Richiede pin aggiuntivi o multiplexing dei pin
  • Costo extra (tende ad essere trascurabile con gli attuali microcontrollori)
  • Ho avuto problemi di rumore con SPI, ma quelli erano su schede prototipo a velocità relativamente alte (10MHz)
  • Scelta dei pin altamente limitata

Per me, i vantaggi del bit banging sono minori rispetto ai vantaggi di SPI. Gli svantaggi del bit-banging sono molto maggiori rispetto agli SPI. Le tre ragioni principali che posso vedere per la scelta del bit banging sono per

  1. Protocollo personalizzato a bassa velocità
  2. Se la comunicazione è a bassa velocità e il resto dell'applicazione ha requisiti di calcolo bassi
  3. O se la comunicazione è a bassa velocità e la scelta dei pin è un grosso problema

8

Sul PIC, un'implementazione SPI bit-bang convenzionale richiede circa cinque cicli per bit; con un po 'di lavoro su parti 18Fxx, si può tagliare a circa quattro (al costo di circa tre cicli per byte di sovraccarico extra). Tale tempo si aggiunge a qualsiasi altro tempo necessario per recuperare i dati (in genere tre cicli per byte). Quindi figura circa 40-43 cicli per byte. Usando l'SPI hardware, la velocità migliora a due cicli per bit più un paio di cicli extra per byte (alcuni altri possono gestire trasferimenti back-to-back, ma i PIC che ho visto non possono) e mentre l'SPI sta inviando un byte il processore può recuperare il successivo, consentendo un tempo complessivo di circa 18 cicli / byte - un guadagno di velocità di circa 2,5x.


0

Per bit banging (BB) hai dimenticato di menzionare:

  1. Lega il processore per il periodo della comunicazione. (SPI carica i registri e ti restituisce le mani per fare qualcos'altro)
  2. Gli interrupt in background possono interferire seriamente con il codice BB, rendendolo utile solo nei progetti a thread singolo, ricorda che il codice BB deve prestare attenzione al 100% alla gestione del protocollo.
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.