linux交叉编译 i2c-tools

1. 获取源码

I2C tool 是一个开源工具,需自行下载进行交叉编译,代码下载地址:
https://www.kernel.org/pub/software/utils/i2c-tools/
或者

wget https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.1.tar.xz

2. 解压源码

tar xvf i2c-tools-4.1.tar.gz

cd i2c-tools-4.1

3. 指定交叉编译器

export CC=aarch64-linux-gnu-gcc

export STRIP=aarch64-linux-gnu-strip

export AR=aarch64-linux-gnu-ar

4. 编译

make

5. 移植

1)将tools目录下的i2cdetecti2cdump等生成的工具拷贝到开发板文件系统/usr/sbin路径下,然后在路径下执行

sudo chmod 755 i2cdetect

2)将lib目录下的libi2c.so.0.1.1拷贝到开发板文件系统/usr/lib路径下,然后在路径下执行

sudo ln -s libi2c.so.0.1.1 libi2c.so.0
sudo ln -s libi2c.so.0 libi2c.so

效果验证
在这里插入图片描述
在这里插入图片描述

6 附录

自动编译脚本build-i2ctools.sh,直接放到 i2c-tools-4.1

#!/bin/bash

GCC_DIR=<自定义的路径>/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu

export CC=$GCC_DIR-gcc
export STRIP=$GCC_DIR-strip
export AR=$GCC_DIR-ar

make

7 命令举例

7.1 i2cdetect

1) 检测系统上有几组i2c总线

sudo i2cdetect -l

在这里插入图片描述
2) 检测挂载在i2c总线上器件

sudo i2cdetect -r -y 1    #(检测i2c-1上的挂载情况)

在这里插入图片描述

7.2 i2cdump

i2cdump查看器件所有寄存器的值,这个很有用,输入

 sudo i2cdump -f -y 2 0x1C #(查看alc5640寄存器值)

在这里插入图片描述

7.3 i2cset 与 i2cget

i2cset 设置单个寄存器值,用i2cget读取单个寄存器值,可以在初期调试时发挥很大作用,一旦有预期的现象出现,就可以用i2cdump读出整个寄存器的值,然后固化到代码中。

sudo i2cget -f -y 2 0x1c 0x04     #(读取i2c-2上0x1c器件的0x77寄存器值)

sudo i2cset -f -y 2 0x1c 0x04 0xc8 #(设置i2c-2上0x1c器件的0x77寄存器值为0x3f) 

7.4 i2ctransfer

i2ctransfer支持16位/32位寄存器的读写,i2cset和i2cget只能读取8位的寄存器。所以i2ctransfer可以替代i2cset和i2cget。

7.4.1 读

sudo i2ctransfer -f -y <i2cno> w<num>@<i2caddr> <data0> <data1> <datan> <rnum>

在这里插入图片描述

0x1C为I2C设备的地址, 0x0002为要读的寄存器地址, r2为连续读2Byte, 0xc8 0xc8 为读到的寄存器的值。

注意:
由于系统字节序存储方式分为大端小端,所以在使用i2ctransfer读多字节I2C设备寄存器地址值时,注意寄存器地址顺序。

7.4.2 写

sudo i2ctransfer -f -y <i2cno> w<num>@<i2caddr> <data0> <data1> <data2>

在这里插入图片描述

0x1C为I2C设备的地址, 0x0002为要写的寄存器地址, 0x48为写入的值。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值