<Linux開發(fā)> linux開發(fā)工具-之-I2C TOOLS工具使用
<Android開發(fā)> Android開發(fā)工具- 之-I2C TOOLS工具使用
<Linux開發(fā)>驅動開發(fā) -之- Linux I2C 驅動
一 前言
在筆者的另一篇文章 <Android開發(fā)> Android開發(fā)工具- 之-I2C TOOLS工具使用講解過,如何在android上使用I2C TOOLS工具。本文主要是分析如何在linux開發(fā)板上使用I2C TOOLS工具,整體使用和android基本一致,差一點主要在編譯這一塊。畢竟不同項目編譯還是有一定差異的;接下來我們就來看看如何將I2C TOOLS工具移植到linux開發(fā)板上。
二 獲取I2C工具源碼
下載地址:I2C_TOOLS
打開后如下:
筆者選擇了4.3版本,如下:
下載得到的是一個源碼包。
讀者根據(jù)自己想要的版本下來即可,下載完成后使用如下命令解壓:
tar -xvf i2c-tools-4.3.tar.gz
解壓后內容如下:
三 編譯I2C工具源碼
前面獲取得到源碼后,我們就需要使用交叉編譯工具,進行編譯,然后將編譯后生成的執(zhí)行文件放到設備中,即可。
整體的流程其實和平常Linux開發(fā)的流程基本是一樣的。
接下來我們看看如何編譯i2c-tools。
下載i2c-tools并解壓后如下圖:
使用編輯工具打開Makefile文件,筆者使用vscode。
打開后根據(jù)Linux板子的類型選擇32位還是64位的交叉編譯工具。然后新增以下內容:
32位設備添加:
bindir += /usr/local/arm/gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf/bin
ARCH = arm
CC = arm-linux-gnueabihf-gcc
64位設備添加:
bindir += /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
ARCH = arm
CC = aarch64-linux-gnu-gcc
第28行:指定包含交叉工具的路徑,交叉編譯工具下載:linaro;下載后解壓到指定目錄下;筆者使用“tar -xvf gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.xz -C /usr/local/arm
”解壓到該目錄。
第29行:執(zhí)行架構,Linux開發(fā)板,當然是arm了;
第30行:指定gcc編譯工具,這里指向交叉編譯工具。即 /usr/local/arm/gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
第33行:指定包含交叉工具的路徑,交叉編譯工具下載:linaro;下載后解壓到指定目錄下;筆者使用“tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /usr/local/arm
”解壓到該目錄。
第34行:執(zhí)行架構,Linux開發(fā)板,當然是arm了;
第35行:指定gcc編譯工具,這里指向交叉編譯工具。即 /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
添加好編譯參數(shù)后,打開終端,并執(zhí)行"make",如下:
可看到輸出內容,在tools目錄下生成我們所需要的工具文件。
進入tools目錄查看文件信息;
使用file命令可查看文件屬性,可看出 生成的i2cset是 32位,ARM的可執(zhí)行文件。
如果是用64位交叉編譯則是如下圖:
編譯得到的工具文件有:i2cdetect、i2cset、i2cdump、i2cget、i2ctransfer這幾個工具文件,我們將這幾個文件放到設備中即可使用。
四 I2C工具使用
3.1 準備工具文件
將2cdetect、i2cset、i2cdump、i2cget、i2ctransfer這幾個工具文件放到設備中,我們將其放到系統(tǒng)bin目錄下;以及l(fā)ibi2c.so,命令如下:
//移植執(zhí)行文件
cd i2c-tools-4.3/tools
cp i2cdetect ../../../nfs/buildrootfs/bin/
cp i2cset ../../../nfs/buildrootfs/bin/
cp i2cdump ../../../nfs/buildrootfs/bin/
cp i2cget ../../../nfs/buildrootfs/bin/
cp i2ctransfer ../../../nfs/buildrootfs/bin/
//移植libi2c.so
cd ../lib
cp libi2c.so ../../../nfs/buildrootfs/lib/
cp libi2c.so.0 ../../../nfs/buildrootfs/lib/
cp libi2c.so.0.1.1 ../../../nfs/buildrootfs/lib/
3.2 i2c-tool使用測試
本次測試是基于I.MX6ULL平臺驗證。筆者設備上i2c-0掛了一個三合一環(huán)境傳感器:AP3216C,詳細可查看:<Linux開發(fā)>驅動開發(fā) -之- Linux I2C 驅動
1)用i2cdetect檢測有幾組i2c總線在系統(tǒng)上
命令:
i2cdetect -l
所查詢的兩個I2C控制器 與設備樹中描述一致。
2)用i2cdetect檢測掛載在i2c-1總線上器件,
命令:
i2cdetect -r -y 1
其中:
1:表示檢測i2c-1上的掛載情況
檢測i2c-0上的掛載情況
3)用i2cdump查看器件所有寄存器的值,這個命令可以查看器件所有寄存器的值,在實際測試時很好用
命令:
i2cdump -f -y 0 0x1e
其中 :
0: 表示I2C-0這個總線;
0x1e:表示總線上 設備地址為0x1e的這個設備;
4)用i2cset來設置單個寄存器值
命令:
i2cset -f -y 0 0x1e 0x00 0x04 //復位器件
i2cset -f -y 0 0x1e 0x00 0x03 //啟動三合一環(huán)境傳感器轉換
其中 :
0: 表示I2C-0這個總線;
0x1e:表示總線上 設備地址為0x1e的這個設備;
0x00:操作的寄存器地址
0x04:當前操作的寄存器到寫入的值
進行上述配置后傳感器會啟動數(shù)據(jù)轉換,接著使用“i2cdump -f -y 0 0x1e”
查看轉換后的數(shù)據(jù)即可,如下:
0X0A 0X0B 寄存器:紅外線強度(IR)、0x0C 0X0D寄存器:環(huán)境光強度(ALS)、0X0E 0X0F寄存器:接近距離(PS) 這三個環(huán)境參數(shù)。
4)用i2cget來獲取單個寄存器值
命令:
i2cget -f -y 0 0x1e 0x0A
i2cget -f -y 0 0x1e 0x0B
i2cget -f -y 0 0x1e 0x0C
i2cget -f -y 0 0x1e 0x0D
i2cget -f -y 0 0x1e 0x0E
i2cget -f -y 0 0x1e 0x0F
其中 :
0: 表示I2C-0這個總線;
0x1e:表示總線上 設備地址為0x1e的這個設備;
0x0A:操作的寄存器地址
5)i2ctransfer 使用,i2ctransfer支持16位/32位寄存器的讀寫,i2cset和i2cget只能讀取8位的寄存器。所以i2ctransfer可以替代i2cset和i2cget
(1) 往i2c-0上0x1E器件 0x0000寄存器 寫0x01
$i2ctransfer -f -y 0 w3@0x1E 0x00 0x00 0x01
(2) 在i2c-0上0x1E器件 0x000A寄存器 讀取6個字節(jié)數(shù)據(jù)
i2ctransfer -f -y 0 w2@0x1E 0x00 0x0A r6
因為筆者使用的外設是8位寄存器的所以就沒有演示了。文章來源:http://www.zghlxwxcb.cn/news/detail-586559.html
五 總結
善于使用工具可以有效提交我們測試驗證外設的可用性 和錯誤性。幫助我們快速開發(fā)外設使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-586559.html
到了這里,關于<Linux開發(fā)> linux開發(fā)工具-之-I2C TOOLS工具使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!