linux交叉编译 i2c-tools

  • 1. 获取源码
  • 2. 解压源码
  • 3. 指定交叉编译器
  • 4. 编译
  • 5. 移植
  • 6 附录
  • 7 命令举例
    • 7.1 i2cdetect
    • 7.2 i2cdump
    • 7.3 i2cset 与 i2cget
    • 7.4 i2ctransfer
      • 7.4.1 读
      • 7.4.2 写

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

效果验证
linux交叉编译 i2c-tools_第1张图片
linux交叉编译 i2c-tools_第2张图片

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

linux交叉编译 i2c-tools_第3张图片
2) 检测挂载在i2c总线上器件

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

linux交叉编译 i2c-tools_第4张图片

7.2 i2cdump

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

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

linux交叉编译 i2c-tools_第5张图片

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为写入的值。

你可能感兴趣的:(Linux操作系统,linux,bash,arm开发)