arm linux 移植 i2c-tools 與 簡單使用


介紹

i2c-tool是一個專門調試i2c的開源工具。可獲取掛載的設備及設備地址,還可以在對應的設備指定寄存器設置值或者獲取值等功能,對於驅動以及應用開發者比較友好。

i2c-tool:v3.0.3

移植

#
#    Copyright By Schips, All Rights Reserved
#    https://gitee.com/schips/
#
#    File Name:  make.sh
#    Created  :  2020-10-17 09:38:39
#
#
#!/bin/sh

BASE=`pwd`
OUTPUT_PATH=${BASE}/install/

## 填寫你的工具鏈名稱
BUILD_HOST=arm-linux
## 必要時,填寫你的工具鏈的所在路徑
BUILD_HOST_PATH=/opt/gcc-arm-linux-gnueabi/bin

export PATH=${PATH}:${BUILD_HOST_PATH}

require () {
    if [ -z "$1" ];then
        return
    fi
    command -v $1 >/dev/null 2>&1 || { echo >&2 "Aborted : Require \"$1\" but not found."; exit 1;   }
    echo "Using: $1"
}

make_dirs() {
    cd ${BASE}
    mkdir  compressed  install  source -p
}

tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1
    fi

    echo "[OK] Downloaded [${filename}] "
}

download_package () {
    cd ${BASE}/compressed
    #下載包
    tget https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-3.0.3.tar.xz
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C  ../source
    done
    rm -rf /tmp/list.txt
}

make_taget () {
    cd ${BASE}/source/*
    mkdir -p ${OUTPUT_PATH}/i2c-tools_arm
    CC=${BUILD_HOST}-gcc LD=${BUILD_HOST}-ld make
    make install prefix=${OUTPUT_PATH}/i2c-tools_arm
}

require ${BUILD_HOST}-gcc

make_dirs
tar_package
make_taget
exit $?

拷貝install/i2c-tools_arm/sbin中的文件即可運行。

i2c_tools/sbin# ls
i2c-stub-from-dump  i2cdetect           i2cdump             i2cget              i2cse

使用

為了避免混淆,假定拷貝好的i2c-tools已經配進PATH變量中。

-y ------- 取消用戶交互,直接執行
-f ------- 強制執行

列舉總線數目

# i2cdetect -l

i2c-1	i2c       	Cadence I2C at e0005000         	I2C adapter
i2c-0	i2c       	Cadence I2C at e0004000         	I2C adapter

查詢i2c總線上設備及設備的地址

i2cdetect -y 0 # 例如總線 0

Error: Can't use SMBus Quick Write command on this bus

因為配置的問題,所以失敗了。這里引用別人的結果:

i2cdetect -r -y 4                           
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

可看出,在i2c 總線4上有1個設備地址為0x40

讀取i2c上的設備寄存器

i2cdump命令可以列出整個設備的內容。

如果無法讀取,則顯示XX

i2cdump -f  -y 1 0x68 
# 1 代表 i2c-1 總線
# 0x68 代表 設備地址
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 28 52 23 02 02 01 00 b3 40 20 71 04 96 28 48 03    (R#???.?@ q??(H?
10: 80 00 42 c8 05 02 40 30 20 00 20 08 00 55 44 22    ?.B???@0 . ?.UD"
20: 49 a9 24 28 48 10 44 20 21 f1 2d a2 04 00 43 8c    I?$(H?D !?-??.C?
30: 50 24 00 24 20 2c 14 20 01 a0 01 89 02 00 21 88    P$.$ ,? ?????.!?
40: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
50: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
60: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
70: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX

i2cget可以讀取一個值

i2cget -f -y 1 0x68  0x3f
# 0x3f 由 0x30 上的 f 得到,對應上面dump結果的 最后一個有效值。
88

i2cget -f -y 1 0x68  0
# 同理,得到上面的第一個有效值 28
28

寫入值到i2c上的設備寄存器

i2cset -y -f 0 0x50 0x00 0x11
# 0:i2c-0
# 0x50 : 設備地址
# 0x00 :寄存器偏移
# 0x11 :寫入值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM