

The Bus I2C (Inter-Integrated Circuit) by Chino is a versatile, multi-master, multi-slave, packet-switched, single-ended serial communication bus. It is widely used in embedded systems to connect low-speed devices such as sensors, EEPROMs, real-time clocks, and microcontrollers. The I2C bus is known for its simplicity and efficiency, requiring only two wires for communication: a data line (SDA) and a clock line (SCL).








The following table outlines the key technical details of the Chino I2C bus:
| Parameter | Specification |
|---|---|
| Communication Type | Serial, synchronous |
| Number of Wires | 2 (SDA - Serial Data, SCL - Serial Clock) |
| Voltage Levels | 3.3V or 5V (depending on the system) |
| Data Rate | Standard Mode: 100 kbps, Fast Mode: 400 kbps |
| Maximum Devices | 127 devices (7-bit addressing) |
| Pull-Up Resistors | Required on SDA and SCL lines (typically 4.7kΩ to 10kΩ) |
| Protocol Features | Multi-master, multi-slave, collision detection |
The I2C bus does not have a fixed pinout, as it is implemented on microcontrollers or devices with configurable pins. However, the two essential lines are:
| Pin Name | Description |
|---|---|
| SDA | Serial Data Line: Transfers data between devices. Requires a pull-up resistor. |
| SCL | Serial Clock Line: Synchronizes data transfer. Requires a pull-up resistor. |
Below is an example of how to use the I2C bus to communicate with a sensor using an Arduino UNO:
#include <Wire.h> // Include the Wire library for I2C communication
#define SENSOR_ADDRESS 0x40 // Replace with the I2C address of your sensor
void setup() {
Wire.begin(); // Initialize the I2C bus
Serial.begin(9600); // Start serial communication for debugging
}
void loop() {
Wire.beginTransmission(SENSOR_ADDRESS); // Start communication with the sensor
Wire.write(0x00); // Send a command to the sensor (e.g., read data)
Wire.endTransmission(); // End the transmission
Wire.requestFrom(SENSOR_ADDRESS, 2); // Request 2 bytes of data from the sensor
if (Wire.available() == 2) { // Check if 2 bytes are available
int data = Wire.read() << 8 | Wire.read(); // Combine the two bytes into a single value
Serial.println(data); // Print the data to the serial monitor
}
delay(1000); // Wait for 1 second before the next reading
}
No Communication on the Bus:
Address Conflicts:
Data Corruption:
Clock Stretching Issues:
Q: Can I connect devices with different voltage levels on the same I2C bus?
A: No, all devices must operate at the same voltage level. Use level shifters if necessary.
Q: How many devices can I connect to the I2C bus?
A: Up to 127 devices can be connected using 7-bit addressing.
Q: What happens if two masters try to communicate at the same time?
A: The I2C protocol includes collision detection to handle such scenarios. One master will back off.
Q: Do I need external pull-up resistors if my microcontroller has internal ones?
A: External pull-up resistors are recommended for reliable operation, as internal ones may not provide sufficient pull-up strength.
This documentation provides a comprehensive guide to understanding and using the Chino I2C bus in embedded systems.