天天看點

I2C調試工具I2CHelper

I2CHelper

下載下傳位址:https://download.csdn.net/download/qq_33544860/81854199

I2CHelper是一個簡單的I2C調試工具,它可以用來設定讀取、設定相關的寄存器。功能和著名的i2c-tool類似。

準備工作

在這裡主要介紹如何在android裡面進行使用。

首先,由于涉及到權限問題,我們需要通過adb進行root以及remount,如:

adb root
adb remount
           

接下來,就可以将I2CHelper push到/system/bin裡面了:

adb push I2CHelper /system/bin
           

用法

從這裡開始,我們來看一下如何正确使用此應用程式來進行相關的設定。

help

預設的模式,如果不帶任何參數的話,那麼就會進入如下模式。

指令行的用法如下:

adb shell ./system/bin/I2CHelper
           

或是帶“help”參數,如:

adb shell ./system/bin/I2CHelper help
           

detect

該功能主要用來檢測I2C總線上有哪些裝置,以及該裝置的位址是什麼。該模式的參數隻有一個,便是detect,如:

adb shell ./system/bin/I2CHelper detect
           

在某個android平台上的運作結果如下所示:

|-------|--------------|---------------|--------------|-----------------|
|  BUS  | 7BIT ADDRESS | WRITE ADDRESS | READ ADDRESS | POSSIBLE DEVICE |
|-------|--------------|---------------|--------------|-----------------|
| i2c-0 | 0x0C         | 0x18          | 0x19         | Unknow          |
| i2c-0 | 0x44         | 0x88          | 0x89         | Unknow          |
| i2c-0 | 0x5D         | 0xBA          | 0xBB         | GM7150,TVP5151  |
| i2c-1 | 0x5D         | 0xBA          | 0xBB         | GM7150,TVP5151  |
| i2c-2 | 0x28         | 0x50          | 0x51         | Unknow          |
| i2c-2 | 0x5D         | 0xBA          | 0xBB         | GM7150,TVP5151  |
|-------|--------------|---------------|--------------|-----------------|
           

get

該模式主要是用來擷取裝置的某個寄存器的數值,其功能參數為:

I2CHelper get [BUS][7-BIT ADDR][REG]
           

假如某個I2C裝置挂載在dev/i2c-2上,其位址為0x5D,我們想擷取它0x21寄存器的數值,那麼我們可以執行如下指令:

adb shell ./system/bin/I2CHelper get 2 0x5D 0x21
           

輸出結果如下所示:

|-------|--------------|------------------|-------|
|  BUS  | 7BIT ADDRESS | REGISTER ADDRESS | VALUE |
|-------|--------------|------------------|-------|
| i2c-2 | 0x5D         | 0x21             | 0xE   |
|-------|--------------|------------------|-------|
           

set

該模式主要是用來設定寄存器的數值,其功能參數為:

I2CHelper set [BUS][7-BIT ADDR][REG][VAL]
           

假如某個I2C裝置挂載在dev/i2c-2上,其位址為0x5D,我們想設定它0x21寄存器的數值為0x0A,那麼我們可以執行如下指令:

adb shell ./system/bin/I2CHelper set 2 0x5D 0x21 0x0A
           

指令執行的結果如下所示:

|-------|--------------|------------------|-----------|-----------|
|  BUS  | 7BIT ADDRESS | REGISTER ADDRESS | OLD VALUE | NEW VALUE |
|-------|--------------|------------------|-----------|-----------|
| i2c-2 | 0x5D         | 0x21             | 0xE       | 0xA       |
|-------|--------------|------------------|-----------|-----------|
           

dump

該模式主要是用來dump出整個I2C裝置的所有寄存器的數值,其功能參數為:

I2CHelper dump [BUS][7-BIT ADDR][File --Option]
           

其中File這個參數是可選的。如果有此參數的話,會将相關的數值儲存到檔案中,以便于“load”模式使用。

