十四、訪問外部I2C設備寄存器


https://blog.csdn.net/Z_HUALIN/article/details/78084313

https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/+/refs/tags/v3.1.2

將編譯得到i2cdetect i2cget i2cset i2cdump四個工具。

1.我們現在要查看tas5729這個i2c外設,通過查詢原理圖,得知tas5729掛在在TWI1上;

uranus-nansu:/ # i2cdetect -y -r 1

i2cdetect -y -r 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

70: -- -- -- -- -- -- -- --

得到設備的地址是:0x2B(0x20+0x0b),UU意味着這個設備被kernel driver占用,通常不能從user space探查;

2.查看某個寄存器值(0x20);

Usage: i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]

I2CBUS is an integer or an I2C bus name

ADDRESS is an integer (0x03 - 0x77)

MODE is one of:

    b (byte, default)

    w (word)

    W (word on even register addresses)

    s (SMBus block)

    i (I2C block)

    c (consecutive byte)

    Append p for SMBus PEC

i2cget -f -y 1 0x2b 0x20 w4

 

3.將某個值寫入某個寄存器:

Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

i2cset -f -y -r 1 0x2b 0x04 0x03

 

4.dump部分寄存器值;

Usage: i2cdump [-f] [-y] [-r first-last] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]

 

i2cdump -f -y -r 0x00-0x25 1 0x2b w

 

5.i2ctransfer。

1).上述幾個工具即使選擇‘w’模式,每個寄存器返回的數值最大時16bit(2bytes),對於32bit生長更高位數寄存器讀取不到所有bit數據;

2).大多數設備在讀取之前都需要對寄存器進行寫訪問。i2ctransfer提供了一種組合寫入和讀取過程的方法。它還可以在單​​個命令中處理帶有附加后綴的多個字節寫入/讀取。

a.要讀取一組字節:i2ctransfer -f -y <i2cbus number> r<number of bytes>@<peripheral address>

b.要寫一組字節:i2ctransfer -f -y <i2cbus number> w<number of bytes>@<peripheral address> <byte value 1> <byte value 2> ... <byte value n>

c.要寫入一組字節,然后讀取一組字節:i2ctransfer -f -y <i2cbus number> w<number of bytes to write>@<peripheral address> <byte value 1> <byte value 2> ... <byte value n> r<number of bytes to read>

 

 

i2ctransfer -f -y 1 w1@0x2b 0x25 r4      #從I2S1總線上的0x2b外設,讀取寄存器0x25中4字節數據;

i2ctransfer -f -y 1 w5@0x2b 0x04 0x00 0x00 0x00 0x03

 

i2ctransfer -f -y 1 w3@0x2b 0x07 0xc0 0x00

 

i2ctransfer -f -y 1 w1@0x2b 0x4f r4


免責聲明!

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



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