i2c-tools介紹
在嵌入式linux開發(fā)中,有時候需要確認(rèn)i2c硬件是否正常連接,設(shè)備是否正常工作,設(shè)備的地址是多少等等,這里我們就需要使用一個用于測試I2C總線的工具——i2c-tools。
i2c-tools是一個專門調(diào)試i2c的開源工具,可獲取掛載的設(shè)備及設(shè)備地址,還可以讀寫I2C設(shè)備寄存器。調(diào)試新的設(shè)備驅(qū)動時,難免要反復(fù)修改寄存器,然后看結(jié)果現(xiàn)象。傳統(tǒng)的做法是修改驅(qū)動代碼寄存器值->編譯->下載->運行->看結(jié)果。這一過程比較費時間,而每次需要改的可能只是 1 個 bit,這種情況下 i2c-tools 簡直就是神器。
下面我們就對這個工具的安裝和使用做個簡單介紹。
i2c-tools 官方說明:
https://i2c.wiki.kernel.org/index.php/I2C_Tools
工具源碼下載地址:
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
i2c-tools工具包括:
i2cdetect:用于掃描 i2c 總線上的設(shè)備,并顯示地址。
i2cset:設(shè)置i2c設(shè)備某個寄存器的值。
i2cget:讀取i2c設(shè)備某個寄存器的值。
i2cdump:讀取某個i2c設(shè)備所有寄存器的值。
i2ctransfer:一次性讀寫多個字節(jié)。
工具命令介紹:
i2cdetect:檢測i2c芯片
i2cdump:查看寄存器值
i2cget:獲取單個寄存器值(8位寄存器)
i2cset:設(shè)置單個寄存器值(8位寄存器)
i2ctransfer:一次傳輸多字節(jié)數(shù)據(jù)(16位寄存器)
參數(shù)介紹:
-y:禁用交互模式。
-f:強制訪問設(shè)備。
-r:寫入后立即讀回該值。
注:i2c-tools 原理是通過操作 /dev 路徑 i2c-× 設(shè)備文件完成,因此你的 kernel 必須開啟了 CONFIG_I2C_CHARDEV 配置,否者會報找不到節(jié)點。
在設(shè)備上也可以通過目標(biāo)板終端輸入:ls /sys/bus/i2c/devices查看i2c設(shè)備節(jié)點信息。看到的i2c-0,i2c-1,指的是i2c總線節(jié)點,i2c從設(shè)備都是掛載在總線節(jié)點下的。
工具編譯
工具源碼,使用以下命令進行編譯
make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1
USE_STATIC_LIB 的意思是使用靜態(tài)編譯。編譯完成后,會在tools目錄下產(chǎn)生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五個產(chǎn)物。將這些可執(zhí)行文件拷貝到設(shè)備上。
不加 USE_STATIC_LIB 編譯選項,會使用動態(tài)鏈接的方式編譯。編譯完成后需要拷貝i2c-tools-4.3/lib 目錄下的libi2c.so.0動態(tài)庫到設(shè)備上的/usr/bin 目錄下。編譯會生成五個工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷貝到開發(fā)板中就可以使用。
i2c-tools使用方法
i2cdetect:查詢開發(fā)板包含的i2c總線和外設(shè),看以下命令:
探測開發(fā)板包含的i2c總線。
i2cdetect -y -r 0
探測i2c-0總線上掛載的外設(shè),參數(shù)-y表示取消交互模式,直接執(zhí)行命令。
i2cdetect -y -r 1
探測i2c-1總線上掛載的外設(shè),UU表示該設(shè)備已經(jīng)被Linux內(nèi)核驅(qū)動占用,探測程序會略過該設(shè)備。下圖所示,從設(shè)備地址分別是0x0c和0x1a。 UU表示設(shè)備地址的從設(shè)備被驅(qū)動占用,卸載對應(yīng)的驅(qū)動后,UU就會變成數(shù)據(jù)。-- 表示該地址被檢測,但是沒有應(yīng)答。
i2cset:設(shè)置i2c設(shè)備單個寄存器的值,看幾個命令:
i2cset -y -f 0 0x57 0x00 0x10i2cset -y -f 0 0x57 0x01 0x11i2cset -y -f 0 0x57 0x02 0x12i2cset -y -f 0 0x57 0x03 0x13
下面以i2cset -y -f 0 0x57 0x00 0x10為例進行分析
參數(shù)含義:
-y 取消交互模式,直接執(zhí)行命令
-f 強制訪問該設(shè)備
0 表示i2c總線編號
0x57 表示i2c設(shè)備地址
0x00 表示寄存器地址
0x10 表示待寫入的值
i2cget:查看i2c設(shè)備單個寄存器的值,看幾個命令:
i2cget -y -f 0 0x57 0x00
以 i2cget -y -f 0 0x57 0x00為例進行分析,參數(shù)含義:
-y 取消交互模式,直接執(zhí)行命令
-f 強制訪問該設(shè)備
0 表示i2c總線編號
0x57 表示i2c設(shè)備地址
0x00 表示寄存器地址
i2cdump:查看i2c設(shè)備所有寄存器的值,看以下命令:
i2cdump -y -f 1 0x32
參數(shù)含義:
-y 取消交互過程,直接執(zhí)行命令
-f 強制訪問該設(shè)備
1 表示i2c總線編號
0x32 表示i2c設(shè)備地址
其他資源
Linux內(nèi)核i2c-tools命令
i2c-tools工具的安裝和使用簡單介紹-電子發(fā)燒友網(wǎng)
https://www.cnblogs.com/liuwanpeng/p/7346558.html
Linux下I2C-tools工具使用_i2cdetect_深海帶鯉魚的博客-CSDN博客
嵌入式Linux驅(qū)動開發(fā)(I2C專題)(四)_嵌入式學(xué)習(xí)者。的博客-CSDN博客
摘自:https://blog.csdn.net/yyz_1987/article/details/131953108