假如某個I2C裝置挂載在dev/i2c-2上,其位址為0x5D,我們想将它寄存器全部dump出來,那麼執行如下指令:

adb shell ./system/bin/I2CHelper dump 2 0x5D
           

如果将dump的資料儲存到檔案中,則加上檔案路徑:

adb shell ./system/bin/I2CHelper dump 2 0x5D /sdcard/dump.txt
           

執行結果如下所示:

Bus: i2c-2
Address: 0x5D
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
|   | 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | A  | B  | C  | D  | E  | F  |
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
| 0 | 00 | 15 | 00 | AF | C0 | 00 | 10 | 60 | 00 | 70 | 80 | 00 | 80 | 40 | 00 | 02 |
| 1 | 1E | 00 | 00 | 00 | 00 | 01 | 6E | 05 | 00 | 00 | 0C | 14 | 00 | 00 | 00 | 00 |
| 2 | 0E | 0E | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 3 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 4 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 5 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 6 | 00 | 00 | 01 | 00 | 00 | 04 | 04 | 08 | 15 | 00 | 0C | 32 | 0F | DA | 03 | 00 |
| 7 | FF | 06 | 06 | 10 | 00 | 04 | 00 | 08 | 40 | 04 | 00 | 00 | 03 | 0A | 01 | 74 |
| 8 | 71 | 50 | 03 | 00 | 02 | 71 | 11 | 00 | 60 | 40 | FF | 00 | 83 | 00 | 00 | 00 |
| 9 | 05 | 00 | 40 | 03 | 02 | 02 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| A | 55 | AA | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| B | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| C | 00 | 00 | 04 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| D | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| E | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| F | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
Succeed to save the dump value to /sdcard/dump.txt
           

load

該模式主要是将dump出來的資料回寫到I2C裝置中。使用該指令的前提是,我們之前已經通過dump指令将資料儲存了起來。load的指令用法如下:

I2CHelper load [BUS][7-BIT ADDR][File]
           

假如資料是儲存在/sdcard/dump.txt檔案中,那麼我們可以執行如下指令讀取并寫回到裝置中:

adb shell ./system/bin/I2CHelper load 2 0x5D /sdcard/dump.txt
           

執行結果如下所示:

Bus: i2c-2
Address: 0x5D

[Comment]
00~FF: The value succeed to set
XX: The value failed to set
II: The value ignore to set,because there is error in the dump file
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
|   | 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | A  | B  | C  | D  | E  | F  |
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
| 0 | 00 | 15 | 00 | AF | C0 | 00 | 10 | 60 | 00 | 70 | 80 | 00 | 80 | 40 | 00 | 02 |
| 1 | 1E | 00 | 00 | 00 | 00 | 01 | 6E | 05 | 00 | 00 | 0C | 14 | 00 | 00 | 00 | 00 |
| 2 | 0E | 0E | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 3 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 4 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 5 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| 6 | 00 | 00 | 01 | 00 | 00 | 04 | 04 | 08 | 15 | 00 | 0C | 32 | 0F | DA | 03 | 00 |
| 7 | FF | 06 | 06 | 10 | 00 | 04 | 00 | 08 | 40 | 04 | 00 | 00 | 03 | 0A | 01 | 74 |
| 8 | 71 | 50 | 03 | 00 | 02 | 71 | 11 | 00 | 60 | XX | FF | 00 | 83 | 00 | 00 | 00 |
| 9 | 05 | 00 | 40 | 03 | 02 | 02 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| A | 55 | AA | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| B | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| C | 00 | 00 | 04 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| D | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| E | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| F | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|
           

這裡稍微需要注意一下結果。如果數值是“0x00~0xFF”的話,那麼意味着是正常寫進去的;如果是“XX”,則是寫入失敗的,很可能是這個裝置的這個寄存器是不允許寫的;如果是“II”的話,意味着儲存的資料當中,該位址的資料是不正确的,是以是沒有往裝置中寫入。

繼續閱讀