Bootstrap

<Android开发> Android开发工具- 之-I2C TOOLS工具使用

<Android开发> Android开发工具- 之-I2C TOOLS工具使用

前言:在底层开发时,有时需要借助一些工具对驱动进行调试验证。这次讲解的使用的工具是I2C_TOOLS,该工具主要是用来调试验证I2C设备的。接下来看看如何使用吧。

1、获取I2C工具
下载地址:I2C_TOOLS
可以根据自己的需要下载相应的版本,作者为了在android编译,编写的android.mk文件能使用,选择了V3.1.1的,V4以上的Android.mk所有不同,作者还没有尝试更改过。所以选择的V3版本。有兴趣的读者可以尝试使用V4版本,并编写mk文件编译,分享分享…
下载得到的是一个源码包。

2、添加源码到android

将下载的压缩包解压到 android/external目录下得到文件夹i2c-tools-3.1.1,不同版本,文件夹名不同。

3、编写android编译文件-i2c-tools-3.1.1版本
1)在文件夹i2c-tools-3.1.1中创建文件 Android.mk。
2)Androidmk文件内容如下:

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)

4、编写android编译文件–i2c-tools-4.3版本
1)在文件夹i2c-tools-4.3中创建文件 Android.mk。
2)Androidmk文件内容如下:

LOCAL_PATH:= $(call my-dir)

################### i2c-tools #########################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := i2c-tools

LOCAL_SRC_FILES := \
	tools/i2cbusses.c \
	tools/util.c \
	lib/smbus.c

LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

#LOCAL_CFLAGS := -g -Wall -Werror -Wno-unused-parameter
include $(BUILD_STATIC_LIBRARY)

################### i2cdetect #########################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2cdetect

LOCAL_SRC_FILES:= \
	tools/i2cdetect.c
	
LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

LOCAL_SHARED_LIBRARIES:= \
	libc
LOCAL_STATIC_LIBRARIES := \
	i2c-tools
	
LOCAL_CPPFLAGS += -DANDROID

include $(BUILD_EXECUTABLE)

#################### i2cget ###########################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2cget

LOCAL_SRC_FILES:= \
	tools/i2cget.c
	
LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

LOCAL_SHARED_LIBRARIES:= \
	libc
LOCAL_STATIC_LIBRARIES := \
	i2c-tools
	
LOCAL_CPPFLAGS += -DANDROID

include $(BUILD_EXECUTABLE)

##################### i2cset ##########################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2cset

LOCAL_SRC_FILES:= \
	tools/i2cset.c
	
LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

LOCAL_SHARED_LIBRARIES:= \
	libc
LOCAL_STATIC_LIBRARIES := \
	i2c-tools

LOCAL_CPPFLAGS += -DANDROID

include $(BUILD_EXECUTABLE)

##################### i2cdump #########################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2cdump

LOCAL_SRC_FILES:= \
	tools/i2cdump.c
	
LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

LOCAL_SHARED_LIBRARIES:= \
	libc
LOCAL_STATIC_LIBRARIES := \
	i2c-tools

LOCAL_CPPFLAGS += -DANDROID

include $(BUILD_EXECUTABLE)

################### i2ctransfer #######################
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:=i2ctransfer

LOCAL_SRC_FILES:= \
	tools/i2ctransfer.c
	
LOCAL_C_INCLUDES += \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/include

LOCAL_SHARED_LIBRARIES:= \
	libc
LOCAL_STATIC_LIBRARIES := \
	i2c-tools

LOCAL_CPPFLAGS += -DANDROID

include $(BUILD_EXECUTABLE)

4、编译工具模块
1)首先确认整个android已经完整编译过了;
2)在android根目录执行环境变量配置命令,如下:
#: source build/envset.sh //配置环境变量
#: lunch //然后选择对应构建的目标
3)进入到android/external/i2c-tools-3.1.1目录下,执行“mm”,进行模块编译。
或者进入到android/external/i2c-tools-4.3目录下,执行“mm”,进行模块编译。
4)在路径“out/target/product/xxx/system/bin”目录下会生成4个执行文件,如下:
i2cdetect
i2cdump
i2cget
i2cset
i2ctransfer //此项只有4.x版本以上才有

5、将文件推送到android设备的system/bin目录下 或 重编整个系统,在整体下载镜像,这样设备就附带有这4个命令了。

6、工具使用

1)用i2cdetect检测有几组i2c总线在系统上
命令:./i2cdetect -l

2)用i2cdetect检测挂载在i2c总线上器件,
命令: ./i2cdetect-r -y 10
其中:
10:表示检测i2c-10上的挂载情况

3)用i2cdump查看器件所有寄存器的值,这个命令可以查看器件所有寄存器的值,在实际测试时很好用
命令:./i2cdump -f -y 10 0x42
其中 :
10: 表示I2C-10这个总线;
0x42:表示总线上 设备地址为0x42的这个设备;

4)用i2cset来设置单个寄存器值
命令:./i2cset -f -y 10 0x42 0xFC 0x3F
其中 :
10: 表示I2C-10这个总线;
0x42:表示总线上 设备地址为0x42的这个设备;
0xFC:操作的寄存器地址
0x3F:当前操作的寄存器到写入的值

4)用i2cget来获取单个寄存器值
命令:./i2cget -f -y 10 0x42 0xFC
其中 :
10: 表示I2C-10这个总线;
0x42:表示总线上 设备地址为0x42的这个设备;
0xFC:操作的寄存器地址

5)i2ctransfer 使用,i2ctransfer支持16位/32位寄存器的读写,i2cset和i2cget只能读取8位的寄存器。所以i2ctransfer可以替代i2cset和i2cget
(1) 往i2c-1上0x42器件 0x5081寄存器 写0x01
$i2ctransfer -f -y 1 w3@0x42 0x50 0x81 0x01

(2) 在i2c-1上0x42器件 0x300A寄存器 读取3个字节数据
$i2ctransfer -f -y 1 w2@0x42 0x30 0x0A r3

以上操作是在I2C设备调试过程使用的一些方法,希望对各位开发过程调试有所帮助。

;