1i2ctransfer(8) System Manager's Manual i2ctransfer(8)
2
3
4
6 i2ctransfer - send user-defined I2C messages in one transfer
7
8
10 i2ctransfer [-f] [-y] [-v] [-a] i2cbus desc [data] [desc [data]] ...
11 i2ctransfer -V
12
13
15 i2ctransfer is a program to create I2C messages and send them combined
16 as one transfer. For read messages, the contents of the received buf‐
17 fers are printed to stdout, one line per read message.
18 Please note the difference between a transfer and a message here. A
19 transfer may consist of multiple messages and is started with a START
20 condition and ends with a STOP condition as described in the I2C speci‐
21 fication. Messages within the transfer are concatenated using the RE‐
22 PEATED START condition which is described there as well. There are
23 some advantages of having multiple messages in one transfer. First,
24 some devices keep their internal states for REPEATED START but reset
25 them after a STOP. Second, you cannot get interrupted during one
26 transfer, but it might happen between multiple transfers. Interruption
27 could happen on hardware level by another I2C master on the bus, or at
28 software level by another I2C user who got its transfer scheduled be‐
29 tween yours. This program helps you to create proper transfers for
30 your needs.
31
32
34 -f Force access to the device even if it is already busy. By de‐
35 fault, i2ctransfer will refuse to access a device which is al‐
36 ready under the control of a kernel driver. Using this flag is
37 dangerous, it can seriously confuse the kernel driver in ques‐
38 tion. It can also cause i2ctransfer to silently write to the
39 wrong register. So use at your own risk and only if you know
40 what you're doing.
41
42 -y Disable interactive mode. By default, i2ctransfer will wait for
43 a confirmation from the user before messing with the I2C bus.
44 When this flag is used, it will perform the operation directly.
45 This is mainly meant to be used in scripts.
46
47 -v Enable verbose output. It will print infos about all messages
48 sent, i.e. not only for read messages but also for write mes‐
49 sages.
50
51 -V Display the version and exit.
52
53 -a Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not
54 recommended.
55
56
58 The first parameter i2cbus indicates the number or name of the I2C bus
59 to be used. This number should correspond to one of the busses listed
60 by i2cdetect -l.
61
62
63 The next parameter is one or multiple desc blocks. The number of
64 blocks is limited by the Linux Kernel and defined by
65 I2C_RDWR_IOCTL_MAX_MSGS (42 as of v4.10). desc blocks are composed
66 like this:
67
68 {r|w}<length_of_message>[@address]
69
70
71 {r|w} specifies if the message is read or write
72
73 <length_of_message>
74 specifies the number of bytes read or written in this message.
75 It is parsed as an unsigned 16 bit integer, but note that the
76 Linux Kernel applies an additional upper limit (8192 as of
77 v4.10). For read messages to targets which support SMBus Block
78 transactions, it can also be '?', then the target will determine
79 the length.
80
81 [@address]
82 specifies the 7-bit address of the chip to be accessed for this
83 message, and is an integer. If omitted, reuse the previous ad‐
84 dress. Normally, addresses outside the range of 0x08-0x77 and
85 addresses with a kernel driver attached to them will be blocked.
86 This can be overridden with -a (all) or -f (force). Be very
87 careful when using these! 10-bit addresses are currently not
88 supported at all.
89
90
91 If the I2C message is a write, then a data block with the data to be
92 written follows. It consists of <length_of_message> bytes which can be
93 marked with the usual prefixes for hexadecimal, octal, etc. To make it
94 easier to create larger data blocks easily, the data byte can have a
95 suffix.
96
97
98 = keep value constant until end of message (i.e. 0= means 0, 0, 0,
99 ...)
100
101 + increase value by 1 until end of message (i.e. 0+ means 0, 1, 2,
102 ...)
103
104 - decrease value by 1 until end of message (i.e. 0xff- means 0xff,
105 0xfe, 0xfd, ...)
106
107 p use value as seed for an 8 bit pseudo random sequence (i.e. 0p
108 means 0x00, 0x50, 0xb0, ...)
109
110
112 On bus 0, from an EEPROM at address 0x50, read 8 byte from offset 0x64
113 (first message writes one byte to set the memory pointer to 0x64, sec‐
114 ond message reads from the same chip):
115 # i2ctransfer 0 w1@0x50 0x64 r8
116
117 For the same EEPROM, at offset 0x42 write 0xff 0xfe ... 0xf0 (one write
118 message; first byte sets the memory pointer to 0x42, 0xff is the first
119 data byte, all following data bytes are decreased by one):
120 # i2ctransfer 0 w17@0x50 0x42 0xff-
121
122
124 i2ctransfer can be extremely dangerous if used improperly. It can con‐
125 fuse your I2C bus, cause data loss, or have more serious side effects.
126 Writing to a serial EEPROM on a memory DIMM (chip addresses between
127 0x50 and 0x57) may DESTROY your memory, leaving your system unbootable!
128 Be extremely careful using this program.
129
130
132 To report bugs or send fixes, please write to the Linux I2C mailing
133 list <linux-i2c@vger.kernel.org> with Cc to the current maintainer:
134 Jean Delvare <jdelvare@suse.de>.
135
136
138 Wolfram Sang, based on i2cget by Jean Delvare
139
140 This manual page was originally written by Wolfram Sang based on the
141 manual for i2cset by David Z Maze <dmaze@debian.org>.
142
143
145 i2cdetect(8),i2cdump(8),i2cget(8),i2cset(8)
146
147
148
149 February 2017 i2ctransfer(8)