平台:树莓派 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手册,很多问题都能解决。网上搜索的东西太乱太杂,作为辅助手段还行。
全部0条评论
快来发表一下你的评论吧 !