Zum Inhalt springen

Bit-Banging

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 5. Juli 2023 um 10:07 Uhr durch imported>SBàVélo (fehlendes "delay();" im Code eingefügt).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Unter Bit-Banging versteht man eine Technik, die mittels Software und I/O-Leitungen eine Hardware-Schnittstelle emuliert, die gewöhnlich mit einem spezifischen Peripherie-Baustein realisiert wird. Auf einem PC können sowohl die serielle als auch die parallele Schnittstelle genutzt werden. Bei Mikrocontrollern nutzt man die I/O-Pins.

Das Bit-Banging-Verfahren kann dann sinnvoll sein, wenn eine bestimmte Schnittstelle nicht in Hardware vorhanden ist, z. B. hat kein Standard-PC ein SPI, oder wenn bei Mikrocontrollern eine Ressource bereits belegt ist. Besonders häufig dient Bit-Banging der Kosteneinsparung durch Ersetzen relativ teurer Peripheriebausteine.

Eine Vielzahl von Schnittstellen kann durch Bit-Banging emuliert werden. Hier einige Beispiele:

Entsprechend der Komplexität des Schnittstellen-Protokolls kommen unterschiedliche Methoden zum Einsatz. Die einfachste Art ist das Polling. Der Prozessor fragt, so oft er kann, Änderungen an den I/O-Leitungen ab. Ist ein bestimmtes Zeitverhalten einzuhalten, benutzt man Warteschleifen oder Timer-Funktionen. Die Nutzung der Interrupt-Leitungen reduziert weiter die Prozessorauslastung. Speziell zur Erzeugung eines PWM-Signals dienen häufig die direkten Timer-Ausgänge. Trickreich ist die Aufwertung einer einfacheren Schnittstelle zu einem komplexen Protokoll.

Nachteile des Bit-Bangings sind die hohe Prozessorauslastung, der erhöhte Softwareaufwand und meist starkes Jitter beim Zeitverhalten. Einige Schnittstellen, etwa SPI, sind dagegen immun, andere, etwa UART, haben strikte Zeitforderungen.

Programmbeispiel in C

Im folgenden Fragment in der Programmiersprache C ist der Sendeteil einer synchronen seriellen Schnittstelle (SPI) mittels Bit-Banging dargestellt. Die I/O-Pins sind als SD_CS (Chip Select), SD_DI (Data) und als SD_CLK (Clock) bezeichnet.

<syntaxhighlight lang="C"> // transmit byte serially, MSB first void send_8bit_serial_data(unsigned char data) {

  int i;
  // select device
  output_high(SD_CS);
  // send bits 7..0
  for (i = 0; i < 8; i++)
  {
      // consider leftmost bit
      // set line high if bit is 1, low if bit is 0
      if (data & 0x80)
          output_high(SD_DI);
      else
          output_low(SD_DI);
      // pulse clock to indicate that bit value should be read
      output_low(SD_CLK);
      delay();
      output_high(SD_CLK);
      // shift byte left so next bit will be leftmost
      data <<= 1;
  }
  // deselect device
  output_low(SD_CS);

} </syntaxhighlight>

Weblinks