成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你使用 i2c-tools

開發 開發工具 開源
i2c-tools 是通過操作 /dev 路徑 i2c-× 設備文件完成,因此你的 kernel 必須開啟 CONFIG_I2C_CHARDEV 宏控,否者會報找不到節點。

i2c-tools 簡介

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

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

調試新的設備驅動時,難免要反復修改寄存器,然后看結果現象。傳統的做法是【修改驅動代碼寄存器值->編譯->下載->運行->看結果】,這一過程比較費時間,而每次需要改的可能只是 1 個 bit,這種情況下 i2c-tools 是神器。

i2c-tools 官方說明:

https://i2c.wiki.kernel.org/index.php/I2C_Tools

i2c-tools 下載網站:

https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

下載后在 Ubuntu 解壓,如果想在開發板使用,就用自己板子對應的 gcc 工具鏈編譯;如果想在 ubuntu 使用,就用 ubuntu 的默認的 gcc 編譯即可。

編譯會生成五個工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷貝到開發板中就可以使用;也可以直接把 i2c-tools 源碼包放到自己的源碼中,直接編譯進固件。

i2cdetect:用于掃描 i2c 總線上的設備,并顯示地址
i2cset:設置i2c設備某個寄存器的值
i2cget:讀取i2c設備某個寄存器的值
i2cdump:讀取某個i2c設備所有寄存器的值
i2ctransfer:一次性讀寫多個字節

該工具原本是在 Linux 上使用,因為 Android 系統的內核也是 Linux,故很方便的可以移植到 Android 中。

Android-i2ctools 下載:

??https://github.com/skyxiaoyan1/android-i2ctool??

這是某位大佬根據 i2c-tools 4.1 移植的,關于 Android 下的編譯博主上次寫過 Android 系統編譯技巧,大概流程如下:

源碼包放在 /external/i2c-tools/...
在Android源碼根目錄輸入
source build/envsetup.sh
lunch rk3399_mid-userdebug(自己的工程名字)
/external/i2c-tools/ 目錄下輸入 mm 模塊編譯
在 Android 根目錄輸入 make snod 重新打包 system.img
燒寫 system.img

使用示例

i2cdetect:用于掃描 i2c 總線上的設備

Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
i2cdetect -F I2CBUS
i2cdetect -l
I2CBUS is an integer or an I2C bus name
If provided, FIRST and LAST limit the probing range.

y:關閉交互式,不會顯示警告信息
a:掃描總線上所有設備
q:使用SMBus的"quick write"命令進行檢測,不建議使用
r:使用SMBus的"receive byte"命令進行檢測,不建議使用
i2cbus:指定查詢某個總線編號
first、last:掃描的地址范圍

./i2cdetect -r -y 0。

-- 表示該地址被檢測,但是沒有芯片應答,UU 表示該地址被當前內核驅動使用。

如上圖顯示,在i2c0總線上,有三個器件,設備地址分別是:0x1b、0x40、0x41。

./i2cdetect -F i2cbus 查詢總線的功能

./i2cdetect -V 打印軟件版本號。

./i2cdetect -l 檢測當前系統有幾組i2c總線。

i2cset:向i2c設備某個寄存器寫入值

Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
I2CBUS is an integer or an I2C bus name
ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
MODE is one of:
c (byte, no value)
b (byte data, default)
w (word data)
i (I2C block data)
s (SMBus block data)
Append p for SMBus PEC

f:強制訪問
y:指令執行自動yes,否則會提示確認執行Continue? [Y/n] Y,不加參數y會有很多執行提示,可以幫助判斷
r:寫入后立即回讀寄存器的值,并將結果與寫入的值進行比較
i2cbus:總線編號
chip-address:i2c設備地址
data-address:i2c寄存器地址
value 要寫入的值
mode:指定讀取的大小,b字節,w字,s是SMBus塊,i是i2c塊

設置i2c-1上0x20器件的0x77寄存器值為0x3f
./i2cset -f -y 1 0x20 0x77 0x3f

i2cget:讀取i2c設備某個寄存器的值

