I2C Explained: How Open-Drain and Pull-Ups Really Work