El bit-banging se refiere al concepto de que las señales que salen o entran en un dispositivo sean generadas/muestreadas por software en lugar de por hardware. Evidentemente, se necesita algo de hardware, pero cuando se utiliza el bit-banging, el único hardware para cada salida es un latch que puede ser explícitamente activado o desactivado por el software, y el único hardware para cada entrada es una interfaz para permitir que el software compruebe si es alto o bajo (y normalmente ejecutar una rama condicional para un estado pero no para el otro).
La velocidad máxima que puede alcanzarse con el bit-banging será, por lo general, una fracción de lo que podría lograrse con hardware de propósito general, pero fuera de las limitaciones impuestas por la velocidad del procesador, el bit-banging es mucho más versátil, y puede utilizarse en circunstancias en las que el hardware de propósito general no es del todo adecuado y el hardware de propósito especial no sería rentable.
Por ejemplo, muchos controladores tienen un puerto "estilo SPI" que se comporta esencialmente de la siguiente manera: cuando se escribe un byte en un determinado registro, el hardware generará un cierto número de pulsos de reloj (normalmente ocho), sincronizando un bit de datos en el flanco de subida de cada pulso de reloj y muestreando un bit de datos entrante en el flanco de bajada. Generalmente, los puertos de estilo SPI de los controladores permitirán configurar una variedad de características, pero en algunos casos puede ser necesario interconectar un procesador con un dispositivo que haga algo inusual. Un dispositivo puede requerir que los bits de datos sean procesados en múltiplos diferentes a ocho, o puede requerir que los datos sean tanto de salida como de muestreo en el mismo flanco de reloj, o puede tener algún otro requisito inusual. Si el hardware concreto del controlador que se utiliza puede soportar los requisitos precisos, estupendo (algunos proporcionan números de bits configurables, tiempos de transmisión y recepción configurables por separado, etc.) Si no, puede ser útil el golpeo de bits. Dependiendo del controlador, el bit-banging de una interfaz SPI tardará entre 2 y 10 veces más que dejar que el hardware se encargue de ello, pero si los requisitos no se ajustan al hardware que uno tiene, intercambiar datos más lentamente puede ser mejor que no poder hacerlo en absoluto.
Una cosa importante que hay que tener en cuenta con los diseños de golpeo de bits es que son más simples y robustos en circunstancias en las que los dispositivos con los que se comunican están esperando que el controlador de golpeo de bits genere toda su temporización, o en las que el controlador podrá esperar, sin distracción, a que llegue un evento, y en las que podrá hacer todo lo que necesita hacer con ese evento antes de que llegue cualquier otro evento sobre el que tenga que actuar. Son mucho menos robustos en circunstancias en las que un dispositivo tendrá que ser capaz de reaccionar a estímulos externos en un plazo relativamente corto, pero no puede destinar el 100% de su energía a vigilar dichos estímulos.
Por ejemplo, supongamos que se desea que un procesador transmita datos en serie al estilo UART a una velocidad muy alta en relación con su velocidad de reloj (por ejemplo, un PIC que ejecuta 8.192 instrucciones por segundo desea emitir datos a 1200 bps). Si no se activan las interrupciones, esta transmisión no es difícil (reloj un bit cada siete ciclos de instrucción). Si un PIC no hiciera nada más que esperar un byte de datos de 1200 bps entrante, podría ejecutar un bucle de 3 ciclos esperando el bit de inicio, y luego proceder a la relojería de los datos a intervalos de siete ciclos. De hecho, si un PIC tuviera un byte de datos listo para enviar cuando llegara un byte de datos entrante, siete ciclos por bit serían suficientes para que el PIC enviara su byte de datos simultáneamente con la lectura del byte entrante. Del mismo modo, un PIC que iniciara una transmisión de 1200bps podría mirar si el dispositivo con el que se comunica está enviando una respuesta, si dicha respuesta tuviera un tiempo fijo con respecto a la transmisión original . Por otro lado, no habría forma de que los PICs de esa velocidad manejaran las comunicaciones bit-bang de tal manera que cualquiera de los dos dispositivos pudiera transmitir en cualquier momento que considerara oportuno (a diferencia de tener un dispositivo que pudiera transmitir cuando lo considerara oportuno, y hacer lo que quisiera cuando no transmitiera, y un dispositivo que tuviera que pasar la mayor parte de su tiempo sin hacer nada más que esperar las transmisiones del primer dispositivo).