使用海思自带的i2c工具访问i2c设备
linux下开发i2c设备驱动,一般分为两个阶段,第一阶段是驱动实现,第二阶段是调试。驱动实现即是对i2c设备的正确访问,包括读、写、控制。而第二阶段,一般用于需要调整参数的i2c设备,如增益、亮度、灰度、补偿系数等;因为该类参数需与具体使用场合关联,需实时调整该类参数以满足最佳的状态何效果。对于这种场景,如果通过频繁修改驱动源码来调整参数,很显然不是理想的方式,工作繁琐且效率低下。
·
1 前言
linux下开发i2c设备驱动,一般分为两个阶段,第一阶段是驱动实现,第二阶段是调试。驱动实现即是对i2c设备的正确访问,包括读、写、控制。而第二阶段,一般用于需要调整参数的i2c设备,如增益、亮度、灰度、补偿系数等;因为该类参数需与具体使用场合关联,需实时调整该类参数以满足最佳的状态何效果。对于这种场景,如果通过频繁修改驱动源码来调整参数,很显然不是理想的方式,工作繁琐且效率低下。此时,一般借助第三方i2c工具,通过命令终端调整参数,直至确认一个合适的范围或数值后再修改驱动源码的参数。第三方i2c 工具常用的就是i2ctools,功能强大、移植方便、使用简易,关于i2ctools使用,参考该文章。
海思(Hisilicon)SDK提供了一个i2c的读写工具,可以方便地通过命令终端读写i2c设备寄存器。该i2c工具虽然功能上不及i2ctools,但对于实时访问i2c设备寄存器足以胜任了。
2 海思i2c工具使用
海思i2c 工具只提供两个命令,分别是读取数据i2c_read
和写数据i2c_write
。
2.1 i2c_read
命令格式:
i2c_read <i2c_num> <device_addr> <reg_addr> <end_reg_addr>
<reg_width> <data_width> <reg_step>
i2c_num
,i2c序号,只需填数字,如0、1、2device_addr
,设备地址red_addr
,待读设备起始寄存器地址end_reg_addr
,待读设备寄存器结束地址reg_width
,设备寄存器位宽,Byte(1)/Word(2)data_width
,设备数据位宽,Byte(1)/Word(2)reg_step
,连读标识,1表示连读,0表示非连读,默认为连读模式
2.1.1 实例
读单个寄存器
- i2c总线序号:i2c-0
- 设备地址:0x60
- 起始寄存器:0x0
- 结束寄存器:0x0
- 寄存器位宽:1Byte
- 数据位宽:1Byte
- 连读标识:非连读
# i2c_read 0 0x60 0x0 0x0 0x1 0x1 0x0
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x61; reg_addr:0x 0; reg_addr_end:0x 0; reg_width: 1; data_width: 1; reg_step:0x 1.
0x0 0xff
[END]
连读
- i2c总线序号:i2c-0
- 设备地址:0x60
- 起始寄存器:0x0
- 结束寄存器:0x5
- 寄存器位宽:1Byte
- 数据位宽:1Byte
- 连读标识:连读
# i2c_read 0 0x60 0x0 0x5 0x1 0x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x61; reg_addr:0x 0; reg_addr_end:0x 5; reg_width: 1; data_width: 1; reg_step:0x 1.
0x0 0xff
0x1 0x8
0x2 0x8
0x3 0x8
0x4 0x8
0x5 0x1f
[END]
传入错误设备地址
# i2c_read 0 0x10 0x0 0x0 0x1 0x1
*** Board tools : ver0.0.1_20121120 *** hi_i2c_wait_rxfifo_notempty->314:
[debug]: {source/utils/cmdshell.c:167}
cmdstr:i2c_read
i2c_num:0x0, dev_addr:0abort! int_raw_status: 0x750!
x10; reg_addr:0x 0; reg_addr_end:0x 0; r
eg_width: 1; data_width: 1; reg_step:0x hi_i2c_abortprocess->86: 1.
tx_abrt_src is 1.
CMD_I2C_READ error!
do errro
[END]
2.2 i2c_write
命令格式:
i2c_write <i2c_num> <device_addr> <reg_addr> <value>
<reg_width> <data_width>
i2c_num
,i2c序号,只需填数字,如0、1、2device_addr
,设备地址red_addr
,待写设备寄存器地址value
,待写数据值reg_width
,设备寄存器位宽,Byte(1)/Word(2)data_width
,设备数据位宽,Byte(1)/Word(2)
2.2.1 实例
- i2c总线序号:i2c-0
- 设备地址:0x60
- 待写寄存器:0x0
- 待写数据值:0x55
- 寄存器位宽:1Byte
- 数据位宽:1Byte
# i2c_write 0 0x61 0x0 0x55 0x1 x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_write
dev_addr:0x61; reg_addr:0x 0; reg_value:0x55; reg_width: 1; data_width: 1.
[END]
# i2c_read 0 0x60 0x0 0x0 0x1 0x1
*** Board tools : ver0.0.1_20121120 ***
[debug]: {source/utils/cmdshell.c:167}cmdstr:i2c_read
i2c_num:0x0, dev_addr:0x60; reg_addr:0x 0; reg_addr_end:0x 0; reg_width: 1; data_width: 1; reg_step:0x 1.
0x0 0x55
[END]
更多推荐
已为社区贡献2条内容
所有评论(0)