平臺(tái):樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
I2C是Philips開(kāi)發(fā)的一種兩線通信協(xié)議,常用于一些對(duì)速度要求不高的小型器件上。SMBus是系統(tǒng)管理總線,基于I2C協(xié)議,大部分情況下二者兼容。
這次使用mpu6050作為I2C外設(shè),學(xué)習(xí)Linux下I2C的應(yīng)用開(kāi)發(fā)。 樹莓派默認(rèn)I2C可能沒(méi)有打開(kāi),需要配置重啟,具體方法這里不贅述。最終會(huì)在/dev下生成i2c-1設(shè)備。
1、需要的頭文件
2、打開(kāi)I2C設(shè)備
打開(kāi)設(shè)備文件與打開(kāi)普通文件沒(méi)有區(qū)別,使用open函數(shù)以讀寫的方式打開(kāi),返回值是該設(shè)備文件的文件描述符。
3、設(shè)置從設(shè)備的地址
每個(gè)I2C設(shè)備都有一個(gè)設(shè)備地址,使用ioctl函數(shù)設(shè)置這個(gè)地址。
4、讀寫設(shè)備
到這里就可以讀寫設(shè)備了,Linux提供兩種方式。
b.使用smbus提供的函數(shù)
第一步的頭文件就是給這里提供支持的。使用這種方式需要安裝額外的庫(kù),網(wǎng)上說(shuō)需要安裝libi2c-dev,我沒(méi)驗(yàn)證,請(qǐng)知道的指點(diǎn)一二。我這里安裝了i2c-tools工具,并且下載了i2c-tools的源碼并編譯安裝過(guò),所以庫(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)用開(kāi)發(fā)角度看是這樣,再結(jié)合man手冊(cè),很多問(wèn)題都能解決。網(wǎng)上搜索的東西太亂太雜,作為輔助手段還行。
-
Linux
-
總線
+關(guān)注
關(guān)注
10文章
2848瀏覽量
87839 -
I2C
+關(guān)注
關(guān)注
28文章
1468瀏覽量
122773 -
SMBus
+關(guān)注
關(guān)注
0文章
114瀏覽量
21975 -
樹莓派
+關(guān)注
關(guān)注
116文章
1683瀏覽量
105389
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論