mtk6765上i2c-tools的使用

1 下载i2c-tools
 从开源网站http://dl.lm-sensors.org/i2c-tools/releases/下载i2c-tools
 几个版本都可以用,可以选择下载i2c-tools-4.3

2 到官网下载交叉编译环境 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
http://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/

3 到i2c-tools-4.3下打开Makefile修改指定交叉编译环境路径
  COMPILE_PREFIX:= /code/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
  PREFIX  = system
  CC  := $(COMPILE_PREFIX)gcc
执行makefile生成i2cdetect等执行文件

4 对于基于平台mt6765的手机安卓系统,i2c-tools-4.3下添加Android.mk文件
参考https://www.cnblogs.com/lialong1st/p/11637011.html添加
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)


将i2c-tools-4.3拷贝至工程system/core下面

执行mmm system/core/i2c-tools-4.3
就会在system/bin下生成i2cdetect,i2cget,i2cset,i2cdump,i2ctransfer等文件

此时将这些执行文件加载进系统,可能会提示错误,如执行i2cdetect -y 1
Could not open file `/dev/i2c-1' or `/dev/i2c/1'

需要在kernel-4.9/arch/arm64/configs将对应的xxx_64_bsp_defconfig将如下编译开关打开,重新编译系统
CONFIG_I2C_CHARDEV=y

5 工具使用
(1)执行i2cdetect 1,扫描/dev/i2c-1后面的设备
k62v1_64_bsp:/ # i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x08-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- UU -- -- -- -- -- 
70: -- -- -- -- -- -- -- --               

可以看到,i2c-1,后面挂的设备有
5B,6A

(2)用i2cdump查看器件所有寄存器的值,如:查看0x5B设备上的所有寄存器的值,i2cdump -f -y 1 0x5B 
k62v1_64_bsp:/ # i2cdump -f -y 1 0x5B                                      
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: 00 00 ff ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
10: 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    #...............
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 ff ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 23 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: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 00 00 ff ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    #...............
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
c0: 00 00 ff ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 23 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: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

通过i2cset设置单个寄存器值,用i2cget读取单个寄存器值,在调试阶段不断更新效果,带确定最终效果后,通过上面指令把寄存器值都读出来,写到驱动的初始化代码中去.
简单操作下如:
k62v1_64_bsp:/ # i2cget -f -y 1 0x5b 0xd0   
0x23
读出0x5B设备的0xd0寄存器值为0x23

k62v1_64_bsp:/ # i2cset -f -y 1 0x5b 0xd0 0x24 
设置0x5B设备的0xd0寄存器值为0x24

在调试的过程中,还可以接示波器通过发送读写指令抓取i2c波形.


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosir_zhong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值