Linux控制I2C/SMBus设备

描述

平台:树莓派 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提供两种方式。

a.使用write和read函数

总线

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手册,很多问题都能解决。网上搜索的东西太乱太杂,作为辅助手段还行。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分