Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

i2c - I2C Bus Operations

Description

The i2c command performs I2C bus transactions including reading, writing, and scanning for devices. It provides low-level I2C communication capabilities.

Syntax

i2c --channel <channel_name> [options]

Required Options

Option Short Description
--channel -c I2C channel name to use for the transaction

Optional Options

Option Short Description
--address -a 7-bit I2C device address (prefix with 0x for hex)
--write -w Perform write operation
--read -r Perform read operation
--scan -s Scan I2C bus for devices
--length -l Number of bytes to read (default: 1)
--data -d Data bytes to send (space-separated)

Examples

Scan I2C Bus

i2c --channel "I2C_BUS_1" --scan

Write Single Byte

i2c -c "I2C_BUS_1" -a 0x50 -w -d 0x00

Write Multiple Bytes

i2c -c "I2C_BUS_1" -a 0x50 -w -d 0x00 0xFF 0xAA 0x55

Read Single Byte

i2c -c "I2C_BUS_1" -a 0x50 -r -l 1

Read Multiple Bytes

i2c -c "I2C_BUS_1" -a 0x50 -r -l 16

Write Then Read (Combined Transaction)

i2c -c "I2C_BUS_1" -a 0x50 -w -r -l 4 -d 0x00

Decimal Address and Data

i2c -c "I2C_BUS_1" -a 80 -w -d 0 255

Operation Types

The command supports these I2C operations:

Operation Flags Description
Scan --scan Detect all devices on bus
Send --write Write data only
Receive --read Read data only
SendReceive --write --read Write then read (restart)

Output Format

Sent: 0x00 0xFF
Received: 0x12 0x34 0x56 0x78
Transaction took 3.45 ms

Output Colors

  • Dark Cyan: Sent data
  • Dark Magenta: Received data
  • Blue: Transaction timing

I2C Scan Output

When scanning, the command returns all addresses that ACK:

Sent:
Received: 0x50 0x51 0x68
Transaction took 234.56 ms

Address Format

Addresses can be specified in multiple formats:

Format Example Decimal Value
Hexadecimal 0x50 80
Hexadecimal 0x48 72
Decimal 80 80
Decimal 72 72

Note: Always use 7-bit addresses (not 8-bit with R/W bit).

Data Format

Data bytes can be specified in multiple formats:

Format Example
Hexadecimal 0xFF 0x00 0xAA
Decimal 255 0 170
Mixed 0xFF 0 0xAA

Use Cases

Detect Devices

# Scan entire bus
i2c -c "I2C_MAIN" -s

Read EEPROM

# Set address pointer
i2c -c "I2C_MAIN" -a 0x50 -w -d 0x00 0x00

# Read 256 bytes
i2c -c "I2C_MAIN" -a 0x50 -r -l 256

Write Configuration Register

# Write CONFIG register
i2c -c "I2C_MAIN" -a 0x48 -w -d 0x01 0xA0

Read Sensor Data

# Combined transaction (register read)
i2c -c "I2C_MAIN" -a 0x48 -w -r -l 2 -d 0x00

Verify Device Presence

# Quick check if device responds
i2c -c "I2C_MAIN" -a 0x50 -s

Transaction Timing

Typical transaction times:

Operation Typical Time
Single byte write 2-5 ms
Single byte read 2-5 ms
Bus scan 200-500 ms
16-byte read 5-15 ms
256-byte read 50-150 ms

Error Handling

Common errors:

  • No option supplied: Must specify scan, read, or write
  • Address required: Read/write operations need device address
  • Channel not found: Verify I2C channel name
  • NACK: Device didn't acknowledge (wrong address or device error)
  • Timeout: Bus or device not responding
  • Not connected: Run init command first

I2C Specifications

  • Speed: Depends on hardware (typically 100kHz or 400kHz)
  • Address Range: 0x08 to 0x77 (7-bit addresses)
  • Reserved Addresses: 0x00-0x07, 0x78-0x7F
  • Maximum Length: Hardware dependent (typically 256 bytes)

Best Practices

  1. Always scan first: Verify devices before read/write
  2. Check timing: Monitor transaction duration
  3. Use correct address: Verify 7-bit address in datasheet
  4. Start simple: Test with single bytes before multi-byte
  5. Handle errors: Check NACK/timeout conditions

Advanced Examples

Sequential Read

# Read temperature sensor
i2c -c "I2C_MAIN" -a 0x48 -w -r -l 2 -d 0x00

Bulk Write

# Program configuration
i2c -c "I2C_MAIN" -a 0x20 -w -d 0x10 0x20 0x30 0x40

Device Identification

# Read ID registers
i2c -c "I2C_MAIN" -a 0x68 -w -r -l 4 -d 0xFA

Notes

  • Requires an active connection (use init first)
  • Some devices require specific timing (delays between transactions)
  • Clock stretching support depends on hardware
  • Multi-master bus may cause collisions
  • Consider using high-level module interfaces for complex devices

See Also

  • list - List available I2C channels
  • module - Load I2C device modules
  • conf - Configure I2C channel properties
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.