I2C tiene algunas características que mejoran en otros buses de comunicación, y para implementar eso, tuvo que cambiar a un estilo diferente de conexión. Si dos dispositivos fuerzan una línea a dos estados diferentes, puede acortar la línea y posiblemente dañar algo.
UARTs / Serial y SPI son comunicaciones unidireccionales. Con esto quiero decir que cada línea está dedicada en una sola dirección. Tienes un pin transmisor y otro receptor. Como cada pin está dedicado a esa dirección, puede ser controlado por un lado sin preocupaciones. Lo que lleva al segundo rasgo faltante en ellos, es que son esencialmente un solo maestro. Debe tener un bus dedicado para cada UART, y para los propósitos más prácticos, cada maestro SPI. Finalmente, no hay manera de resolver conflictos en el bus, incluso si no hay daños si dos dispositivos intentan hablar sobre él.
I2C no tiene estos fallos. Su configuración de colector abierto permite que una sola línea de comunicación funcione en ambas direcciones, con varios esclavos. Puede tener varios maestros, ya que hay una forma integrada de verificar la línea. Un esclavo puede mantener presionado el reloj (alargamiento del reloj) si necesita más tiempo. Un superconjunto de I2C llamado SMBus permite aún más funciones, como permitir arbitrariamente que un esclavo emita una señal o alarma.
En pocas palabras, I2C necesita pull-ups como opción de diseño para permitir que falten varias funciones de otros buses de comunicación, principalmente para permitir más comunicación en un solo par de cables