Why I2C is used with Raspberry Pi - Performance Analysis
When using I2C communication with Raspberry Pi, it is important to understand how the time taken grows as more devices or data are involved.
We want to know how the time to send or receive data changes when the number of devices or data size increases.
Analyze the time complexity of sending data to multiple I2C devices connected to Raspberry Pi.
for device in devices:
i2c.start()
i2c.send_address(device.address)
for byte in data:
i2c.send_byte(byte)
i2c.stop()
This code sends the same data bytes to each device on the I2C bus one by one.
Look at what repeats in the code:
- Primary operation: Sending each byte of data to each device.
- How many times: For each device, the inner loop sends all bytes of data.
As the number of devices or data bytes grows, the total sending time grows too.
| Input Size (devices x data bytes) | Approx. Operations |
|---|---|
| 10 devices x 5 bytes | 50 sends |
| 100 devices x 5 bytes | 500 sends |
| 100 devices x 100 bytes | 10,000 sends |
Pattern observation: The total operations grow by multiplying the number of devices by the number of bytes sent.
Time Complexity: O(n x m)
This means the time grows proportionally to the number of devices (n) times the number of data bytes (m) sent to each device.
[X] Wrong: "Sending data to multiple devices takes the same time as sending to one device."
[OK] Correct: Because each device requires its own communication session, the time adds up for each device multiplied by the data size.
Understanding how communication time grows with devices and data helps you design efficient Raspberry Pi projects and explain your reasoning clearly in technical discussions.
"What if we send different amounts of data to each device? How would the time complexity change?"
