9.2I2C-Tools的移植和使用

I2C-Tools 简介

I2C-Tools 是一套在应用层通过命令行访问 IIC 设备的命令集合,它基于 Linux 内核提供的 I2C-dev 驱动实现,源代码可在“https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/“下载

交叉编译 I2C-Tools

  1. 执行命令tar -vxf i2c-tools-4.3.tar.gz解压源代码
  2. 执行命令cd i2c-tools-4.3/进入源码目录
  3. 修改源码目录中的Makefile文件,修改后的Makefile如下所示,其中主要修改了编译工具,在 Makefile 第10行创建变量 ”CROSS_COMPILE = arm-none-linux-gnueabihf-“,将 “CC ?= gcc” 、 “AR ?= ar” 、 “STRIP ?= strip” 这3行修改为 “CC = $(CROSS_COMPILE)gcc” 、 “AR = $(CROSS_COMPILE)ar” 、 “STRIP = $(CROSS_COMPILE)strip”
    修改后的Makefile:
**# I2C tools for Linux
#
# Copyright (C) 2007-2012  Jean Delvare <jdelvare@suse.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#编译器前缀,根据实际所使用的编译器修改
# I2C tools for Linux
#
# Copyright (C) 2007-2012  Jean Delvare <jdelvare@suse.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.**

#编译器前缀,根据实际所使用的编译器修改
CROSS_COMPILE = arm-none-linux-gnueabihf-
DESTDIR	?=
PREFIX	?= /usr/local
bindir	= $(PREFIX)/bin
sbindir	= $(PREFIX)/sbin
mandir	= $(PREFIX)/share/man
man3dir	= $(mandir)/man3
man8dir	= $(mandir)/man8
incdir	= $(PREFIX)/include
libdir	= $(PREFIX)/lib

INSTALL		:= install
INSTALL_DATA	:= $(INSTALL) -m 644
INSTALL_DIR	:= $(INSTALL) -m 755 -d
INSTALL_PROGRAM	:= $(INSTALL) -m 755
LN		:= ln -sf
RM		:= rm -f

CC	= $(CROSS_COMPILE)gcc
AR	= $(CROSS_COMPILE)ar
STRIP	= $(CROSS_COMPILE)strip

CFLAGS		?= -O2
# When debugging, use the following instead
#CFLAGS		:= -O -g
CFLAGS		+= -Wall
SOCFLAGS	:= -fpic -D_REENTRANT $(CFLAGS)

BUILD_DYNAMIC_LIB ?= 1
BUILD_STATIC_LIB ?= 1
USE_STATIC_LIB ?= 0

ifeq ($(USE_STATIC_LIB),1)
BUILD_STATIC_LIB := 1
endif

ifeq ($(BUILD_DYNAMIC_LIB),0)
ifeq ($(BUILD_STATIC_LIB),0)
$(error BUILD_DYNAMIC_LIB and BUILD_STATIC_LIB cannot be disabled at the same time)
else
USE_STATIC_LIB := 1
endif
endif

KERNELVERSION	:= $(shell uname -r)

.PHONY: all strip clean install uninstall

all:

EXTRA	:=
#EXTRA	+= eeprog py-smbus
SRCDIRS	:= include lib eeprom stub tools $(EXTRA)
include $(SRCDIRS:%=%/Module.mk)
  1. 执行 make 命令进行编译,采用 make 编译的可执行程序在运行时会依赖编译生成的动态库,也可采用 make USE_STATIC_LIB=1 命令进行编译,采用 make USE_STATIC_LIB=1 编译的可执行程序在运行时不需要动态库。
  2. 编译完成后将生成的可执行文件拷贝到开发板根文件系统目标板的 /bin 目录中,动态库拷贝到开发板根文件系统目标板的 /lib目录中,如果采用的make USE_STATIC_LIB=1命令进行编译则不需要拷贝动态库到目标板(编译完成后可执行文件在tools目录,动态库在lib目录)。
    编译生成的可执行文件
    编译生成的动态库文件

使用I2C-Tools的命令

i2cdetect

i2cdetect可以用来扫描I2C总线上的设备,查看I2C适配器支持的功能,列出I2C适配器

  1. 扫描I2C总线上的设备
	#列出 I2C 适配器下的所有 I2C 设备
	# -y 忽略提示
	# -a 不忽略内核中有驱动的外设
	# -q|-r 通常忽略
	# I2CBUS I2C 总线,取值为 0 、 1 、 2 等整数
	# FIRST LAST 通常忽略
	i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
  1. 查看某个 I2C 适配器支持的功能
	#I2CBUS 为 0 、 1 、 2 等整数
	i2cdetect -F I2CBUS
  1. 列出当前的 I2C 适配器
	i2cdetect -l

i2cset

向 I2C 设备写入数据

	# -f 强制写入,默认情况下如果设备在内核有驱动则不支持应用层写入数据
	# -y 忽略提示
	# -m MASK 通常忽略
	# -r 通常忽略
	# -a 通常忽略
	# I2CBUS I2C 总线,取值为 0 、 1 、 2 等整数
	# CHIP-ADDRESS 设备地址
	# DATA-ADDRESS 寄存器地址
	# VALUE 写入的数据
	i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE]

i2cget

从 I2C 设备读取数据

	# -f 强制读取,默认情况下如果设备在内核有驱动则不支持应用层读取数据
	# -y 忽略提示
	# -a 通常忽略
	# I2CBUS I2C 总线,取值为 0 、 1 、 2 等整数
	# CHIP-ADDRESS 设备地址
	# DATA-ADDRESS 寄存器地址
	# MODE b 写入寄存器地址后直接重启总线切换为读模式读取数据,中间没有停止信号,c 相对与 b ,在产生重启信号
	#      前还产生了停止信号,然后在读数据, w 与 c 一样,只不过一次性读取 2Byte
	i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]

i2ctransfer

读写 I2C 设备

	# -f 强制读取,默认情况下如果设备在内核有驱动则不支持应用层读取数据
	# -y 忽略提示
	# -v 通常忽略
	# -V 通常忽略
	# -a 通常忽略
	# I2CBUS I2C 总线,取值为 0 、 1 、 2 等整数
	# DESC 描述设备消息,格式:r/w传输字节数@设备地址
	# DATA 欲写入的数据列表
	i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值