RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

i2c-tools工具的安裝和使用簡單介紹

FPGA之家 ? 來源:嵌入式與Linux那些事 ? 作者:仲一 ? 2022-11-17 09:52 ? 次閱讀

i2c-tools簡介

嵌入式開發(fā)仲,有時候需要確認硬件是否正常連接,設備是否正常工作,設備的地址是多少等等,這里我們就需要使用一個用于測試I2C總線的工具——i2c-tools。

i2c-tools工具是一個專門調試i2c的,開源,可獲取掛載的設備及設備地址,還可以讀寫I2C設備寄存器

下面我們就對這個工具的安裝和使用做個簡單介紹。

i2c-tools安裝

解壓

下載完成后,放到linux環(huán)境下解壓。

tar-zxvfi2c-tools-4.3.tar.gz
cdi2c-tools-4.3

編譯

使用以下命令進行編譯

makeCC=arm-linux-gnueabihf-gccUSE_STATIC_LIB=1

USE_STATIC_LIB 的意思是使用靜態(tài)編譯。編譯完成后,會在tools目錄下產(chǎn)生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五個產(chǎn)物。將這些可執(zhí)行文件拷貝到設備上。

不加 USE_STATIC_LIB 編譯選項,會使用動態(tài)鏈接的方式編譯。編譯完成后需要拷貝i2c-tools-4.3/lib 目錄下的libi2c.so.0動態(tài)庫到設備上的/usr/bin 目錄下。

i2c-tools使用方法

i2cdetect

i2cdetect用來列舉I2C bus和上面所有的設備,可接受的參數(shù)

Usage:i2cdetect[-y][-a][-q|-r]I2CBUS[FIRSTLAST]
i2cdetect-FI2CBUS
i2cdetect-l
I2CBUSisanintegeroranI2Cbusname
Ifprovided,FIRSTandLASTlimittheprobingrange.

-V:輸出當前版本號

debian@npi:/mnt/mnt$./i2cdetect-V
i2cdetectversion4.3

-l:輸出所有 i2c 總線,如下總線編號有twi1和twi2,或者1和2

debian@npi:/mnt/mnt$./i2cdetect-l
i2c-0unknown21a0000.i2cN/A
i2c-1unknown21a4000.i2cN/A
debian@npi:/mnt/mnt$ls-l/dev/i2c-*
crw-------1rootroot89,0Mar1909:42/dev/i2c-0
crw-------1rootroot89,1Mar1909:42/dev/i2c-1

I2CBUS:i2c總線編號-F:此 i2c 支持的功能

root@npi:/mnt/mnt#./i2cdetect-F1
Functionalitiesimplementedby/dev/i2c-1:
I2Cyes
SMBusQuickCommandyes
SMBusSendByteyes
SMBusReceiveByteyes
SMBusWriteByteyes
SMBusReadByteyes
SMBusWriteWordyes
SMBusReadWordyes
SMBusProcessCallyes
SMBusBlockWriteyes
SMBusBlockReadyes
SMBusBlockProcessCallno
SMBusPECyes
I2CBlockWriteyes
I2CBlockReadyes
root@npi:/mnt/mnt#

-y:指令執(zhí)行自動yes,否則會提示確認執(zhí)行Continue? [Y/n] Y,不加參數(shù)y會有很多執(zhí)行提示,可以幫助判斷

-a:輸出總線上所有地址(00-7f),沒有 -a,只顯示 08-77,UU 表示該設備在驅動中已使用。

如下0x1a,0x39的地址正在被使用。

root@npi:/mnt/mnt#./i2cdetect-a1
WARNING!ThisprogramcanconfuseyourI2Cbus,causedatalossandworse!
Iwillprobefile/dev/i2c-1.
Iwillprobeaddressrange0x00-0x7f.
Continue?[Y/n]y
0123456789abcdef
00:00------------------------------
10:--------------------UU----------
20:--------------------------------
30:------------------UU------------
40:--------------------------------
50:--------------------------------
60:60------------------------------
70:--------------------------------
root@npi:/mnt/mnt#./i2cdetect-y-a1
0123456789abcdef
00:00------------------------------
10:--------------------UU----------
20:--------------------------------
30:------------------UU------------
40:--------------------------------
50:--------------------------------
60:60------------------------------
70:--------------------------------
root@npi:/mnt/mnt#

