

Start Condition: The SDA line switches from a high voltage level to a low voltage level before the SCL line switches from high to low. The message also includes start and stop conditions, read/write bits, and ACK/NACK bits between each data frame: Each message has an address frame that contains the binary address of the slave, and one or more data frames that contain the data being transmitted. Messages are broken up into frames of data.

With I2C, data is transferred in messages. The clock signal is always controlled by the master. Like SPI, I2C is synchronous, so the output of bits is synchronized to the sampling of bits by a clock signal shared between the master and the slave. I2C is a serial communication protocol, so data is transferred bit by bit along a single wire (the SDA line). SCL (Serial Clock) – The line that carries the clock signal. SDA (Serial Data) – The line for the master and slave to send and receive data. Like UART communication, I2C only uses two wires to transmit data between devices: This is really useful when you want to have more than one microcontroller logging data to a single memory card or displaying text to a single LCD. With I2C, you can connect multiple slaves to a single master (like SPI) and you can have multiple masters controlling single, or multiple slaves. I2C combines the best features of SPI and UARTs. You’ll probably find yourself using I2C if you ever build projects that use OLED displays, barometric pressure sensors, or gyroscope/accelerometer modules.
