Bit-Banging

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.

// 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); } 

Tags:

Eingabe und AusgabeEmulationMikrocontrollerPersonal ComputerSchnittstelle

🔥 Trending searches on Wiki Deutsch:

Tage, die es nicht gabKasachstanFleetwood MacLitauenIKEAJeffrey DahmerLeon GoretzkaHansi FlickStellantisDeutsche FußballnationalmannschaftTaylor SwiftGeneration YTerroranschläge am 11. September 2001WikiUkraineDesperate HousewivesNina ChubaSupercell (Spieleentwickler)BerlinSpanienKanadaMikojan-Gurewitsch MiG-29ArgentinienBen StillerRicarda LangSüdwestrundfunkInglourious BasterdsManta, MantaSerbienJosef FritzlHelmut SchmidtCBOE Volatility IndexMaltaKatja KrasaviceSowjetunionHans Richter (Fußballspieler)Camp DavidLuftwaffe (Bundeswehr)Iris ApfelManfred von RichthofenJoshua KimmichCharles III.Outer Banks (Fernsehserie)Knock Knock (2015)Céline DionRömische KaiserzeitLuna SchweigerListe der größten AuslegerbrückenFelix NmechaCasu MarzuVerwandtschaftsbeziehungThe Last of Us (Fernsehserie)BelarusJan BöhmermannBertolt BrechtAnnemarie Moser-PröllEdita MalovčićKloster HöchstRobert PatrickBosnien und HerzegowinaThüringenNikolaus BlomeThilo KehrerGründonnerstagSingapurMargot RobbieVerena KerthSexualpraktikVienna Blood (Fernsehreihe)The Rookie (Fernsehserie)HessenDune (2021)Freddie MercuryT-90🡆 More