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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i2c-tools工具的安裝和使用簡(jiǎn)單介紹

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

i2c-tools簡(jiǎn)介

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

i2c-tools工具是一個(gè)專門調(diào)試i2c的,開源,可獲取掛載的設(shè)備及設(shè)備地址,還可以讀寫I2C設(shè)備寄存器。

下面我們就對(duì)這個(gè)工具的安裝和使用做個(gè)簡(jiǎn)單介紹。

i2c-tools安裝

解壓

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

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

編譯

使用以下命令進(jìn)行編譯

makeCC=arm-linux-gnueabihf-gccUSE_STATIC_LIB=1

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

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

i2c-tools使用方法

i2cdetect

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

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

-V:輸出當(dāng)前版本號(hào)

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

-l:輸出所有 i2c 總線,如下總線編號(hào)有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總線編號(hào)-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í)行自動(dòng)yes,否則會(huì)提示確認(rèn)執(zhí)行Continue? [Y/n] Y,不加參數(shù)y會(huì)有很多執(zhí)行提示,可以幫助判斷

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

如下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è)備上所有寄存器的值,可接受的參數(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:輸出當(dāng)前版本號(hào)

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

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

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

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

I2CBUS:i2c總線編號(hào)

ADDRESS:設(shè)備地址,建議使用十六進(jìn)制

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

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設(shè)備寄存器的值與芯片手冊(cè)的值進(jìn)行比對(duì),確認(rèn)我們配置的是否正確。

i2cget

i2cget讀取設(shè)備上寄存器的值,可接受的參數(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總線編號(hào)

CHIP-ADDRESS:設(shè)備地址

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

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

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

i2cset

i2cset設(shè)置設(shè)備上寄存器的值,可接受的參數(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總線編號(hào)

CHIP-ADDRESS:設(shè)備地址

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

VALUE:要寫入的值

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

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#

把寫入寄存器的值讀出來。確認(rèn)與我們寫入的值相同。

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總線編號(hào)

DESC:{r | w}<消息長(zhǎng)度>[@設(shè)備地址]

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

<消息長(zhǎng)度>指定在此消息中讀取或?qū)懭氲淖止?jié)數(shù)。它被解析為一個(gè)無符號(hào)的16位整數(shù)

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

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

總結(jié)

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





審核編輯:劉清

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

    關(guān)注

    8

    文章

    384

    瀏覽量

    60664
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    315

    瀏覽量

    21556
  • I2C接口
    +關(guān)注

    關(guān)注

    1

    文章

    124

    瀏覽量

    25020

原文標(biāo)題:推薦一個(gè)好用的i2c調(diào)試小工具

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    飛凌嵌入式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

    i2c-tools的移植和使用

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

    【NanoPi2試用體驗(yàn)】nanopi2使用linux i2cdetect失敗

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

    樹莓派系列教程10:I2C

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

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

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

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

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

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

    ://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

    I2C總線簡(jiǎn)單介紹

    1.I2C簡(jiǎn)單介紹I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。
    發(fā)表于 01-14 07:10

    STM32F103硬件I2C Slave的相關(guān)資料分享

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

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

    i2c-tools是什么呢?i2ctools工具支持哪些功能?請(qǐng)問如何將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

    請(qǐng)問ch32v307加i2c tools編譯出錯(cuò)是哪里引起的?

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

    【昉·星光 2 高性能RISC-V單板計(jì)算機(jī)體驗(yàn)】I2C調(diào)試記錄

    接口,反接接口,這樣就能測(cè)試出其是不是任意接口都能配置上資源。 在debain文件系統(tǒng)下我們很方便調(diào)試,只需要下載i2c-tools工具即可測(cè)試I2C接口。 使用命令可以看到我們的總線上掛在那些地址
    發(fā)表于 08-03 20:39

    STM32F103硬件I2C Slave

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

    i2c-tools工具介紹

    i2c-tools 簡(jiǎn)介 在嵌入式開發(fā)中,有時(shí)候需要確認(rèn)硬件是否正常連接,設(shè)備是否正常工作,設(shè)備的地址是多少等等,這里我們就需要使用一個(gè)用于測(cè)試I2C 總線的工具i2c-tools
    的頭像 發(fā)表于 07-27 16:12 ?1981次閱讀