It was originally developed by Phillips in the early '80s, but is now supported by a wide range of companies. I first stumbled over this bus when I still had my old Commodore C64, while looking over some hardware books. I never built an adapter, so I forgot about it, until I started to hack around in the Linux kernel. Then I thought building an adapter and writing a corresponding kernel module to access the bus a character device would be a promising goal. The I2C bus consists of two lines, one for the data and one for the clock.
Transmission is initiated via a start condition, after which an address byte is transmitted.
The byte consists of a 7-bit device address and a direction bit. If a slave recognizes its own address, it acknowledges the transmission. Then, any number of bytes can be transmitted to the slave, until the last byte is not acknowledged. Transmission ends with a stop condition. The data is transferred synchronously with the high state of the clock line, when the state of the data signal has to be stable.