Gibt es einen Unterschied zwischen den beiden, oder handelt es sich nur um eine Abstraktion? Meiner Intuition nach gibt es keinen Unterschied, aber ich würde gerne falsch liegen.
microcontroller
spi
Skaevola
quelle
quelle
Antworten:
Ein tatsächliches SPI-Controller-Peripheriegerät in der MCU kann oft viel schneller laufen als das Bit-Banging der Schnittstelle. Natürlich hängt es von der MCU ab, aber es würde mich nicht überraschen, wenn ein SPI-Controller mit über 30 MHz läuft, während das Bit-Banging auf etwa 1 MHz begrenzt sein könnte (wenn Sie Glück haben).
Aber es steckt noch mehr dahinter. Beim Bit-Banging ist die MCU mit dem Bit-Banging beschäftigt. Es verschiebt die Daten heraus und dreht die GPIO-Leitungen. Das heißt, es kann nichts anderes tun. Bei Verwendung eines SPI-Controllers ist der Controller mit all diesen Aufgaben beschäftigt, und die MCU kann andere Aufgaben ausführen.
Mit einem tatsächlichen SPI-Controller ist die tatsächliche SPI-Übertragung also viel schneller und die MCU gewinnt einige Zyklen zurück, die sie für andere Aufgaben verwenden kann.
quelle
Es gibt keinen Unterschied, ob Sie mit beiden Methoden dasselbe Ergebnis erzielen können, aber es gibt einige Gründe, warum Sie sich für eine andere entscheiden sollten.
Durch die Verwendung eines SPI-Peripheriegeräts muss der Prozessor nicht mehr das Timing für das Bit-Banging der E / A-Pins generieren, sodass er andere Rechenaufgaben ausführen und die Programmierung der CPU vereinfachen kann. Da das Peripheriegerät in Hardware implementiert ist, läuft es schneller und verbraucht weniger Strom als Bit-Banging-E / A. Es kann Fälle geben, in denen Sie die E / A-Schnittstelle mit SPI blockieren möchten, wenn Ihre Anwendung die Auswahl eines Prozessors ohne SPI-Peripheriegerät erfordert. Aus Gründen der Vernunft würde ich empfehlen, dies zu vermeiden, es sei denn, dies ist absolut notwendig.
quelle
SPI ist eine synchrone Schnittstelle, wobei der Master die Uhr steuert. Das heißt, wenn Sie der Master sind, können Sie die Taktrate und das Timing auswählen. Slave-Geräte haben eine gewisse Obergrenze für die Taktfrequenz, die sie verarbeiten können, es ist ihnen jedoch normalerweise egal, wie langsam die Taktfrequenz darunter ist. Genauer gesagt, es gibt normalerweise eine minimale Zeit, die jeder Slave benötigt, um die Uhr im hohen und niedrigen Zustand zu sehen, bevor sie wieder umschalten kann, und es wird eine minimale Dateneinstellung und Haltebegrenzung für die Datenleitung geben, die die Taktflanke umgibt, auf der die Slave liest die Datenleitung.
Aus diesem Grund ist die Implementierung eines SPI-Masters in Firmware sehr einfach. Ich habe dies oft getan, um bestimmte Pins zu verwenden, wenn es keine eingebaute SPI-Hardware gab oder sie aus irgendeinem Grund nicht für diesen Zweck verfügbar war. Ein SPI-Master in Firmware zu erstellen ist so einfach wie nie zuvor.
Viele SPI-Slave-Geräte sind recht schnell, daher werden die minimalen Takt- und Einrichtungszeiten häufig einfach dadurch eingehalten, dass sichergestellt wird, dass jeder Befehl mindestens einen Befehlszyklus breit ist. In diesem Fall ist der Code sehr kurz und schnell. In einigen Fällen kann ein Slave-Gerät zwei oder drei Befehlszyklen pro Taktphase erfordern, aber es ist auch nicht schwer, dies zu garantieren. Die Low-Level-SPI-Bitschleife erfordert das Verschieben des nächsten Ausgangsbits in die Position, das Ergreifen des Eingangsbits und das Überprüfen des Schleifenzählers. Sie können in der Regel die Mindestzeitvorgaben für zwei oder drei Zyklen erfüllen, indem Sie das Fahren und Abtasten der Leitungen mit einem Teil des anderen Overheads an den richtigen Stellen arrangieren. Wenn Geschwindigkeit wichtig ist, können Sie den Assembler-Präprozessor verwenden, um eine entrollte Schleife zu schreiben. Mit Techniken wie dieser,
Es gibt einige Vorteile, den SPI-Master in Firmware auszuführen. Die Konfiguration der SPI-Hardware ist manchmal etwas umständlich. Es ist immer die Frage, was genau passieren soll, wenn die Slave-Auswahl aktiviert wird. Wird dann das erste Bit in die Datenleitungen geschrieben? Was ist, wenn die Uhr niedrig startet und die Datenleitungen an der fallenden Flanke zwischengespeichert werden sollen? Manchmal ist das wichtig, manchmal nicht. Mit einem Firmware-SPI-Master können Sie fehlerverzeihender sein und möglicherweise dieselbe Routine für die Kommunikation mit verschiedenen Slaves verwenden. Sie können beispielsweise sicherstellen, dass die MOSI-Datenleitung (Master Out Slave In) an beiden Flanken der Uhr stabil ist. SPI-Hardware kann das im Allgemeinen nicht. Daher muss diese Hardware neu konfiguriert werden, je nachdem, mit welchem Slave sie gerade kommuniziert.
Ein weiterer Vorteil eines Firmware-SPI-Masters besteht darin, dass Sie eine beliebige Anzahl von Bits pro SPI-Sequenz auswählen können. Hardware ist normalerweise auf ein Vielfaches von 8 Bit beschränkt. Die meisten Geräte sind für die Übertragung ganzer Bytes ausgelegt, erfordern diese jedoch häufig nicht. Beispielsweise sendet ein 10-Bit-A / D wahrscheinlich zuerst die 10 Datenbits und anschließend 0 oder Garbage, wenn Sie die Taktung fortsetzen. Wenn Sie Hardware-SPI verwenden, müssen Sie 16 Bit übertragen und den Müll maskieren. Alles wird gut funktionieren, aber ein Firmware-SPI-Master könnte in diesem Fall tatsächlich schneller als die Hardware sein, da er nur die mindestens erforderlichen 10 Bits überträgt.
Der Hauptvorteil von Hardware-SPI-Mastern besteht darin, dass die Firmware eine Byte-Übertragung initiieren und dann loslegen und etwas anderes tun kann. Die Taktung kann in der Regel auch schneller sein, als dies selbst mit einer entrollten Firmware-Schleife möglich ist. Beachten Sie, dass diese beiden Vorteile unter bestimmten Umständen wichtig sein können, sie jedoch häufig nicht relevant sind. Der meiste SPI-Code, der Hardware zum Übertragen eines Bytes verwendet, geht dann sofort in eine Warteschleife, damit die Hardware die Übertragung beendet. Überprüfen Sie auch die Slave-Timing-Anforderungen sorgfältig. SPI-Geräte sind im Allgemeinen insgesamt schnell, aber es gibt Fälle, in denen Sie die Hardware trotzdem verlangsamen müssen, um die maximale Geschwindigkeit zu erreichen, mit der der Slave umgehen kann.
Das war alles aus der Sicht des Meisters. Kurz gesagt, die Verwendung von SPI-Hardware als Master bietet häufig nur geringe Vorteile und manchmal sogar ein paar Vorteile, wenn sie nicht verwendet wird. Dies ist jedoch bei Sklaven anders. Da der Master die Uhr steuert, müssen die Slaves für alles bereit sein, was der Master tut, wenn der Master es tut. Die Timing-Anforderungen sind im Verhältnis zu den Instruktionszeiten oftmals recht kurz. Daher ist die Implementierung eines SPI-Slaves in der Regel genau das Richtige für Sie.
Sie können SPI-Slaves in der Firmware ausführen, aber das ist schwierig. Sie müssen die Zyklen und die Latenz sorgfältig zählen und implementieren in der Regel eine Teilmenge des Protokolls, das Ihr bestimmter Master verwendet. Zum Beispiel musste ich einmal ein digitales Äquivalent einer alten analogen Controller-Karte entwerfen (sie wollten zusätzliche Funktionen, die in Analog nicht vernünftigerweise möglich waren, und sie wollten etwas Kleineres, Billigeres in der Herstellung und Stabileres). Diese Karte war über einen SPI-Bus mit dem Rest des Systems verbunden. Die alte Analogkarte hatte einen zweikanaligen D / A-Anschluss zum Einstellen der Steuerwerte und einen zweikanaligen A / D-Anschluss zum Zurücklesen der Messwerte. Beides in einem einzigen Prozessor zu implementieren war schwierig und beinhaltete das Herausfinden, welche Teilmenge des Hardware-D / A- und A / D-SPI-Protokolls der vorhandene Master tatsächlich verwendete. Es wurde auch ein Prozessor entwickelt, der deutlich schneller als die SPI-Taktrate laufen könnte. Am Ende habe ich drei Interrupts verwendet, einen für jede Slave-Auswahl und einen für die ansteigende Flanke der Taktleitung. Der letzte musste der Interrupt mit der höchsten Priorität im System sein, da sonst die Latenzbedingung nicht erfüllt werden konnte.
Der springende Punkt ist jedoch, dass ein Firmware-SPI-Master einfach, klein, schnell und flexibel ist und es kaum einen Grund gibt, sich davor zu scheuen, dies zu tun. Auf der anderen Seite möchte man für einen Slave wirklich Hardware, oder man muss aufwachen und sehr sorgfältig über Timing, Latenz und dergleichen nachdenken.
quelle
Es hängt davon ab, wofür Sie SPI verwenden. Wenn Sie daran interessiert sind, die höchsten Datenraten zu erzielen, ist Hardware immer schneller als Bitbanging (z. B. der Armcortex - Chip im Teenager 3). Ich kann Daten mit 22 Mbit / s über die Hardware - SPI - Unterstützung übertragen, im Vergleich zu ~ 4,5 Mbit / s mit Bitbanging (it) kann auch eine beliebige Anzahl von Bits pro Übertragung von 3-16 verarbeiten - nützlich, wenn Daten in 12-Bit-Blöcken für bestimmte LED-Controller gesendet werden!)). Bei 16-MHz-AVRs ist der Unterschied etwas geringer. Die höchste Datenrate mit Hardware scheint bei 4 bis 5 Mbit / s zu liegen, während das Bitbanging bei 2,3 Mbit / s liegt.
Wenn Sie die Hardwareunterstützung verwenden, stehen Ihnen abhängig vom jeweiligen Mikrocontroller Optionen zur Verfügung, mit denen Sie Ihre Daten mithilfe von DMA-Controllern auslagern können. So können Sie Ihren Code auf andere, möglicherweise interessantere Dinge zurückführen, als die Daten zu babysitten schreiben.
Alles hängt davon ab, ob Hardware-SPI überhaupt eine Option ist oder nicht.
quelle
Wenn Sie SPI-Bit-Bang verwenden, können Sie den SSP-Interrupt nicht für die Kommunikation verwenden. Dies ist für SPI für viele Anwendungen nicht so wichtig
quelle