Inter-Integrated Circuit (I2C) is a bidirectional communication protocol commonly used to connect microcontrollers (MCUs) to various integrated circuits (ICs) like IMUs, temperature sensors, multiplexers, and more. It's popular for its simple hardware interface, multi-slave communication capability, and low power consumption.
...
Notice that there is only 1 NMOS transistor that controls Vout. A Pull-up/Pull-down GPIO has two transistors. When Vin is HIGH, Vout = GND. However, when Vin is LOW, we notice that Vout is left floating. That's when the pull-up resistor pulls the line HIGH.
Packet Protocol:
Arbitration:.
Multi-Slave Busses
I2C busses can hold up to 127 slaves on a single bus. Unlike SPI, I2C does not have a chip select line to control communication. Instead I2C relies on IC addressing (each IC on the bus has a different address). Typically each slave has alternative addresses that can be configured in the situation two slaves have the same address.
Arbitration:
Arbitration is used to resolve conflicts that arise from 2 or more devices transmitting on the bus. The bus has a wired-AND system, where only one bus can
Clock Stretching:
Resources:
https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/
https://en.wikipedia.org/wiki/I%C2%B2C
https://www.allaboutcircuits.com/technical-articles/the-i2c-bus-hardware-implementation-details/