Ist SPI deutlich schneller als Bitbangen?

8

Ich habe ein Projekt basierend auf einem Bild 18f4550. Gibt es beim Schreiben in ein 595-Schieberegister einen deutlichen Vorteil bei der Verwendung von spi gegenüber regulären Io-Pins? Ich habe gehört, dass SPI schneller ist, bin mir aber nicht sicher, wie. Verwendet es eine andere, schnellere Uhr als der Rest des Chips oder ist es einfach effizienter? Ich kann ein Byte durch normale Io-Pins in einer ziemlich kleinen Anzahl von Anweisungen herausschlagen. Verbraucht spi weniger Rechenleistung? Ich werde während ziemlich intensiver Berechnungen ziemlich oft herausschalten, deshalb möchte ich so viele Zyklen wie möglich, die meinem Prozess gewidmet sind und nicht herausschalten.

Mein Hauptgrund dafür, dass ich spi nicht verwenden möchte, ist, dass mein aktuelles Layout den Zugriff auf die erforderlichen Pins etwas erschweren würde, da ich bereits einige davon für andere Dinge verwende und die Dinge mischen müsste. Ich wollte herausfinden, welche Vorteile es gibt, bevor ich anfange, Dinge zu zerreißen und zu bewegen.

captncraig
quelle
5
Sie können SPI durch Bit-Banging ausführen.
Starblue

Antworten:

17

