linux交叉编译 i2c-tools
1. 获取源码2. 解压源码3. 指定交叉编译器4. 编译5. 移植6 附录1. 获取源码I2C tool 是一个开源工具,需自行下载进行交叉编译,代码下载地址:https://www.kernel.org/pub/software/utils/i2c-tools/或者wget https://mirrors.edge.kernel.org/pub/software/utils/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目录下的i2cdetect
、i2cdump
等生成的工具拷贝到开发板文件系统/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为写入的值。
更多推荐
所有评论(0)