i2cdump

i2cdump讀取設備上所有寄存器的值,可接受的參數(shù)有

Usage:i2cdump[-f][-y][-rfirst-last][-a]I2CBUSADDRESS[MODE[BANK[BANKREG]]]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
b(byte,default)
w(word)
W(wordonevenregisteraddresses)
s(SMBusblock)
i(I2Cblock)
c(consecutivebyte)
AppendpforSMBusPEC

-V:輸出當前版本號

-f:強制使用此設備地址,即使此設備地址已經(jīng)被使用;若不添加此參數(shù),地址可能寫失敗

-y:指令執(zhí)行自動 yes,否則會提示確認執(zhí)行Continue? [Y/n] Y,不加參數(shù)y會有很多執(zhí)行提示,可以幫助判斷

-r:讀取從 first-last 之間的寄存器值

-a:讀取0x00-0xff范圍的地址

I2CBUS:i2c總線編號

ADDRESS:設備地址,建議使用十六進制

MODE:數(shù)據(jù)長度類型

root@npi:/mnt/mnt#./i2cdump-f-y-a10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
00:00000000000000007000000000000000........p.......
10:0000000000000000000010b002030200..........?????.
20:9500000000004000000000fbffddc400?.....@....?.??.
30:0000000000009022a000000001100000......?"?...??..
40:00000000000000000000000000000000................
50:00000000000000000000000000000000................
60:04030000000000000000000000000000??..............
70:00000000000000000000000000030000.............?..
80:00000000000000000000000000000000................
90:00000000000000000000000000000000................
a0:00000000000000000000000000000000................
b0:00000000000000000077147601000100.........w?v?.?.
c0:00000000000000000000000000000000................
d0:00000000000000000000000000000000................
e0:00000000000000000000000000000000................
f0:00000000000000000000000000000000................

#只讀取0x50-0x7f寄存器范圍的值
root@npi:/mnt/mnt#./i2cdump-f-y-r0x50-0x7f10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
50:00000000000000000000000000000000................
60:04030000000000000000000000000000??..............
70:00000000000000000000000000030000.............?..
root@npi:/mnt/mnt#

通過讀取i2c設備寄存器的值與芯片手冊的值進行比對,確認我們配置的是否正確。

i2cget

i2cget讀取設備上寄存器的值,可接受的參數(shù)有

Usage:i2cget[-f][-y][-a]I2CBUSCHIP-ADDRESS[DATA-ADDRESS[MODE]]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
b(readbytedata,default)
w(readworddata)
c(writebyte/readbyte)
AppendpforSMBusPEC

I2CBUS:i2c總線編號

CHIP-ADDRESS:設備地址

DATA-ADDRESS:要讀取的寄存器地址

MODE:數(shù)據(jù)長度類型

#0x39設備地址,0x04要讀取的寄存器
root@npi:/mnt/mnt#./i2cget-f-y10x390x04
0x03

i2cset

i2cset設置設備上寄存器的值,可接受的參數(shù)有

Usage:i2cset[-f][-y][-mMASK][-r][-a]I2CBUSCHIP-ADDRESSDATA-ADDRESS[VALUE]...[MODE]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
c(byte,novalue)
b(bytedata,default)
w(worddata)
i(I2Cblockdata)
s(SMBusblockdata)
AppendpforSMBusPEC

I2CBUS:i2c總線編號

CHIP-ADDRESS:設備地址

DATA-ADDRESS:要寫入的寄存器地址

VALUE:要寫入的值

MODE:數(shù)據(jù)長度類型

