Utente:Distagon500/Bit Banging

In ingegneria informatica e in ingegneria elettronica, il termine bit banging indica un qualsiasi metodo di trasmissione dati che utilizzi il software come sostituto di un dispositivo hardware dedicato.

Questa tecnica utilizza un quasiasi GPIO del sistema programmabile utilizzato (ad esempio un pin di un microcontrollore) leggendo e scrivendo i diversi stati logici corrispondenti alla trasmissione necessaria. A differenza dell'uso di un controller dedicato (UART, SPI, I²C) il software sarà responsabile di soddisfare tutti i requisiti di temporizzazione e il sequenziamento del protocollo dei segnali.

Il bit banging può essere implementato a costi molto bassi e consente a un dispositivo di usare diversi protocolli di comunicazione con modifiche hardware minime o nulle, queste caratteristiche lo rendono di comune utilizzo in alcuni sistemi embedded.[1]

I principali svantaggi consistono nell'uso intensivo di risorse del processore dedicate alla comunicazione rispetto all'uso di un dispositivo hardware, la ridotta velocità di trasmissione, e la necessità di scrittura del codice dedicato a questa funzione.

Il seguente esempio di codice in linguaggio C trasmette un byte di dati su un bus SPI tramite bit banging.

// transmit byte serially, MSB first
void send_8bit_serial_data(unsigned char data)
{
   int i;

   // select device (active low)
   output_low(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 the clock state 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_high(SD_CS);
}
  1. ^ Michael Predko, Programming and customizing PICmicro microcontrollers (seconda edizione), McGraw-Hill Professional, 2000, p. 10-12, ISBN 978-0-07-136172-9.