linux open 头文件_Linux控制I2C/SMBus设备

平台:

Linux 基础_JAVA-创客学院​www.makeru.com.cn
8cac21f885691b2b703bf0a7b0955725.png

I2C是Philips开发的一种两线通信协议,常用于一些对速度要求不高的小型器件上。SMBus是系统管理总线,基于I2C协议,大部分情况下二者兼容。

这次使用mpu6050作为I2C外设,学习Linux下I2C的应用开发。

树莓派默认I2C可能没有打开,需要配置重启,具体方法这里不赘述。最终会在/dev下生成i2c-1设备。

7935768c02546b4f1538cad5b2a17fd9.png

1、需要的头文件

d02a1838cec40d2961dbe49097b474ac.png

2、打开I2C设备

打开设备文件与打开普通文件没有区别,使用open函数以读写的方式打开,返回值是该设备文件的文件描述符。

d5c7fe96c9277452f597aaf0dc027af9.png

3、设置从设备的地址

每个I2C设备都有一个设备地址,使用ioctl函数设置这个地址。

e4d5848884d0f7c14ba7f51556ff150c.png

4、读写设备

到这里就可以读写设备了,Linux提供两种方式。

a.使用write和read函数

731582e0d934ba00eab36474931da716.png

b.使用smbus提供的函数

d652f866a3cf9a7c89c0eba9d5843c7c.png

第一步的头文件就是给这里提供支持的。使用这种方式需要安装额外的库,网上说需要安装libi2c-dev,我没验证,请知道的指点一二。我这里安装了i2c-tools工具,并且下载了i2c-tools的源码并编译安装过,所以库和头文件都有了,现在也搞不清是哪一步操作安装的了。

Linux官方文档是推荐这种方式的,smbus提供了下面几个函数。

1b727ceb8becd0e1d898e7fc6aa93e8a.png

5、编译

使用smbus编译需要额外的参数-Llib和-li2c,否则提示找不到smbus提供的函数。我用了makefile方便编译,当然使用gcc直接编也可以。

dc86d3074582312b539330e54bb66a35.png

其他:

i2c相关的头文件在/usr/include/linux下

fd80083bf004faba37e07507db91f6a4.png

smbus相关的头文件在/usr/local/include/i2c下

989228ac978633bd3f3f5d504794cee9.png

tips:学习如何使用Linux最好的资料应该是Documentation,至少从spi和i2c的应用开发角度看是这样,再结合man手册,很多问题都能解决。网上搜索的东西太乱太杂,作为辅助手段还行。

0697214c90f093425763e0a096dd7158.png
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值