root@npi:/mnt/mnt#./i2cset-f-m0xff-r10x390x040x03
WARNING!ThisprogramcanconfuseyourI2Cbus,causedatalossandworse!
Iwillwritetodevicefile/dev/i2c-1,chipaddress0x39,
dataaddress0x04,data0x03(masked),modebyte.
Continue?[Y/n]y
Oldvalue0x00,writemask0xff,willwrite0x03
Continue?[Y/n]y
Value0x03written,readbackmatched
root@npi:/mnt/mnt#

把寫入寄存器的值讀出來。確認與我們寫入的值相同。

root@npi:/mnt/mnt#./i2cdump-f-y-r0x00-0x0f10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
00:00000000030000007000000000000000....?...p.......
root@npi:/mnt/mnt#

i2ctransfer

i2ctransfer通過一次傳輸發(fā)送用戶定義的I2C消息,用于創(chuàng)建I2C消息并將其作為一次傳輸合并發(fā)送。

Usage:i2ctransfer[-f][-y][-v][-V][-a]I2CBUSDESC[DATA][DESC[DATA]]...
I2CBUSisanintegeroranI2Cbusname
DESCdescribesthetransferintheform:{r|w}LENGTH[@address]
1)read/write-flag2)LENGTH(range0-65535)3)I2Caddress(uselastoneifomitted)
DATAareLENGTHbytesforawritemessage.Theycanbeshortenedbyasuffix:
=(keepvalueconstantuntilLENGTH)
+(increasevalueby1untilLENGTH)
-(decreasevalueby1untilLENGTH)
p(usepseudorandomgeneratoruntilLENGTHwithvalueasseed)

Example(bus0,read8byteatoffset0x64fromEEPROMat0x50):
#i2ctransfer0w1@0x500x64r8
Example(sameEEPROM,atoffset0x42write0xff0xfe...0xf0):
#i2ctransfer0w17@0x500x420xff-

I2CBUS:i2c總線編號

DESC:{r | w}<消息長度>[@設備地址]

{r | w}指定消息是讀還是寫

<消息長度>指定在此消息中讀取或寫入的字節(jié)數(shù)。它被解析為一個無符號的16位整數(shù)

[@設備地址]指定此消息要訪問的芯片的7位地址,并且是整數(shù)。

#參數(shù)2為i2c2,w2表示寫兩個字節(jié),@0x39為i2c設備(注意要7位地址),0x02 0xd3 為高低位地址,r1為讀取的數(shù)據(jù)是一個byte。
root@npi:/mnt/mnt#./i2ctransfer-f-y1w2@0x600x020xd3r1
0x00

總結

本文只是拋磚引玉,i2c-tools還有更多的使用方法,需要大家在實際工作中去探索。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • I2C總線
    +關注

    關注

    8

    文章

    390

    瀏覽量

    60916
  • LINUX內核
    +關注

    關注

    1

    文章

    316

    瀏覽量

    21644
  • I2C接口
    +關注

    關注

    1

    文章

    125

    瀏覽量

    25190

