• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-i2c-tools工具使用

5小时前
110
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

介绍

i2c-tools是一个专门调试i2c接口的开源工具,可以获取挂载的设备及设备地址,具有在对应的设备上读取和设置寄存器值等功能,在elf2上,默认已经配置了此工具。

i2c-tools用法

1.首先检测系统上有几组i2c总线

root@elf2-buildroot:~# i2cdetect -l

i2c-0   i2c             rk3x-i2c                                I2C adapter

i2c-1   i2c             rk3x-i2c                                I2C adapter

i2c-2   i2c             rk3x-i2c                                I2C adapter

i2c-3   i2c             rk3x-i2c                                I2C adapter

i2c-4   i2c             rk3x-i2c                                I2C adapter

i2c-5   i2c             rk3x-i2c                                I2C adapter

i2c-7   i2c             rk3x-i2c                                I2C adapter

i2c-9   i2c             fde50000.dp                             I2C adapter

i2c-10  i2c             ddc                                     I2C adapter

可以看到,系统中存在九组i2c总线:i2c-0、i2c-1、i2c-2、i2c-3、i2c-4、i2c-5、i2c-7、i2c-9、i2c-10

2.用i2cdectect检测挂载在i2c总线上的器件

root@elf2-buildroot:~# i2cdetect -y 1

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

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

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

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

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

40: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- --

50: -- 51 -- -- -- -- -- -- -- 59 -- -- -- -- -- --

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

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

在i2c-1总线上挂载了一个设备,设备地址为0x42、0x51、0x59。其中0x40的位置为UU,表示既有设备也有驱动;0x51和0x59的位置只显示数字,表示检测到了设备但是没有对应驱动;

3.用i2cdump查看器件所有寄存器的值

root@elf2-buildroot:~# i2cdump -f -y 5 0x32

No size specified (using byte-data access)

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

00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX

10: 58 57 01 02 21 10 24 d8 00 00 11 10 00 04 20 00    XW??!?$?..??.? .

20: 00 00 00 00 00 00 00 40 00 02 88 05 00 00 00 00    .......@.???....

30: 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00    .?..............

40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

70: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX

80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX

90: 58 57 01 02 21 10 24 d8 00 00 11 10 00 04 20 00    XW??!?$?..??.? .

a0: 00 00 00 00 00 00 00 40 00 02 88 05 00 00 00 00    .......@.???....

b0: 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00    .?..............

c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX

注意i2cdump是读取设备的所有寄存器,如何读单个寄存器的值呢,我们可以使用i2cget。但是如何确定要读的单个寄存器的地址呢?下面我们看一下芯片手册。

由上图可知,要读取寄存器,直接使用寄存器对应的地址即可,如读取年份,就直接输入寄存器地址为0x16。其他的需要加偏移地址的,需要在芯片手册中查找介绍。

4.i2cget读单个寄存器值

在驱动中已经对寄存器进行了设置,所以在读取RTC芯片rx8010寄存器之前,date命令输入当前时间,因为底板中并没有设计纽扣电池,所以没有办法保存时间。设置完成之再进行寄存器的读取。

root@elf2-buildroot:~# date -s "20061021 11:22"

Sat Oct 21 11:22:00 CST 2006

root@elf2-buildroot:~# hwclock -w

root@elf2-buildroot:~# i2cget -f -y 5 0x32 0x16

0x06

用i2cget读到i2c-5总线上0x32设备的0x16寄存器值为0x06。

5.i2cset设置单个寄存器值

root@elf2-buildroot:~# i2cset -f -y 5 0x32 0x16 0x22

root@elf2-buildroot:~# i2cget -f -y 5 0x32 0x16

0x22

用i2cset设置i2c-5上0x32设备的0x16寄存器值为0x22;

用i2cget读i2c-5上0x32设备的0x16寄存器值为0x22。

6.用i2ctransfer写/读寄存器

root@elf2-buildroot:~# i2ctransfer -f -y 5 w1@0x32 0x16  r1

0x22

root@elf2-buildroot:~# i2ctransfer -f -y 5 w2@0x32 0x16  0x66

root@elf2-buildroot:~# i2ctransfer -f -y 5 w1@0x32 0x16  r1

0x66

格式:

5:代表i2c总线号i2c-5;

w1:代表写;

w2:代表写2Byte;

0x32:代表设备地址为0x32;

0x16:代表偏移0x16;

0x66:代表要写入的数据;

i2ctransfer是严格按照i2c协议读写时序操作的,我们想读取0x32的0x16的寄存器值,需要先把0x16发送给从设备,所以用到了w1写1个字节,之后才是r1读1字节数据。

相关推荐