I have invented and tested a serial protocol that uses two wires!
It is one-way and is polarity-independent, which is to say, the two wires can be flipped. Wrote test code for it yesterday, and it works.
One more feature: it is slow (some 3-500 bytes/sec).
It's probably good for nothing, just an idle experiment, just thought I'd share. Perhaps someone can get some inspiration from it.
(1) if one wire goes high then low, and the other remains low, it's a 0
(2) if one wire goes high, and while its high the other goes high, then low, it's a 1
(3) if one wire goes high, then the other goes high, and the first goes low before the second, it's a "sync", which means end of this value, ready with next.
It would have taken me 15 minutes to implement and test, had not one of the jumper wires on the breadboard, representing one of the two communication wires, mysteriously loosened. Got some rather strange readings there for a good while.
(1) Pin A ---------- Pin B (2) Pin A ---------- Pin B ---- (3) Pin A ---------- Pin B -----------
So now I hope for hardware support from the Atmel guys ...