Usage: i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
I2CBUS is an integer or an I2C bus name
ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
MODE is one of:
b (read byte data, default)
w (read word data)
c (write byte/read byte)
Append p for SMBus PEC

f:強制訪問
y:關閉交互模式,不會提示警告信息
i2cbus:總線編號
chip-address:i2c設備地址
data-address:i2c寄存器地址
mode:指定讀取的大小,b字節,w字,s是SMBus塊,i是i2c塊

讀取i2c-1上0x20器件的0x77寄存器值
./i2cget -f -y 1 0x20 0x77

i2cdump:讀取某個i2c設備所有寄存器的值

Usage: i2cdump [-f] [-y] [-r first-last] [-a] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]
I2CBUS is an integer or an I2C bus name
ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
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

r:指定寄存器范圍,只能掃描從 first 到 last 區域
f:強制訪問設備
y:關閉人機交互模式
i2cbus:總線編號
address:指定設備地址
mode:指定讀取的大小,b字節,w字,s是SMBus塊,i是i2c塊

讀取i2c1上0x38器件的所有寄存器
./i2cdump -f -y -a 1 0x38

一般寄存器都是8位地址的,i2cdump、i2cget、i2cset 也是設置讀取8位的地址,如果一次超過8位,需要用 i2ctransfer。

i2ctransfer:一次性讀寫多個字節

Usage: i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]...
I2CBUS is an integer or an I2C bus name
DESC describes the transfer in the form: {r|w}LENGTH[@address]
1) read/write-flag 2) LENGTH (range 0-65535) 3) I2C address (use last one if omitted)
DATA are LENGTH bytes for a write message. They can be shortened by a suffix:
= (keep value constant until LENGTH)
+ (increase value by 1 until LENGTH)
- (decrease value by 1 until LENGTH)
p (use pseudo random generator until LENGTH with value as seed)

查看系統上存在的 i2c 總線及其設備地址。

ls /sys/bus/i2c/devices/

可以在這里查看實際的設備,然后對比 i2c-tools 掃描出來的對不對。

備注:

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

責任編輯:武曉燕 來源: 嵌入式Linux系統開發
相關推薦

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2022-12-07 08:42:35

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2021-08-02 07:35:19

Nacos配置中心namespace

2022-07-22 12:45:39

GNU

2020-05-15 08:07:33

JWT登錄單點

2022-10-30 10:31:42

i2ccpuftrace

2021-03-12 10:01:24

JavaScript 前端表單驗證

2021-12-15 08:49:21

gpio 子系統pinctrl 子系統API

2021-01-19 09:06:21

MysqlDjango數據庫

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

攔截系統調用

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2020-12-08 10:32:15

Python郵件tcp
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品久久 | 欧美日韩中文字幕 | av在线播放不卡 | 九一在线观看 | 成人区精品一区二区婷婷 | 91伊人| 一区观看 | 狠狠色综合欧美激情 | 亚洲日本视频 | 91福利网 | 久久久久久网站 | av中文字幕在线播放 | 国产精品美女久久久av超清 | 成人精品福利 | 精品国产一区二区三区久久久蜜月 | 欧美成人一区二区三区 | 99免费在线视频 | 成人av在线播放 | 黄视频网站免费观看 | 国产欧美日韩综合精品一 | 精品视频一区二区三区 | 精品欧美一区二区三区精品久久 | 成人黄在线观看 | 小早川怜子xxxxaⅴ在线 | 免费在线观看h片 | 亚洲国产精品一区二区三区 | 在线观看成人小视频 | 婷婷久久精品一区二区 | 亚洲欧美精品久久 | 欧美一级淫片免费视频黄 | 久久99深爱久久99精品 | 国产精品1区 | 国产黄色一级片 | 日韩欧美一级精品久久 | 亚洲第一在线 | 国产欧美日韩一区二区三区 | 亚洲444eee在线观看 | 久久精品国产免费一区二区三区 | 国产精品成人一区二区 | 黄色在线 | 日韩精品一区二区三区中文在线 |