原文標題:推薦一個好用的i2c調試小工具

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    飛凌嵌入式ElfBoard ELF 1板卡-Linux下i2c-tools的交叉編譯

    Linux下i2c-tools的交叉編譯1.下載地址:https://archive.kernel.org/oldwiki/i2c.wiki.kernel.org/index.php
    發(fā)表于 06-19 09:41

    飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設備通訊編程示例之i2c-tools工具使用

    注意:學習資料可在ElfBoard官方網(wǎng)站“資料”專區(qū)獲取。介紹i2c-tools是一個專門調試i2c接口的開源工具,可以獲取掛載的設備及設備地址,具有在對應的設備上讀取和設置寄存器值
    發(fā)表于 10-29 16:27

    飛凌嵌入式ElfBoard EL 1板卡-i2c與從設備通訊編程示例之i2c-tools工具使用

    介紹i2c-tools是一個專門調試i2c接口的開源工具,可以獲取掛載的設備及設備地址,具有在對應的設備上讀取和設置寄存器值等功能。在ELF 1的資料包當中,已經(jīng)放置了下載好的源碼,路
    發(fā)表于 11-01 09:33

    i2c-tools的移植和使用

    1 下載i2c-tools-3.1.1.tar.bz22 解壓后修改MakefileCC =arm-linux-gnueabihf-gccLDFLAGS += -static3 make 成功后會
    發(fā)表于 09-25 17:04

    【NanoPi2試用體驗】nanopi2使用linux i2cdetect失敗

    linux有一個i2c工具i2c-tools,使用源代碼編譯出i2cdetect,不過在nanopi2的的邊系統(tǒng)中運行失敗,[59.328
    發(fā)表于 01-20 17:49

    樹莓派系列教程10:I2C

    以下兩行并保存退出。i2c-bcm2708i2c-dev二、i2c-tools安裝i2c-tools,這個工具
    發(fā)表于 03-28 13:56

    【創(chuàng)龍AM4379 Cortex-A9試用體驗】3.i2c設備在am4379開發(fā)板上的應用

    觀的看到這個接口。另外兩個接口從文檔AM437x_Technical Reference Manual.pdf中可以找到一些記載,后面使用i2c-tools工具也可以查看到。本來應該先說說IIC的協(xié)議,不過
    發(fā)表于 07-18 15:25

    迅為-iMX6ULL開發(fā)板-i2c測試工具

    /pub/software/utils/i2c-tools/,這里下載的 4.1 版本,下載完后拷貝后 Ubuntu,解壓 tar -vxf i2c-tools-4.1.tar.gz,清理
    發(fā)表于 09-25 10:57

    迅為-iMX6ULL開發(fā)板-i2c測試工具

    ://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/,這里下載的 4.1 版本,下載完后拷貝后 Ubuntu,解壓 tar -vxf i2c-tools-4.1.tar.gz,清理
    發(fā)表于 10-23 10:56

    STM32F103硬件I2C Slave的相關資料分享

    MCU:STM32F103IDE:STM32CubeIDEHAL庫硬件I2C當作Slave,模擬EEPROM行為測試工具:樹莓派為I2C主機,使用I2C-tools進行測試配置
    發(fā)表于 02-17 06:59

    請問如何將i2ctools移植到rk3399開發(fā)板上呢

    i2c-tools是什么呢?i2ctools工具支持哪些功能?請問如何將i2ctools移植到rk3399開發(fā)板上呢?
    發(fā)表于 03-07 07:46

    在RK3288 Android7系統(tǒng)下使用i2c-tools

    在SDK中目錄添加i2c-tools源碼em3288_mid_android-7.1\\external\\i2c-tools-4.1在 i2c-tools 目錄下新建 Android.mk 文件
    發(fā)表于 10-12 16:18

    請問ch32v307加i2c tools編譯出錯是哪里引起的?

    故障復現(xiàn)步驟:studio里創(chuàng)建ch32v307-r1的開發(fā)板工程(sdk版本1.0.8)打開i2c硬件設備軟件包里勾選i2c-tools然后編譯報錯:In file included from
    發(fā)表于 01-11 14:56

    STM32F103硬件I2C Slave

    MCU:STM32F103IDE:STM32CubeIDEHAL庫硬件I2C當作Slave,模擬EEPROM行為測試工具:樹莓派為I2C主機,使用I2C-tools進行測試配置
    發(fā)表于 12-20 19:38 ?52次下載
    STM32F103硬件<b class='flag-5'>I2C</b> Slave

    i2c-tools工具介紹

    i2c-tools 簡介 在嵌入式開發(fā)中,有時候需要確認硬件是否正常連接,設備是否正常工作,設備的地址是多少等等,這里我們就需要使用一個用于測試I2C 總線的工具i2c-tools
    的頭像 發(fā)表于 07-27 16:12 ?2281次閱讀
    RM新时代网站-首页