平臺(tái):樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
I2C是Philips開發(fā)的一種兩線通信協(xié)議,常用于一些對(duì)速度要求不高的小型器件上。SMBus是系統(tǒng)管理總線,基于I2C協(xié)議,大部分情況下二者兼容。
這次使用mpu6050作為I2C外設(shè),學(xué)習(xí)Linux下I2C的應(yīng)用開發(fā)。 樹莓派默認(rèn)I2C可能沒有打開,需要配置重啟,具體方法這里不贅述。最終會(huì)在/dev下生成i2c-1設(shè)備。
1、需要的頭文件
2、打開I2C設(shè)備
打開設(shè)備文件與打開普通文件沒有區(qū)別,使用open函數(shù)以讀寫的方式打開,返回值是該設(shè)備文件的文件描述符。
3、設(shè)置從設(shè)備的地址
每個(gè)I2C設(shè)備都有一個(gè)設(shè)備地址,使用ioctl函數(shù)設(shè)置這個(gè)地址。
4、讀寫設(shè)備
到這里就可以讀寫設(shè)備了,Linux提供兩種方式。
b.使用smbus提供的函數(shù)
第一步的頭文件就是給這里提供支持的。使用這種方式需要安裝額外的庫(kù),網(wǎng)上說需要安裝libi2c-dev,我沒驗(yàn)證,請(qǐng)知道的指點(diǎn)一二。我這里安裝了i2c-tools工具,并且下載了i2c-tools的源碼并編譯安裝過,所以庫(kù)和頭文件都有了,現(xiàn)在也搞不清是哪一步操作安裝的了。
Linux官方文檔是推薦這種方式的,smbus提供了下面幾個(gè)函數(shù)。
5、編譯
使用smbus編譯需要額外的參數(shù)-Llib和-li2c,否則提示找不到smbus提供的函數(shù)。我用了makefile方便編譯,當(dāng)然使用gcc直接編也可以。
其他:
i2c相關(guān)的頭文件在/usr/include/linux下
smbus相關(guān)的頭文件在/usr/local/include/i2c下
tips:學(xué)習(xí)如何使用Linux最好的資料應(yīng)該是Documentation,至少?gòu)膕pi和i2c的應(yīng)用開發(fā)角度看是這樣,再結(jié)合man手冊(cè),很多問題都能解決。網(wǎng)上搜索的東西太亂太雜,作為輔助手段還行。
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209318 -
總線
+關(guān)注
關(guān)注
10文章
2878瀏覽量
88051 -
I2C
+關(guān)注
關(guān)注
28文章
1484瀏覽量
123616 -
SMBus
+關(guān)注
關(guān)注
0文章
117瀏覽量
22068 -
樹莓派
+關(guān)注
關(guān)注
116文章
1706瀏覽量
105606
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論