Inter-Integrated Circuit(I2C)
Contents
Background information
I2C was designed for short distance serial communication has two modes
- Master mode
- Slave mode
Similar to how SPI functions, with a Controller often acting in master mode and the components
of the device acting as in slave mode, meaning they just receive commands and listen to the master
device.
Data transfer
All data transfers are on the SDA line that are synchronized by a high to low pulse (line goes down)
of the clocks on the SCL line. As the data lines can only change when SCL is set low (besides start and stop)
Due to the design of I2C the use of a pull-up resistor is needed to pull the line
to the voltage range which is considered high, because without one it is impossible for the circuit to reach
the required voltage, and cause the line to be considered "floating"(has an undefined voltage level).
Packet size and layout
- Start Condition - 1 bit:
- Slave Address - 8 bits:
- Acknowledge - 1 bit:
Steps of data transmission
- Start condition - pulls SDA low and keeps SCL high (this means a transmission is about to start)
- Addressing the slave - The master sends the 7-bit address of the slave device it wants to be
communicate with, with the the 8th bit saying if it wants to read or write. - Acknowledgement - the Slave pulls SDA low on the next clock pulse, to confirm its received the message, and it is ready to communicate with the master device.
- Depending on if it is a read or a write operation, the master or the slave sends data in
8 - bit chunks with an acknowledgement after to check if the data has been received successfully. - Stop Condition - The master releases SDA allowing it to default back to high, which signals
the communication has finished - Serial data(SDA)- Transfer the data
- Serial Clock(SCL)- holds the clock signal
- Reference 1: the hardware hacking handbook (free) page 50-53
- Reference 2: I2C Communication Protocol
Related Topics
Topics such as desoldering to chip off or firmware dumping for disk PCB repairs
Further reading
External references in wiki references can just be cited through the keyword link