Ich habe ein Projekt, das auf einem Bild 18f4550 basiert. Gibt es beim Schreiben in ein '595-Schieberegister einen deutlichen Vorteil bei der Verwendung von spi gegenüber normalen io-Pins? Ich habe gehört, dass Spi schneller ist, aber ich bin mir nicht sicher, wie. Verwendet er einen anderen, schnelleren Takt als der Rest des Chips oder ist er einfach effizienter? Ich kann ein Byte durch normale io-Pins in einer ziemlich kleinen Anzahl von Anweisungen bit-bangen. Verbraucht spi weniger Rechenleistung? Ich werde während ziemlich intensiver Berechnungen ziemlich oft ausschalten, daher möchte ich, dass so viele Zyklen wie möglich meinem Prozess gewidmet sind und nicht ausschalten.
Mein Hauptgrund, spi nicht verwenden zu wollen, ist, dass mein aktuelles Layout den Zugriff auf die erforderlichen Pins etwas erschweren würde, da ich einige davon bereits für andere Dinge verwende und die Dinge herummischen müsste. Ich wollte herausfinden, welche Vorteile es gibt, bevor ich anfange, Dinge zu zerreißen und zu bewegen.
Angenommen, Sie vergleichen ein Spi-Peripheriegerät oder eine synchrone serielle "Engine" im Mikro mit der Erzeugung derselben Sequenz durch "Bit-Banging", dann ja, es ist 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 übertragen wird. Im Bit-Banging-Fall neigt der Prozessor dazu, während der Übertragung gebunden zu sein (obwohl das Mikro dazu neigt, der Master zu sein und die meisten Peripheriegeräte vollständig statisch sind, können Sie wahrscheinlich tolerieren, mitten im Byte anzuhalten, um einen Interrupt zu bedienen oder sogar abzufragen Dinge - schnittstellengetaktete 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 ohne weitere Aufmerksamkeit des Prozessors eine Multibyte-Übertragung vom Speicher durch die SPI-Engine ausführt, insbesondere wenn nur Daten in einer Richtung wichtig sind.
Aber viele Mikrocontroller-Projekte sind am Ende hochoptimiert für ihre Aufgabe; Wenn Sie die Zyklen ersparen und die Geschwindigkeitsreduzierung tolerieren können, ist es keineswegs eine ungewöhnliche Wahl, Ihre Software zu komplizieren, um in der Lage zu sein, alle GPIOs zu verwenden, die das physische Layout sauberer machen.
Vorteile des Bit-Banging:
Nachteile von Bit-Banging:
Vorteile von SPI:
Nachteile von SPI:
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 SPIs. Die drei Hauptgründe, die ich für die Wahl von Bit-Banging sehe, sind für
Auf dem PIC benötigt eine herkömmliche Bit-Bang-Implementierung im SPI-Stil etwa fünf Zyklen pro Bit; Mit ein wenig Arbeit an 18Fxx-Teilen kann man das auf etwa vier reduzieren (auf Kosten von etwa drei Zyklen pro Byte zusätzlichen Overhead). Diese Zeit kommt zu jeder Zeit hinzu, die zum Abrufen von Daten erforderlich ist (typischerweise drei Zyklen pro Byte). Stellen Sie sich also ungefähr 40-43 Zyklen pro Byte vor. Mit dem 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, aber die PICs, die ich gesehen habe, können dies nicht), und während der SPI ein Byte sendet der Prozessor kann das nächste abrufen, was eine Gesamtzeit von etwa 18 Zyklen/Byte erlaubt – ein Geschwindigkeitsgewinn von etwa 2,5x.
Für Bit Banging (BB) hast du vergessen zu erwähnen:
sternenblau