zoukankan      html  css  js  c++  java
  • 十四、访问外部I2C设备寄存器

    https://blog.csdn.net/Z_HUALIN/article/details/78084313

    https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/+/refs/tags/v3.1.2

    将编译得到i2cdetect i2cget i2cset i2cdump四个工具。

    1.我们现在要查看tas5729这个i2c外设,通过查询原理图,得知tas5729挂在在TWI1上;

    uranus-nansu:/ # i2cdetect -y -r 1

    i2cdetect -y -r 1

         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

    00:          -- -- -- -- -- -- -- -- -- -- -- -- --

    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    20: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --

    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    70: -- -- -- -- -- -- -- --

    得到设备的地址是:0x2B(0x20+0x0b),UU意味着这个设备被kernel driver占用,通常不能从user space探查;

    2.查看某个寄存器值(0x20);

    Usage: i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]

    I2CBUS is an integer or an I2C bus name

    ADDRESS is an integer (0x03 - 0x77)

    MODE is one of:

        b (byte, default)

        w (word)

        W (word on even register addresses)

        s (SMBus block)

        i (I2C block)

        c (consecutive byte)

        Append p for SMBus PEC

    i2cget -f -y 1 0x2b 0x20 w4

    3.将某个值写入某个寄存器:

    Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

    i2cset -f -y -r 1 0x2b 0x04 0x03

    4.dump部分寄存器值;

    Usage: i2cdump [-f] [-y] [-r first-last] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]

    i2cdump -f -y -r 0x00-0x25 1 0x2b w

    5.i2ctransfer。

    1).上述几个工具即使选择‘w’模式,每个寄存器返回的数值最大时16bit(2bytes),对于32bit生长更高位数寄存器读取不到所有bit数据;

    2).大多数设备在读取之前都需要对寄存器进行写访问。i2ctransfer提供了一种组合写入和读取过程的方法。它还可以在单​​个命令中处理带有附加后缀的多个字节写入/读取。

    a.要读取一组字节:i2ctransfer -f -y <i2cbus number> r<number of bytes>@<peripheral address>

    b.要写一组字节:i2ctransfer -f -y <i2cbus number> w<number of bytes>@<peripheral address> <byte value 1> <byte value 2> ... <byte value n>

    c.要写入一组字节,然后读取一组字节:i2ctransfer -f -y <i2cbus number> w<number of bytes to write>@<peripheral address> <byte value 1> <byte value 2> ... <byte value n> r<number of bytes to read>

    i2ctransfer -f -y 1 w1@0x2b 0x25 r4      #从I2S1总线上的0x2b外设,读取寄存器0x25中4字节数据;

    i2ctransfer -f -y 1 w5@0x2b 0x04 0x00 0x00 0x00 0x03

    i2ctransfer -f -y 1 w3@0x2b 0x07 0xc0 0x00

    i2ctransfer -f -y 1 w1@0x2b 0x4f r4

  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/fbli/p/13367094.html
Copyright © 2011-2022 走看看