Bit stuffing is a term used in communication techonology. It is related to a method to transmit and receive synchronous data transmission in a more robust way on the physical (lower) level of communication. It has two main uses:

1. Suppose, we transmit logic bit '0' as a change in signal level from high to low or vice versa. And the logic '1' is transmitter as not changing the signal level. For example:

Sent Data           0    0     1     1

Signal level high   |----| 
                    |    |
             low  --|    |---------------
Now, suppose there are many 1's being transmitted. If they were transmitted for a long time, the receiver might get confused, go off-sync, 'lose the count' of 1's and receive wrong data in the end. Because of that it is being decided that after, let's say 5 consequent 1's, we always insert (stuff) one 0, just to change the signal level so that the receive can remain on sync. This process is called bit stuffing.

2. The second use for bit stuffing is when we decide on a higher protocol level that six 1's in a row signal us of something, for example, flag of the end of current packet transmission. But problem arises when we want to transmit data that has 6 or more 1's in a row. To overcome this problem, the receiver and transmitter agree that when after 5 consequent 1's in data we insert (stuff) a 0. In that way following 1's will be separated and won't be mistaken for a flag.

The receiver in its turn always removes a 0 after 5 consequent 1's.

Bit stuffing is used in USB communication in the UTM, in IrDA communication and other protocols as well.