Utente:Distagon500/Bit Banging

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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 presenta alcuni vantaggi rispetto alle soluzioni hardware: 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]



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

Guarda anche[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ Michael Predko, Programming and customizing PICmicro microcontrollers (seconda edizione), McGraw-Hill Professional, 2000, p. 10-12, ISBN 978-0-07-136172-9.