List, read from, and write to I2C devices.
Usage
i2cutil read <device> <address> [<address>...]
i2cutil write <device> <address> [<address>...] <data> [<data>...]
i2cutil transact <device> (r <bytes>|w <address> [<address>...] [<data>...])...
i2cutil dump <device> <address> <count>
i2cutil list
i2cutil ping
i2cutil help
Commands
read
i2cutil read <device> <address> [<address>...]
Read one byte from an I2C device. Use transact
to read multiple bytes. <device>
can be the full path of
a devfs node (example: /dev/class/i2c/031
) or only the
devfs node's index (example: 31
) or it can simply be the
device's friendly named obtained via i2cutil list
. Use
ping
to get devfs node paths and indexes.
<address>
is the internal register of <device>
to read
from. Use multiple <address>
values to access a multi-byte
(little-endian) register address. For example
i2cutil read 4 0x20 0x3D
to read the register at 0x203D
.
write
i2cutil write <device> <address> [<address>...] <data> [<data>...]
Write one or more bytes (<data>
) to an I2C device. See the
read
description for explanations of <device>
and <address>
.
transact
i2cutil transact <device> (r <bytes>|w <address> [<address>...] [<data>...])...
Perform a transaction with multiple segments. Each segment can be a write
(w
) or a read (r
).
dump
i2cutil dump <device> <start> <count>
Reads and prints <count>
registers from <device>
starting at the address
indicated by <address>
list
i2cutil list
Lists all I2C devices available on the system. The friendly name of the device will
also be listed if one is provided. Otherwise the device will appear as (ANONYMOUS)
.
ping
i2cutil ping
Ping all I2C devices under devfs path /dev/class/i2c
by
reading from each device's 0x00
address.
help
i2cutil help
Print help text.
Examples
Read one byte
Read one byte from the register at 0x20
of the I2C device
represented by devfs node index 4
:
$ i2cutil read 4 0x20
Read three bytes
Read three bytes from the register at 0x20
of the I2C device
represented by devfs node index 4
:
$ i2cutil transact 4 w 0x20 r 3
Dump nine registers starting at address 0x10
Dump nine registers starting at address 0x10.
$ i2cutil dump pmic 0x10 9
0x10: 0x00
0x11: 0x00
0x12: 0x00
0x13: 0x00
0x14: 0x00
0x15: 0x00
0x16: 0x00
0x17: 0x00
0x18: 0x00
Read one byte from a multi-byte address
Read one byte from the register at the multi-byte address 0x203D
of the I2C device represented by devfs node index 4
:
$ i2cutil read 4 0x20 0x3D
Read one byte using a devfs node path
Read one byte from the register at the multi-byte address 0x203D
of the I2C device represented by the devfs node path
/dev/class/i2c/004
:
$ i2cutil read /dev/class/i2c/004 0x20 0x3D
Read one byte using the device's friendly name
Read one byte from the register at the multi-byte address 0x203D
of the I2C device named temp_sensor
:
$ i2cutil list
378: temp_sensor
379: (ANONYMOUS)
380: humidity_sensor
381: pmic
$ i2cutil read temp_sensor 0x20 0x3D
Write one byte
Write one byte 0x12
to the register at 0x2C
of the I2C device represented by
devfs node index 3
:
$ i2cutil write 3 0x2C 0x12
Write two bytes using a devfs node path
Write two bytes 0x121B
to the register at 0x2C
of the
I2C device represented by devfs node index /dev/class/i2c/003
:
$ i2cutil write /dev/class/i2c/003 0x2C 0x12 0x1B
Ping all I2C devices
Read the 0x00
address of all devices found under
/dev/class/i2c
.
$ i2cutil ping
/dev/class/i2c/821: OK
/dev/class/i2c/822: OK
/dev/class/i2c/823: OK
/dev/class/i2c/824: OK
Error ZX_ERR_TIMED_OUT
/dev/class/i2c/825: ERROR
List all I2C devices
List all I2C devices on the system along with their friendly names if one is available.
$ i2cutil list
378: temp_sensor
379: (ANONYMOUS)
380: humidity_sensor
381: pmic
Notes
Source code
Source code for i2cutil
: //src/devices/i2c/bin/i2cutil.cc