Angenommen, Sie vergleichen ein SPI-Peripheriegerät oder eine synchrone serielle "Engine" im Mikro mit der Erzeugung derselben Sequenz über "Bit-Banging", dann ist dies tendenziell etwas schneller, aber was noch wichtiger ist, der Prozessor kann ein ganzes Byte an übergeben das Peripheriegerät zu senden und dann andere Dinge zu tun, während es gesendet wird. Im Fall von Bit-Banging neigt der Prozessor dazu, während der Übertragung überlastet zu sein (obwohl das Mikro in der Regel der Master ist und die meisten Peripheriegeräte vollständig statisch sind, können Sie wahrscheinlich eine Pause im mittleren Byte tolerieren, um einen Interrupt zu bedienen oder sogar abzufragen Dinge - Interface-getaktete serielle ADC- und Sample-Intervall-Tasks sind bemerkenswerte Beispiele für Ausnahmen.

Auf leistungsfähigeren MCUs kann es sogar möglich sein, einen DMA-Controller so zu programmieren, dass er eine Mehrbyte-Übertragung vom Speicher durch die SPI-Engine ohne weitere Aufmerksamkeit des Prozessors ausführt, insbesondere wenn nur Daten in einer Richtung wichtig sind.

Viele Mikrocontroller-Projekte sind jedoch stark auf ihre Aufgabe optimiert. Wenn Sie die Zyklen schonen und die Geschwindigkeitsreduzierung tolerieren können, ist es keine ungewöhnliche Wahl, Ihre Software zu komplizieren, um die GPIOs verwenden zu können, die das physische Layout sauberer machen.

Chris Stratton
quelle
Ja das ^. Wie Chris erwähnt, besteht der größte Vorteil der Verwendung von Hardware-Peripheriegeräten darin, dass Sie ein Datenbyte von einem Stream an das Peripheriegerät übergeben und durch Interrupt benachrichtigt werden können, wenn es fertig verschoben und für ein weiteres Byte bereit ist. Dies befreit Ihre CPU-Auslastung für andere Dinge, während das Byte herausgeschoben wird - was angesichts der Baudrate dieser seriellen Protokolle eine Lebensdauer in Maschinenzyklen sein kann.
Jon L
3
Kein Leben für SPI. Wenn Sie über Geschwindigkeit sprechen, können Sie den SPI möglicherweise mit 10 MHz ausführen, was nur 10 PIC-Anweisungen bei voller Geschwindigkeit entspricht. Das ist kaum ein Alter. Gerade genug Zeit, um Ihr nächstes Byte fertig zu machen. Es ist kaum genug Zeit, um einen Interrupt zu warten.
Raketenmagnet
2
Es kann fair sein zu sagen, dass viel von der beabsichtigten / erforderlichen Baudrate abhängt, die nicht angegeben wurde. Wie ich bereits erwähnt habe, kann es jedoch frei sein, das nächste Byte zu spät zu senden, wenn das Mikro der Master ist, vorausgesetzt, die Anwendung kann die Unregelmäßigkeit / Verringerung des Durchsatzes tolerieren.
Chris Stratton
1
@ Rocketmagnet, ich stehe korrigiert. SPI ist viel schneller als ich dachte - ich glaube, ich habe es mit langsameren seriellen Protokollen wie UART (wo 9600 Baud ~ 10 kHz sind) zusammengefasst.
Jon L
1
Beachten Sie auch, dass der SPI-Master relativ leicht zu knallen ist. Der SPI-Slave kann etwas schwieriger sein, da die Chipauswahl- und Taktübergänge speziell zeitgesteuert und bearbeitet werden müssen (wie ein externer Interrupt-Pin). Ich verwende in meinen Projekten häufig den SPI-Master-Bit-Bang-Stil, insbesondere wenn ich keine hohe Leistung benötige, aber ein sauberes Board möchte (auch gut zum Ätzen zu Hause geeignet). Beachten Sie auch, dass es üblich ist, das Gegenteil zu tun: Daten mithilfe von SPI und einem GPIO (Latch-Pin) in Schieberegister (HC595 usw.) verschieben.
Hans
10

Vorteile beim Bitbangen:

  • Absolute Kontrolle über das Protokoll.
  • Wenn die Zeit zum Ausführen von Anweisungen auf dem Mikrocontroller schneller ist als die Baudrate des SPI, kann dies schneller sein, dies ist jedoch unwahrscheinlich. Mit einem Mikrocontroller mit relativ hoher Geschwindigkeit würde eine sehr sehr langsame SPI-Baudrate benötigt.
  • Kann eine geringere Latenz haben als ein SPI-Interrupt.
  • Auswahl der Stifte.

Nachteile des Bit-Banging:

  • Benötigt viel mehr Code für die Verarbeitung - Baudrate-Timing - Zuverlässige Abtastung empfangener Bits - Prozessrahmengrenzen * Jedes oben genannte Codesegment verbraucht Zeit, die für die Ausführung anderer Codes aufgewendet werden könnte.

Vorteile von SPI:

  • Register Configate behandelt das Baudraten-Timing, die Abtastung empfangener Bits und die Verarbeitung von Frame-Countaries
  • Die meisten Mikrocontroller mit SPI haben einen dedizierten Interrupt-Vektor für jedes SPI-Peripheriegerät (überprüfen Sie Ihr Mikro!).
  • Nach der Konfiguration muss nur überprüft werden, ob der SPI TX / RX-Puffer leer / voll ist, und ein Byte geschrieben / gelesen werden.
  • Wenn DMA verfügbar ist, kann der SPI große Puffer zusammenhängender Daten ohne Software-Interferenz übertragen.

Nachteile von SPI:

  • Ein zusätzliches Peripheriegerät zum Lernen und Konfigurieren (Ist das wirklich ein Nachteil?)
  • Erfordert zusätzliche Pins oder Pin-Multiplexing
  • Zusätzliche Kosten (sind bei aktuellen Mikrocontrollern eher vernachlässigbar)
  • Ich hatte Rauschprobleme mit SPI, aber diese waren auf Prototyp-Boards mit relativ hohen Geschwindigkeiten (10 MHz).
  • Stark eingeschränkte Pinauswahl

Für mich sind die Vorteile von Bit-Banging im Vergleich zu den Vorteilen von SPI gering. Die Nachteile des Bit-Banging sind viel größer als die der SPI. Die drei Hauptgründe, die ich für die Wahl von Bit-Banging sehen kann, sind:

  1. Benutzerdefiniertes Low-Speed-Protokoll
  2. Wenn die Kommunikation langsam ist und der Rest der Anwendung geringe Rechenanforderungen hat
  3. Oder wenn die Kommunikation langsam ist und die Pin-Auswahl ein großes Problem darstellt
Joshua
quelle
8

Auf dem PIC dauert eine herkömmliche Implementierung im Bit-Bang-SPI-Stil etwa fünf Zyklen pro Bit. Mit ein wenig Arbeit an 18Fxx-Teilen kann man das auf ungefähr vier reduzieren (auf Kosten von ungefähr drei Zyklen pro Byte zusätzlichen Overheads). Diese Zeit kommt zu der Zeit hinzu, die zum Abrufen von Daten erforderlich ist (normalerweise drei Zyklen pro Byte). Stellen Sie sich also ungefähr 40-43 Zyklen pro Byte vor. Bei Verwendung des Hardware-SPI verbessert sich die Geschwindigkeit auf zwei Zyklen pro Bit plus ein paar zusätzliche Zyklen pro Byte (einige andere können Back-to-Back-Übertragungen verarbeiten, die PICs, die ich gesehen habe, jedoch nicht), und während der SPI ein Byte sendet Der Prozessor kann den nächsten abrufen, was eine Gesamtzeit von ungefähr 18 Zyklen / Byte ermöglicht - eine Geschwindigkeitsverstärkung von ungefähr 2,5x.

Superkatze
quelle
0

Für Bit Banging (BB) haben Sie vergessen zu erwähnen:

  1. Bindet den Prozessor für den Zeitraum der Kommunikation. (SPI lädt Register und gibt sie zurück, damit Sie etwas anderes tun können.)
  2. Hintergrund Interrupts können den BB-Code ernsthaft beeinträchtigen, was ihn nur bei Single-Threaded-Designs nützlich macht. Denken Sie daran, dass der BB-Code dem Umgang mit dem Protokoll 100% ige Aufmerksamkeit widmen muss.
Bob
quelle