Protocol - I2C

Inter-Integrated Circuit (I2C), pronounced “eye squared see,” is a master-slave configuration in which a serial data line (SDA) and a serial clock line (SCL) are shared between the master/initiator and all of its slaves/followers. Microcontrollers often use a master/initiator-slave/follower configuration, where  one or more master/initiator units control the flow of information to and from their slaves/followers. The benefit of the master/initiator-slave/follower configuration is that it typically links together multiple units on the same board to one centralized unit. In some sense, it is similar to how several workers can be supervised under one manager. The critical idea is that each slave/follower has a communication link with the master/initiator. Thus, the master can call upon any slave/follower at any time and ensure uncorrupted and orderly data transfer.

Additionally, due to how the I2C is implemented in hardware (shown in the figure below), any I2C interface will always require that an external Pull-Up Resistor be added to keep the idle voltage of the transmission line high (at VCC when idle). In our Logic Level Converter (LLC) designed later, we account for this fact.

Due to the nature of this project, which involves breadboard-design of I2C devices using a transistor logic-level converter (explained in a later section) there will be transmission noise on switching and transistor noise which is unavoidable, regardless of the pull-up resistors chosen for SDA and SCL. We will discuss how to address this problem later.