# I2C actually sends inverted data over the line?

It seems to me that I2C is actually transfering inverted bits which sounds a bit odd so I am seeking for a clarification.

I2C diagram from here.

Let's say we are writing to slave. A zero (0) comes to SDA out, which means nMOS is in HiZ and the receiver gets a 1 due to Pull-up. And if a 1 comes to SDA out then nMOS will connect with ground meaning receiver gets a 0.

So it seems to me as if I2C is actually sending inverted data across the SDL. This does not really make any sense to me so.. is there an inverter on the receiver's end not shown in the diagram that makes the data correct? Or did I misunderstood how it works in the first place?

-
If you want to understand I2C, then read the official I2C spec. At least, skim through it. The spec is available free of charge. –  Nick Alexeev Jun 17 '14 at 17:42

## 1 Answer

You should not take that diagram as literal as you do. It shows how the electrical guys typically implement the hardware interface, and which explicit and implicit resistors play a part in shaping the waveforms.

The I2C standard states how a bit it transferred over I2C, that is the final word on it. It states that a 1 is transmitted as high on the SDA line. The 'sending FET' must be high-impedance to make the line high, hence we must feed it the inverted signal on what is called 'SDA out' in the diagram (in order to comply with the I2C standard).

If the author of that diagram had cared about signal polarity, he would have called it *SDA_out (the * means inverted) or the equivalent in another convention.

-