• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > Linux I2C總線驅動調試之i2c-tools工具使用

    Linux I2C總線驅動調試之i2c-tools工具使用

    發布人:電子禪石 時間:2024-01-28 來源:工程師 發布文章

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

    i2c-tools是一個專門調試i2c的開源工具,可獲取掛載的設備及設備地址,還可以讀寫I2C設備寄存器。調試新的設備驅動時,難免要反復修改寄存器,然后看結果現象。傳統的做法是修改驅動代碼寄存器值->編譯->下載->運行->看結果。這一過程比較費時間,而每次需要改的可能只是 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 總線上的設備,并顯示地址。
    i2cset:設置i2c設備某個寄存器的值。
    i2cget:讀取i2c設備某個寄存器的值。
    i2cdump:讀取某個i2c設備所有寄存器的值。
    i2ctransfer:一次性讀寫多個字節。

    工具命令介紹:
        i2cdetect:檢測i2c芯片
        i2cdump:查看寄存器值
        i2cget:獲取單個寄存器值(8位寄存器)
        i2cset:設置單個寄存器值(8位寄存器)
        i2ctransfer:一次傳輸多字節數據(16位寄存器)
    參數介紹:
        -y:禁用交互模式。
        -f:強制訪問設備。
        -r:寫入后立即讀回該值。

    注:i2c-tools 原理是通過操作  /dev 路徑 i2c-× 設備文件完成,因此你的 kernel 必須開啟了 CONFIG_I2C_CHARDEV 配置,否者會報找不到節點。  

    在設備上也可以通過目標板終端輸入:ls /sys/bus/i2c/devices查看i2c設備節點信息。看到的i2c-0,i2c-1,指的是i2c總線節點,i2c從設備都是掛載在總線節點下的。

    工具編譯
    工具源碼,使用以下命令進行編譯

    make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1

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

    不加 USE_STATIC_LIB 編譯選項,會使用動態鏈接的方式編譯。編譯完成后需要拷貝i2c-tools-4.3/lib 目錄下的libi2c.so.0動態庫到設備上的/usr/bin 目錄下。編譯會生成五個工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷貝到開發板中就可以使用。

    i2c-tools使用方法
    i2cdetect:查詢開發板包含的i2c總線和外設,看以下命令:

    探測開發板包含的i2c總線。

    i2cdetect -y -r 0

    探測i2c-0總線上掛載的外設,參數-y表示取消交互模式,直接執行命令。

    i2cdetect -y -r 1

    探測i2c-1總線上掛載的外設,UU表示該設備已經被Linux內核驅動占用,探測程序會略過該設備。下圖所示,從設備地址分別是0x0c和0x1a。 UU表示設備地址的從設備被驅動占用,卸載對應的驅動后,UU就會變成數據。-- 表示該地址被檢測,但是沒有應答。

     i2cset:設置i2c設備單個寄存器的值,看幾個命令:

    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為例進行分析
    參數含義:
    -y 取消交互模式,直接執行命令
    -f 強制訪問該設備
    0 表示i2c總線編號
    0x57 表示i2c設備地址
    0x00 表示寄存器地址
    0x10 表示待寫入的值
    i2cget:查看i2c設備單個寄存器的值,看幾個命令:
     

    i2cget -y -f 0 0x57 0x00

    以 i2cget -y -f 0 0x57 0x00為例進行分析,參數含義:
    -y 取消交互模式,直接執行命令
    -f 強制訪問該設備
    0 表示i2c總線編號
    0x57 表示i2c設備地址
    0x00 表示寄存器地址

     i2cdump:查看i2c設備所有寄存器的值,看以下命令:

    i2cdump -y -f 1 0x32

    參數含義:
    -y 取消交互過程,直接執行命令
    -f 強制訪問該設備
    1 表示i2c總線編號
    0x32 表示i2c設備地址

    其他資源
    Linux內核i2c-tools命令

    i2c-tools工具的安裝和使用簡單介紹-電子發燒友網

    https://www.cnblogs.com/liuwanpeng/p/7346558.html

    Linux下I2C-tools工具使用_i2cdetect_深海帶鯉魚的博客-CSDN博客

    嵌入式Linux驅動開發(I2C專題)(四)_嵌入式學習者。的博客-CSDN博客 

    摘自:https://blog.csdn.net/yyz_1987/article/details/131953108


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



    關鍵詞: I2C

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 罗源县| 南城县| 射阳县| 绥阳县| 林芝县| 鄂尔多斯市| 辰溪县| 江山市| 皋兰县| 德兴市| 西乡县| 赤水市| 罗甸县| 和龙市| 轮台县| 绥芬河市| 连城县| 邳州市| 宁城县| 美姑县| 扶余县| 巨野县| 额尔古纳市| 东方市| 明溪县| 安西县| 宁晋县| 青州市| 右玉县| 绥中县| 繁昌县| 会同县| 启东市| 海口市| 桂林市| 河源市| 台湾省| 和硕县| 兴山县| 类乌齐县| 沿河|