Linux控制I2C/SMBus设备

2023-05-16

平台:树莓派 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

bilibili:科G栈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux控制I2C/SMBus设备 的相关文章

  • 安装Python时出错

    击中后 make install 我收到以下错误 usr bin install cannot create regular file usr local bin python2 6 Permission denied make altbi
  • gcc 中“-l”选项的放置

    我在放置时遇到一些问题 l使用时的选项gcc 这是一个用于重现问题的精简版本 t c include
  • OpenSSL 和 CryptoJS SHA256 加密转换

    我的问题是 OpenSSL 的新版本与 CryptoJS 的默认设置不兼容 openssl enc 用于基于密码的密钥派生的默认哈希值 1 1 0 中更改为 SHA256 而较低版本中更改为 MD5 https unix stackexch
  • 执行 grails/groovy 时,Linux 上没有可用的控制台输出

    当执行 groovy 脚本或 grails 应用程序时 没有可用的输出 输入 gt 只有一个清晰的控制台屏幕 即使不启动 X Window System 输出也是不可见的 我也尝试过 grailscompile plain output 也
  • 请求失败的错误:GLXBadDrawable (C++ bgfx)

    我试图用 glfw 和 bgfx 创建一个紫色窗口作为我的游戏引擎的起点 但是在启动二进制文件时它会抛出一个错误 我正在尝试创建紫色窗口 如下图所示 我正在使用 cmake 错误是 anuj fedora D C C c o build g
  • 为什么链接器要修改--defsym“绝对地址”

    目标 一个使用可执行文件中的函数 不导出符号 的共享库 Means gcc Wl defsym function 0x432238 手册页指出 defsym symbol expression Create a global symbol
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • 与 grep 类似地突出显示文本,但不过滤掉文本[重复]

    这个问题在这里已经有答案了 使用 grep 时 它将突出显示与正则表达式匹配的行中的任何文本 如果我想要这种行为 但同时让 grep 打印出所有行怎么办 快速浏览完 grep 手册页后 我发现一无所获 使用确认 看看它的 passthru此
  • mod_fcgid + PHP + apache 锁定

    我正在运行一个相当典型的 LAMP 堆栈 其中 PHP 通过 mod fcgid 运行 考虑到服务器收到的流量 我认为服务器处于 高负载 状态 存在一个间歇性问题 当访问依赖 PHP 的站点时 Apache 报告所有连接都处于 正在发送内容
  • 安装pipenv导致pip3无法使用

    我安装了pipenv using pip3 install pipenv 这给了我错误ImportError cannot import name main 为了解决这个错误我遵循这些说明 https stackoverflow com q
  • Gnu 时间和格式化输出

    我想使用 gnu time 来测量一些小 c 程序的运行时间 人 中写道 f FORMAT format FORMAT Use FORMAT as the format string that controls the output of
  • 在 systemd 服务文件内/内联添加 shell 命令

    我正在运行gunicorn通过 systemd 将服务器作为服务 这是示例service file Unit Description Gunicorn NGINX After network target Service User root
  • bcrypt_lib.node:未定义符号:node_module_register

    Error home george Desktop myProject node modules bcrypt build Release bcrypt lib node undefined symbol node module regis
  • 使用“touch”创建目录? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 1 在 A 目录中 find type f gt a txt 2 在 B 目录中 cat a txt while read FILENAMES do
  • 如何使用AWK从文件中连续输出行

    我有一个多行文件 我想连续输出文件的某些行 比如第一次 从第1行打印到第5行 下次 打印第2行到第6行 依此类推 我发现 AWK 是一个非常有用的函数 我尝试自己编写代码 但它什么也没输出 以下是我的代码 bin bash for n in
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • x86 平台中的 KVM 影子页表处理

    据我了解 在没有硬件支持来宾虚拟到主机物理地址转换的处理器上 KVM 使用影子页表 当来宾操作系统修改其页表时 会构建和更新影子页表 硬件中有没有专门的指令 以x86为参考 来修改页表 除非有特殊说明 否则不会对VMM 造成陷阱 Linux
  • 如何有效地将许多文件移动到新服务器?

    我正在更换托管提供商 需要将数百万个上传的文件传输到新服务器 所有文件都位于同一目录中 是的 你读对了 过去我这样做过 压缩源服务器中的所有文件 scp到新服务器的 zip Unzip Move directory to appropria
  • Plink 通过 C# 返回不需要的字符

    通过 C 使用 Plink 时 我在结果前后收到不需要的字符 Command ls l informatica tgtdynamicparams out grep vaulttest grep Sep 1 awk print 9 sort

