I2C is a synchronous, half-duplex serial protocol built around just 2 lines: SCL (clock) and SDA (data), both open-drain and needing pull-up resistors. Unlike SPI, devices are addressed right on the bus -- each device answers to its own address (typically 7-bit), so many devices can share the same two wires with no extra per-device select line. That's convenient, but it also means two devices can't have the same address on one bus, and it's slower than SPI (typically 100kHz or 400kHz). Every byte gets an ACK/NACK bit back from the receiver, so unlike SPI you get built-in confirmation that a device actually saw what you sent.
HiZ> m 1. HiZ 2. 1-WIRE 3. UART 4. I2C 5. SPI 6. 2WIRE 7. 3WIRE 8. KEYB 9. LCD x. exit(without change) (1)> 4 Set speed: 1. ~5KHz 2. ~50KHz 3. ~100KHz 4. ~400KHz (1)> 1 Ready I2C> W Power supplies ON I2C> P Pull-up resistors ON I2C>
I2C> [ 0xd0 0 ] [ 0xd1 r:7 ] I2C START BIT WRITE: 0xD0 ACK WRITE: 0x00 ACK I2C STOP BIT I2C START BIT WRITE: 0xD1 ACK READ: 0x00 ACK 0x20 ACK 0x16 ACK 0x03 ACK 0x01 ACK 0x09 ACK 0x10 NACK I2C STOP BIT I2C>