The NRZI coding scheme transmits a 0 bit as a signal transition, and a 1 bit as no change. In this case, bit stuffing is most easily described as the insertion of a 0 bit after a long run of 1 bits.
It was popularized by IBM's SDLC (later renamed HDLC), and is also used in Low- and full-speed USB.
After a long sequence of 1 bits there would be no transitions in the transmitted data, and it would be possible for the transmitter and receiver clocks to lose synchronisation. By inserting a 0 after five (SDLC) or six (USB) consecutive 1 bits the transmitter guarantees a maximum of six (SDLC) or seven (USB) bit times between transitions. The receiver can synchronise its clock against the transitions to ensure proper data recovery.
In SDLC the transmitted bit sequence "01111110" containing six adjacent 1 bits is the Flag byte. Bit stuffing ensures that this pattern can never occur in normal data, so it can be used as a marker for the beginning and end of the frame without any possibility of being confused with normal data.1
The main disadvantage of bit-stuffing is that the code rate is unpredictable; it depends on the data being transmitted.
Source: from Federal Standard 1037C in support of MIL-STD-188
Kevin R. Fall and W. Richard Stevens, TCP/IP Illustrated Volume 1: The Protocols, Second Edition, Addison-Wesley, 2012, Kindle Edition loc 3505 ↩