I2C-Tools 简介
I2C-Tools 是一套在应用层通过命令行访问 IIC 设备的命令集合,它基于 Linux 内核提供的 I2C-dev 驱动实现,源代码可在“https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/“下载
交叉编译 I2C-Tools
- 执行命令tar -vxf i2c-tools-4.3.tar.gz解压源代码
- 执行命令cd i2c-tools-4.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)
- 执行 make 命令进行编译,采用 make 编译的可执行程序在运行时会依赖编译生成的动态库,也可采用 make USE_STATIC_LIB=1 命令进行编译,采用 make USE_STATIC_LIB=1 编译的可执行程序在运行时不需要动态库。
- 编译完成后将生成的可执行文件拷贝到开发板根文件系统目标板的 /bin 目录中,动态库拷贝到开发板根文件系统目标板的 /lib目录中,如果采用的make USE_STATIC_LIB=1命令进行编译则不需要拷贝动态库到目标板(编译完成后可执行文件在tools目录,动态库在lib目录)。
使用I2C-Tools的命令
i2cdetect
i2cdetect可以用来扫描I2C总线上的设备,查看I2C适配器支持的功能,列出I2C适配器
- 扫描I2C总线上的设备
#列出 I2C 适配器下的所有 I2C 设备
# -y 忽略提示
# -a 不忽略内核中有驱动的外设
# -q|-r 通常忽略
# I2CBUS I2C 总线,取值为 0 、 1 、 2 等整数
# FIRST LAST 通常忽略
i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
- 查看某个 I2C 适配器支持的功能
#I2CBUS 为 0 、 1 、 2 等整数
i2cdetect -F I2CBUS
- 列出当前的 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]]...