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

参考资料:Linux内核源码Documentation/i2c/dev-interface

你可能感兴趣的:(smbus使用,树莓派)