All Boards I2C-tools

Document created by jesseg Employee on Aug 15, 2012Last modified by grantw on Mar 8, 2013
Version 4Show Document
  • View in full screen mode

I²C is a communication protocol used to exchange information between cores. To see more about I²C, please follow this link Wikipedia:I²C.

Enable I2C-tools in LTIB into Package List:

I2c-tools.jpg

Reboot your file system, there are three new I²C commands: i2cdetect, i2cdump and i2cset.

All examples below were tested in a iMX27ADS, but this programs seems to have the same behavior to all platforms.


Detecting busses

 

This command lists all installed bus.

mx27# i2cdetect -l 
i2c-0   unknown         MXC I2C Adapter                         Algorithm unavailable 

There is one installed bus with address 0.


 

Installed Chips

 

I2cdetect shows the installed chips too.

mx27# i2cdetect 0 
    WARNING! This program can confuse your I2C bus, cause data loss and worse! 
    I will probe file /dev/i2c/0. 
    I will probe address range 0x03-0x77. 
        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 
00:          XX XX XX XX XX XX XX XX XX XX XX XX XX 
10: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 
20: XX XX XX XX XX XX XX XX XX XX XX XX XX 2d XX XX 
30: UU XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 
40: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 
50: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 
60: XX XX XX XX XX XX XX XX XX XX UU XX XX XX XX XX 
70: XX XX XX XX XX XX XX XX 

There are several cores installed into bus i2c-0.

If you received an error message like this:

# i2cdetect 0 
Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory 

You will need to create the special file /dev/i2c-0 :

# mknod /dev/i2c-0 c 89 0 


Chip Registers

 

i2cdump shows a list of all registers for a core. For example, the command above shows registers for core with address 0x6a:

mx27# i2cdump 0 0x6a 
No size specified (using byte-data access) 
    WARNING! This program can confuse your I2C bus, cause data loss and worse! 
    I will probe file /dev/i2c/0, address 0x6a, mode byte 
        0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef 
00: 00 00 28 00 00 03 15 03 00 00 00 00 00 00 03 01    ..(..???......?? 
10: 04 01 00 00 04 01 00 00 17 41 1d 00 09 09 1f 03    ??..??..?A?.???? 
20: 00 00 40 00 08 00 0c 00 0f 01 00 00 00 00 08 11    ..@.?.?.??....?? 
30: 00 0f 05 fe 0b 00 00 00 82 00 0c 02 00 00 01 00    .????...?.??..?. 
40: 21 f0 7c 1f 00 00 01 00 7a 40 80 38 00 01 47 00    !?|?..?.z@?8.?G. 
50: 3c 00 17 21 1b 1b 24 9f 00 3e 0f 0f 60 05 cd 03    <.?!??$?.>??`??? 
60: 89 04 89 01 02 00 0a 05 00 19 ff 03 24 0f 78 00    ?????.??.?.?$?x. 
70: 00 b2 06 14 04 08 00 a3 c8 15 05 15 3c 00 00 20    .?????.?????<.. 
80: 07 2f 07 00 00 00 00 00 00 00 00 ff 03 1a 1a 1a    ?/?.........???? 
90: 1a 1a 40 03 00 00 00 00 00 00 00 00 00 00 e4 00    ??@?..........?. 
a0: 00 02 4d 00 96 00 1d 00 a0 00 db 00 7e 00 00 00    .?M.?.?.?.?.~... 
b0: 00 00 00 00 00 00 f0 00 00 00 00 00 00 00 00 00    ......?......... 
c0: 00 00 00 00 48 9c 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a    ....H??????????? 
d0: 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a    ???????????????? 
e0: 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a    ???????????????? 
f0: 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a    ????????????????


Setting a register

 

To change some register value, use i2cset like in example below:

mx27# i2cset 0 0x6a 01 0x0008 w 
    WARNING! This program can confuse your I2C bus, cause data loss and worse! 
    I will write to device file /dev/i2c/0, chip address 0x6a, data address 
    0x00, data 0x08, mode word. 
Value 0x8 written, readback matched

Where:

  • 0 is the bus address
  • 0x6a is the slave address
  • 01 is the register address
  • 0x0008 is the new value for register
  • w is the word mode for the setting



Attachments

    Outcomes