0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux控制I2C/SMBus设备

CHANBAEK 来源:头条号科G栈 作者:头条号科G栈 2023-03-23 10:02 次阅读

平台:树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2

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

这次使用mpu6050作为I2C外设,学习Linux下I2C的应用开发。 树莓派默认I2C可能没有打开,需要配置重启,具体方法这里不赘述。最终会在/dev下生成i2c-1设备。

poYBAGQbsx-ABKsSAAA9S4ro0uE175.jpg

1、需要的头文件

pYYBAGQbsx-Ab_0RAABkaCBl-ic116.jpg

2、打开I2C设备

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

poYBAGQbsyCAXYbNAABMK-_Z830958.jpg

3、设置从设备的地址

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

pYYBAGQbsyGADe-bAABMf-2pB4w668.jpg

4、读写设备

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

a.使用write和read函数

poYBAGQbsyGAYdlFAACujYkU1BQ932.jpg

b.使用smbus提供的函数

pYYBAGQbsyKAQaunAAF6zsIlwMQ539.jpg

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

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

poYBAGQbsySARwjlAAKhvI_5U4Q681.jpg

5、编译

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

pYYBAGQbsyWASt3uAAAqnvtq21A305.jpg

其他:

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

pYYBAGQbsyaAObZyAABZIkPIcAw552.jpg

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

poYBAGQbsyeAZprZAABWAIDgczA716.jpg

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

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

    关注

    87

    文章

    11292

    浏览量

    209322
  • 总线
    +关注

    关注

    10

    文章

    2878

    浏览量

    88051
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1484

    浏览量

    123618
  • SMBus
    +关注

    关注

    0

    文章

    117

    浏览量

    22068
  • 树莓派
    +关注

    关注

    116

    文章

    1706

    浏览量

    105607
收藏 人收藏

    评论

    相关推荐

    I2CSMBus之间的技术差异

    所制订的先进组态与电源管理接口(AdvancedConfiguration& Power Interface;ACPI)规范中成为基础的管理讯息传递接口、控制传递接口。 虽然I2CSMBus
    发表于 11-21 19:49

    如何使I2C主机成为SMBus主机?

    你好,我正在努力使I2C成为SMBUS的主人。我面临以下问题1。SMBus奴隶的删除插入使得S I2C接口被卡住。-原因-在ISR I2C
    发表于 09-19 07:57

    SMBusI2C有什么差别?

    系统管理总线(SMBus)是一个两线接口。通过它,各设备之间以及设备与系统的其他部分之间可以互相通信。它基于I2C操作原理。SMBus为系统
    发表于 03-20 09:01

    基于嵌入式Linux演示I2C设备调试

      I2C是嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备
    发表于 09-18 15:21 3次下载

    Linux设备驱动开发详解》第15章、LinuxI2C核心、总线与设备驱动

    Linux设备驱动开发详解》第15章、LinuxI2C核心、总线与设备驱动
    发表于 10-27 11:19 8次下载
    《<b class='flag-5'>Linux</b><b class='flag-5'>设备</b>驱动开发详解》第15章、<b class='flag-5'>Linux</b>的<b class='flag-5'>I2C</b>核心、总线与<b class='flag-5'>设备</b>驱动

    MSP430硬件I2C如何实现SMBus

    该应用报告描述了使用MSP430硬件I2C外围设备实现系统管理总线(SMBus)。
    发表于 05-08 09:34 18次下载
    MSP430硬件<b class='flag-5'>I2C</b>如何实现<b class='flag-5'>SMBus</b>

    基于嵌入式Linux下的I2C设备驱动的总体思路与框架设计

    由于I2C总线的通用性,Linux作为一款优秀的嵌入式操作系统,也必须要对其要有很好的支持。在Linux内核源码中对I2C总线的驱动是基于总线设备
    发表于 08-20 09:04 3741次阅读
    基于嵌入式<b class='flag-5'>Linux</b>下的<b class='flag-5'>I2C</b><b class='flag-5'>设备</b>驱动的总体思路与框架设计

    linux自带i2c工具使用

    I2C总线被全球超过50个公司的1000+个ICs所使用,已然是一个世界标准.另外,I2C总线与多种不同的控制总线是兼容的,比如SMBus(系统管理总线),PMBus(电源管理总线),
    发表于 05-13 09:23 3984次阅读

    LinuxI2C驱动架构

    1.     LinuxI2C驱动架构LinuxI2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE
    发表于 04-02 14:38 675次阅读

    I2C/SMBus地址转换器

    I2C/SMBus地址转换器
    发表于 04-20 10:44 5次下载
    <b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>地址转换器

    LTC4311:低压I2C/SMBus加速器数据表

    LTC4311:低压I2C/SMBus加速器数据表
    发表于 04-27 08:29 2次下载
    LTC4311:低压<b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>加速器数据表

    LTC4316:单I2C/SMBus地址转换器数据表

    LTC4316:单I2C/SMBus地址转换器数据表
    发表于 05-20 16:57 1次下载
    LTC4316:单<b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>地址转换器数据表

    I2C通信协议:了解I2C Primer、 PMBus和SMBus

    I2C Primer的基本特性和标准,并重点说明在通信实现过程中如何正确使用该协议。从I2C的基本原理出发,我们将介绍其变体子集——系统管理总线(SMBus)和电源管理总线(PMBus)——的可用性及二者的区别。这三种协议各有专
    的头像 发表于 06-15 15:29 5692次阅读
    <b class='flag-5'>I2C</b>通信协议:了解<b class='flag-5'>I2C</b> Primer、 PMBus和<b class='flag-5'>SMBus</b>

    I2C控制器驱动介绍

    控制器驱动 I2C 总线驱动重点是 I2C 适配器驱动,这里要用到两个重要的数据结构:i2c_adapter 和 i2c_algorithm
    的头像 发表于 07-22 15:38 1480次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>控制</b>器驱动介绍

    I2C子系统SW Architecture

    适配器(控制器)驱动,这里用到两个重要的数据结构:i2c_adapter 和 i2c_algorithm。其中,Linux 内核将 SOC 的 I
    的头像 发表于 07-22 16:01 945次阅读
    <b class='flag-5'>I2C</b>子系统SW Architecture