平臺:樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
I2C是Philips開發的一種兩線通信協議,常用于一些對速度要求不高的小型器件上。SMBus是系統管理總線,基于I2C協議,大部分情況下二者兼容。
這次使用mpu6050作為I2C外設,學習Linux下I2C的應用開發。 樹莓派默認I2C可能沒有打開,需要配置重啟,具體方法這里不贅述。最終會在/dev下生成i2c-1設備。
1、需要的頭文件
2、打開I2C設備
打開設備文件與打開普通文件沒有區別,使用open函數以讀寫的方式打開,返回值是該設備文件的文件描述符。
3、設置從設備的地址
每個I2C設備都有一個設備地址,使用ioctl函數設置這個地址。
4、讀寫設備
到這里就可以讀寫設備了,Linux提供兩種方式。
b.使用smbus提供的函數
第一步的頭文件就是給這里提供支持的。使用這種方式需要安裝額外的庫,網上說需要安裝libi2c-dev,我沒驗證,請知道的指點一二。我這里安裝了i2c-tools工具,并且下載了i2c-tools的源碼并編譯安裝過,所以庫和頭文件都有了,現在也搞不清是哪一步操作安裝的了。
Linux官方文檔是推薦這種方式的,smbus提供了下面幾個函數。
5、編譯
使用smbus編譯需要額外的參數-Llib和-li2c,否則提示找不到smbus提供的函數。我用了makefile方便編譯,當然使用gcc直接編也可以。
其他:
i2c相關的頭文件在/usr/include/linux下
smbus相關的頭文件在/usr/local/include/i2c下
tips:學習如何使用Linux最好的資料應該是Documentation,至少從spi和i2c的應用開發角度看是這樣,再結合man手冊,很多問題都能解決。網上搜索的東西太亂太雜,作為輔助手段還行。
-
Linux
+關注
關注
87文章
11509瀏覽量
213715 -
總線
+關注
關注
10文章
2959瀏覽量
89729 -
I2C
+關注
關注
28文章
1541瀏覽量
127786 -
SMBus
+關注
關注
1文章
124瀏覽量
22626 -
樹莓派
+關注
關注
121文章
2001瀏覽量
107429
發布評論請先 登錄
I2C與SMBus之間的技術差異
如何使I2C主機成為SMBus主機?
SMBus與I2C有什么差別?
基于嵌入式Linux演示I2C設備調試
《Linux設備驅動開發詳解》第15章、Linux的I2C核心、總線與設備驅動

基于嵌入式Linux下的I2C設備驅動的總體思路與框架設計

linux自帶i2c工具使用
Linux的I2C驅動架構
I2C通信協議:了解I2C Primer、 PMBus和SMBus

評論