I can see the advantage of Manchester code over NRZ: you get clock and data in one signal combined. But what does differential Manchester add to that?
According to wiki answers: -
Unlike with Manchester encoding, only the presence of a transition is important, not the polarity. Differential coding schemes will work exactly the same if the signal is inverted (wires swapped).
That sounds a nice feature to me.
On another wiki answer it says it gives better noise immunity than normal M-encoding. And on another it explains how it achieves it: -
A '1' bit is indicated by making the first half of the signal equal to the last half of the previous bit's signal i.e. no transition at the start of the bit-time. A '0' bit is indicated by making the first half of the signal opposite to the last half of the previous bit's signal i.e. a zero bit is indicated by a transition at the beginning of the bit-time. In the middle of the bit-time there is always a transition, whether from high to low, or low to high. A reversed scheme is possible, and no advantage is given by using either scheme.
Following a little trawl on the web I thought I'd put this drawing in that I modified to show how the bit transitions indicated logic 1 and logic 0 data: -
This is why the data stream can be inverted and you can still decode correctly.
One "problem" with normal manchester coding is that a steady stream of encoded zeros looks exactly like a steady stream of encoded ones (unless you are in sync). In my case I wanted the line to idle with a known signal and frame the packets with a single start bit (= one). (I wanted to avoid a longer preamble to shorten the response time). By using differential manchester coding I can idle the line at zero and rest assured that the receiver will be in sync when I send the first start bit (one). (please note that I have defined No transition at start bit as "0" and transition at start bit as "1" = opposite of the picture above). Thus; one advantage with differential manchester encoding is that the receiver can reliably lock onto a steady stream of equal symbols that has no transition at start bit.
I have no theoretical additions to the answers already here. But this tool gives an intuitive understanding of the differences. Biphase-L is Manchester encoding. The other two biphases are differential Manchester encodings. Particularly, you can see @Oyvin's answer in action.