1. 程式人生 > >Android 平臺上 使用 i2c-tools除錯i2c

Android 平臺上 使用 i2c-tools除錯i2c

下載原始碼

編譯

在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