Android 平台上 使用 i2c-tools调试i2c

使用前提:

使用i2c-tools,的命令i2cdetect , i2cdump. i2cget. i2cset,本质上是在userspace操作i2c,这就需要内核的支持,即在/dev下有i2c-x 的字符设备节点存在。

编译内核的时候需要打开CONFIG_I2C_CHARDEV,

或者make menuconfig    device drivers---> I2C support ---> I2C device interface

编译kernel/i2c/i2c-dev.c

内核文档:Documentation/i2c/dev-interface

参考链接:https://blog.csdn.net/AS520213211314/article/details/73105365

下载源码

在 https://launchpad.net/ubuntu/+source/i2c-tools 下载源码,我这里下载的是i2c-tools_3.1.1.orig.tar.bz2

将压缩包解压得到 i2c-tools-3.1.1,复制源码到 external 下 

编译

在i2c-tools-3.1.1下新建Android.mk文件,内容如下

LOCAL_PATH:= $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
LOCAL_SRC_FILES := tools/i2cbusses.c tools/util.c
LOCAL_MODULE := i2c-tools
include $(BUILD_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:=tools/i2cdetect.c
LOCAL_MODULE:=i2cdetect
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:=tools/i2cget.c
LOCAL_MODULE:=i2cget
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:=tools/i2cset.c
LOCAL_MODULE:=i2cset
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:=tools/i2cdump.c
LOCAL_MODULE:=i2cdump
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_STATIC_LIBRARIES := i2c-tools
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)

执行 mmm  external/i2c-tools-3.1.1/

会生成4个可执行文件 i2cdetect  i2cdump    i2cget     i2cset

       adb remount

       adb sync

       adb reboot

 

用法

i2cdetect

 # i2cdetect -l
i2c-1    i2c           21a4000.i2c                         I2C adapter
i2c-2    i2c           21a8000.i2c                         I2C adapter
i2c-0    i2c           21a0000.i2c                         I2C adapter

列举i2c-2上的所有i2c设备

 # i2cdetect -y 2                                                                                                                                                          
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- 19 -- UU -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

发现I2C设备的位置显示为UU表示该设备的地址,UU表示该设备在driver中被使用

i2cdump

# i2cdump -y -f 2 0x1b w                                                                                                                                                  
     0,8  1,9  2,a  3,b  4,c  5,d  6,e  7,f
00: 2100 0000 8888 0606 0000 0000 0000 0000
08: 0000 0000 0000 0000 0000 0083 0000 0606
10: 0808 0000 0000 0000 0000 0000 0000 0000
18: 0000 afaf afaf 000c afaf 2f2f 0000 0000
20: 0000 0000 0000 0000 0000 0000 0000 6078
  ......................................

需要注意的是高低位转换 如上所示0x27读到的为0x7860

i2cset

# i2cset
Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x03 - 0x77)
  MODE is one of:
    c (byte, no value)
    b (byte data, default)
    w (word data)
    i (I2C block data)
    s (SMBus block data)
    Append p for SMBus PEC

 

i2cget

# i2cget                                                                                                                                                                
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 (read byte data, default)
    w (read word data)
    c (write byte/read byte)
    Append p for SMBus PEC

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值