Bit-Banging bezieht sich auf das Konzept, dass die Signale, die von einem Gerät ausgehen oder in ein Gerät gelangen, eher von Software als von Hardware erzeugt / abgetastet werden. Natürlich ist etwas Hardware erforderlich, aber wenn Bit-Banging verwendet wird, ist die einzige Hardware für jeden Ausgang ein Latch, das von der Software explizit gesetzt oder gelöscht werden kann, und die einzige Hardware für jeden Eingang ist eine Schnittstelle, über die die Software testen kann, ob dies der Fall ist high oder low (und führen normalerweise eine bedingte Verzweigung für einen Zustand aus, jedoch nicht für den anderen).
Die maximale Geschwindigkeit, die mit Bit-Banging erreicht werden kann, ist im Allgemeinen ein Bruchteil dessen, was mit speziell entwickelter Hardware erreicht werden könnte. Außerhalb der durch die Prozessorgeschwindigkeit auferlegten Einschränkungen ist Bit-Banging jedoch viel vielseitiger und kann unter bestimmten Umständen verwendet werden wo Universalhardware nicht ganz geeignet ist und Spezialhardware nicht kostengünstig wäre.
Beispielsweise haben viele Steuerungen einen "SPI-artigen" Port, der sich im wesentlichen wie folgt verhält: Wenn ein Byte in ein bestimmtes Register geschrieben wird, erzeugt die Hardware eine gewisse Anzahl von Taktimpulsen (typischerweise acht), die ein Datenbit auf dem austakten Vorderflanke jedes Taktimpulses und Abtasten eines ankommenden Datenbits auf der Hinterflanke. Im Allgemeinen ermöglichen die SPI-Ports der Controller die Konfiguration einer Vielzahl von Funktionen. In einigen Fällen kann es jedoch erforderlich sein, einen Prozessor an ein Gerät anzuschließen, das ungewöhnliche Aktionen ausführt. Ein Gerät kann erfordern, dass Datenbits in Vielfachen anders als acht verarbeitet werden, oder es kann erfordern, dass Daten an derselben Taktflanke ausgegeben und abgetastet werden, oder es kann eine andere ungewöhnliche Anforderung haben. Wenn die spezielle Hardware auf dem Controller, den Sie verwenden, Ihre genauen Anforderungen erfüllen kann, großartig (einige bieten eine konfigurierbare Anzahl von Bits, separat konfigurierbare Sende- und Empfangszeiten usw.) Wenn nicht, kann Bit-Banging hilfreich sein. Abhängig vom Controller dauert das Bit-Banging einer SPI-Schnittstelle oft 2-10-mal so lange, bis die Hardware damit fertig ist. Wenn die Anforderungen jedoch nicht mit der Hardware übereinstimmen, ist der langsamere Datenaustausch möglicherweise besser als überhaupt nicht in der Lage zu sein.
Bei Bit-Banged-Designs ist zu beachten, dass sie am einfachsten und robustesten sind, wenn entweder die Geräte, mit denen kommuniziert wird, auf den Bit-Banging-Controller warten, um ihr gesamtes Timing zu generieren, oder wenn der Controller dies zulässt Warten Sie ohne Ablenkung, bis ein Ereignis eintrifft, und stellen Sie sicher, dass es in der Lage ist, alles zu tun, was für dieses Ereignis erforderlich ist, bevor ein anderes Ereignis eintrifft, auf das es reagieren muss. Sie sind viel weniger robust, wenn ein Gerät in einem relativ kurzen Zeitraum auf externe Reize reagieren muss, aber nicht 100% seiner Energie auf solche Reize ausgeben kann.
Angenommen, ein Prozessor soll Daten im UART-Stil seriell mit einer Rate übertragen, die im Verhältnis zu seiner Taktgeschwindigkeit sehr hoch ist (z. B. möchte ein PIC, der 8.192 Anweisungen pro Sekunde ausführt, Daten mit 1200 bps ausgeben). Wenn keine Interrupts aktiviert sind, ist eine solche Übertragung nicht schwierig (ein Bit alle sieben Befehlszyklen takten). Wenn ein PIC nichts anderes tut, als auf ein eingehendes 1200-Bit / s-Datenbyte zu warten, kann er eine 3-Zyklus-Schleife ausführen, die auf das Startbit wartet, und dann fortfahren, die Daten in Intervallen von sieben Zyklen einzutakten. In der Tat, wenn ein PIC ein Datenbyte zum Senden bereit hätte, wenn ein eingehendes Datenbyte ankommt, würden sieben Zyklen pro Bit ausreichen, damit der PIC sein Datenbyte gleichzeitig mit dem Lesen des eingehenden Bytes sendet. Gleichfalls,wenn eine solche Antwort einen festen Zeitpunkt in Bezug auf die ursprüngliche Übertragung hätte . Auf der anderen Seite würde es für PICs, die so schnell arbeiten, keine Möglichkeit geben, Bit-Bang-Kommunikationen so abzuwickeln, dass jedes Gerät zu einem Zeitpunkt senden kann, zu dem es passt (im Gegensatz zu einem Gerät, das senden kann, wenn es sieht) fit sein und tun, was immer es will, wenn es nicht sendet, und ein Gerät, das den größten Teil seiner Zeit damit verbringen müsste, nichts anderes zu tun, als auf Übertragungen vom ersten Gerät zu warten).