随机推荐

  • 人脸检测和行人检测2:YOLOv5实现人脸检测和行人检测(含数据集和训练代码)

    人脸检测和行人检测2 xff1a YOLOv5实现人脸检测和行人检测 含数据集和训练代码 目录 人脸检测和行人检测2 xff1a YOLOv5实现人脸检测和行人检测 含数据集和训练代码 1 前言 2 人脸检测和行人检测数据集说明 xff08
  • 人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测)

    人脸检测和行人检测3 xff1a Android实现人脸检测和行人检测检测 含源码 xff0c 可实时检测 目录 人脸检测和行人检测3 xff1a Android实现人脸检测和行人检测 含源码 xff0c 可实时检测 1 前言 2 人脸检测
  • 人脸检测和人体检测4:C++实现人脸检测和人体检测(含源码,可实时检测)

    人脸检测和人体检测4 xff1a C 43 43 实现人脸检测和人体检测 含源码 xff0c 可实时检测 目录 人脸检测和人体检测4 xff1a C 43 43 实现人脸检测和人体检测 含源码 xff0c 可实时检测 1 前言 2 人脸检测
  • Linux c socket 实现http

    include lt stdio h gt include lt sys socket h gt include lt sys types h gt include lt time h gt include lt errno h gt in
  • 跌倒检测和识别1:跌倒检测数据集(含下载链接)

    跌倒检测和识别1 xff1a 跌倒检测数据集 含下载链接 目录 跌倒检测和识别1 xff1a 跌倒检测数据集 含下载链接 1 前言 2 跌倒姿态 xff1a 站立 弯腰 蹲下 躺下 3 跌倒检测数据集 xff1a xff08 1 xff09
  • 跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码)

    跌倒检测和识别2 xff1a YOLOv5实现跌倒检测 含跌倒检测数据集和训练代码 目录 跌倒检测和识别2 xff1a YOLOv5实现跌倒检测 含跌倒检测数据集和训练代码 1 前言 2 跌倒检测数据集说明 xff08 1 xff09 跌倒
  • 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别3 xff1a Android实现跌倒检测 含源码 xff0c 可实时跌倒检测 目录 跌倒检测和识别3 xff1a Android实现跌倒检测 含源码 xff0c 可实时跌倒检测 1 前言 2 跌倒检测数据集说明 3 基于YO
  • 跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

    跌倒检测和识别4 xff1a C 43 43 实现跌倒检测 含源码 xff0c 可实时跌倒检测 目录 跌倒检测和识别4 xff1a C 43 43 实现跌倒检测 含源码 xff0c 可实时跌倒检测 1 前言 2 跌倒检测模型 xff08 Y
  • 接口测试工具:Postman

    无论是接口调试还是接口测试 xff0c postman都算的上很优秀的工具 xff0c 好多接口测试平台 接口测试工具框架的设计也都能看到postman的影子 xff0c 我们真正了解了这款工具 xff0c 才可以在这个基础上进行自己的设计
  • ROS实验笔记之——move_base_simple/goal

    本博文打算通过节点发布导航的坐标让机器人自动移动到目标点 通过自定义节点来实现导航功能 nbsp 目录 创建仿真环境 编写导航发布者 move base msgs MoveBaseActionGoal Message 实现代码 参考资料 n
  • ROS实验笔记之——自主搭建四旋翼无人机

    最近搭建了一台小的四旋翼无人机 xff0c 本博文记录一下搭建的过程以及一些问题 请问我博客就记录了自己做实验的搭建的飞机有什么问题 xff1f xff1f xff1f 目录 组装 飞行前准备 试飞 组装 首先是一系列的散装原件 到最后搭建
  • ROS实验笔记之——基于l515激光相机的FLVIS与MLMapping

    之前博客 ROS实验笔记之 VINS Mono在l515上的实现 在l515上实现了vins xff0c 博客 ROS实验笔记之 SLAM无人驾驶初入门 配置flvis并跑了对应的kitti数据集 本博文在l515上先实现flvis然后再用
  • Chapter 2. ROS 创建和编译功能包

    1 创建ROS功能包 使用catkin create pkg命令来创建一个新的catkin程序包 首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下 xff1a ros workspace span c
  • linux ulimit命令用法解析

    以下内容转载自 xff1a http www linuxidc com Linux 2012 10 72782 htm Linux对于每个用户 xff0c 系统限制其最大进程数 为提高性能 xff0c 可以根据设备资源情况 xff0c 设置
  • 机体坐标系的角速度分量

    一 角速度分量 机体坐标系的三个角速度分量 xff0c 是机体坐标系相对于地面坐标系的转动角速度在机体坐标系各轴上的分量 其中 xff1a 角速度 xff50 xff0c 与机体轴 xff58 重合一致 xff1b 角速度 xff51 xf
  • 使用Realsense测试aruco_ros包

    01 准备工作 安装realsense ros安装aruco ros span class token builtin class name cd span ur ws src span class token function git s
  • DIY遥控船(一):电调和舵机的驱动[使用STC89C52]

    在动力模型中 xff0c 有两样东西是最基本 最必要的 xff0c 即舵机和无刷电机 舵机提供转动特定角度的功能 xff0c 而无刷电机需要由电调 xff0d xff0d 电子调速器驱动 舵机 舵机又叫伺服电机 xff0c 可以按照输入的指
  • GD32VF103之CRC

    在GD32VF103内部有一个CRC 循环冗余校验计算单元 xff0c 使用它可以对数据的完整性和正确性进行校验 xff0c 比如固件的完整性和正确性校验 通信数据的校验等 它使用固定的32位多项式 xff1a 0x4C11DB7 xff1
  • GD32VF103之GPIO最小配置

    longan nano是Sipeed xff08 矽速科技 xff09 推出的开发板 xff0c 使用兆易创新的gd32vf103cbt6芯片 xff0c 该芯片是基于芯来科技的Nuclei Bumblebee处理器的32位通用微控制器 x
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基