• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

十四、访问外部I2C设备寄存器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap