https://i2c.wiki.kernel.org/index.php/I2C_Tools
I2C -tools包包含一组用于Linux的I2C工具:总线探测工具、芯片转储器、寄存器级SMBus访问助手、EEPROM解码脚本、EEPROM编程工具和用于SMBus访问的python模块。只要内核中包含I2C支持,就支持所有版本的Linux。
这些工具曾经是航天器传感器软件包的一部分,但后来被拆分为一个单独的软件包。
- 下载源码, 解压
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ - 修改Makefile的:
PREFIX为安装目录, ACRS 为交叉编译工具链, 理论上设定这两个值就可以了.
至于sysroot这些它能自己找.
DESTDIR ?=
PREFIX ?= $(PWD)/out
ACRS = $(PWD)/../../tools/toolchain/riscv-gnu-toolchain/bin/riscv64-unknown-linux-gnu-
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 = $(ACRS)gcc
AR = $(ACRS)ar
STRIP = $(ACRS)strip
使用简介
i2cdetect -l
检测并列出所有系统i2c总线
i2cdetect -y 0
检测并列出第0号总线上的所有设备
以下命令只支持8位寄存器地址
i2cdump -f -y 0 0x37 dump
0号bus上地址为0x20的所有寄存器值
i2cset -fy 0 0x37 0x12 0x04 b
向0号总线上的0x37的0x12地址写入0x04
i2cget -fy 0 0x37 0x12
读取0号总线上的0x37的0x12地址
以下命令支持16位寄存器地址
i2ctransfer -f -y 0 w3@0x37 0x50 0x81 0x01
向0号总线上的0x37的0x50地址写入3个字节, 0x50 0x81 0x01,
即, 向0号总线上的0x37的0x5081写入0x01i2ctransfer -f -y 1 w2@0x37 0x50 0x81 r1
向0号总线上的0x37的0x50地址写入2个字节, 0x50 0x81,然后读取1个字节
即, 读取0号总线上0x37设备0x5081的值.