2019独角兽企业重金招聘Python工程师标准>>>

1 , 头文件

/linux/i2c-dev.h

2 , 打开文件,请看示例代码

int file;int adapter_nr = 1; /* I2C适配器编号 */char filename[20];snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);file = open(filename, O_RDWR);if (file < 0) {/* 打开失败 */exit(1);
}

3 , 指定I2C从设备地址

int addr = 0x40; /* I2C 从机地址 */if (ioctl(file, I2C_SLAVE, addr) < 0) {/* 打开失败 */exit(1);
}

4 , 使用SMBUS API 访问设备

5 , SMBUS 详细接口时序说明

标记符 长度 说明
S 1 bit I2C启动
P 1 bit I2C停止
Rd/Wr 1 bit 控制字中的读写标志位,读操作为1,写操作为0
A, NA 1 bit 应答标志
Addr 7 bits 7位I2C地址
Data 8 bits 字节数据
Comm 8 bits 命令字节,可理解为I2C设备寄存器地址
[..] N char I2C设备返回的数据

6  , 相关接口及相应时序说明

【1】__s32 i2c_smbus_write_quick(int file, __u8 value);
发送一个写控制字,可用于测试I2C设备是否存在。
S Addr Rd [A] [Data] NA P

【2】__s32 i2c_smbus_read_byte(int file);
发送一个读控制字,并从I2C设备中读取一个字节。
S Addr Rd [A] [Data] NA P

【3】__s32 i2c_smbus_write_byte(int file, __u8 value);
发送一个写控制字,并向I2C设备中写入一个字节。
S Addr Wr [A] Data [A] P

【4】__s32 i2c_smbus_read_byte_data(int file, __u8 command);
向I2C设备发送一个写控制字+控制指令(寄存器地址),再发送一个读控制字,此时I2C从设备内部的读写指针转移到指定的位置,并返回一个字节,最后返回一个无应答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P

【5】__s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
向I2C设备发送一个写控制字+控制指令(寄存器地址),紧接着发送指令内容(寄存器内容,单字节)。
S Addr Wr [A] Comm [A] Data [A] P

【6】__s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 *values);
向I2C设备发送一个写控制字+控制指令(寄存器地址),再发送一个读控制字,此时I2C从设备内部的读写指针转移到指定的位置,并连续返回多个字节,I2C主机读取到一定数量字节内容之后发送无应答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P

【7】__s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, __u8 length, __u8 *values);
向I2C设备发送一个写控制字+控制指令(寄存器地址),接着发送发送指令内容(寄存器内容,多字节)
S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P

【注意点1】
这些函数如果返回-1代表操作失败。在一些具有写功能的函数中,返回0代表操作成功,在具有读功能的函数中,返回读取的字节数(除i2c_smbus_read_block_data)。读块(block)操作时不应超过32个字节。

转载于:https://my.oschina.net/hanshubo/blog/3013458

Linux I2C App 开发示例相关推荐

  1. SharePoint 2013 APP 开发示例 (三)使用远程的web资源

    在这个示例里我们将详细介绍 TokenHelper 类, 我们将看到它是怎么简单地从远程web站点访问SharePoint的.我们还将取到它的一些值.这将帮助我们理解连接是怎么被构造的,同时也方便我们 ...

  2. SharePoint 2013 APP 开发示例 系列

    SharePoint 2013 APP 安全: SharePoint 2013 APP 开发示例 (一)List 读写 SharePoint 2013 APP 开发示例 (二)获取用户信息 Share ...

  3. SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)

    上个示例(SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API))是基于JavaScript,运行在web browser内去访问REST AP ...

  4. SharePoint 2013 APP 开发示例 (二)获取用户信息

    这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的  SharePoint 2013 app: UserProfileTest. 3. 选 ...

  5. 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  6. 【正点原子Linux连载】第六十一章 Linux I2C驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  7. firefly-rk3288j开发板--linux I2C实验之eeprom驱动

    firefly-rk3288j开发板–linux I2C实验之eeprom驱动 1 准备工作 开发板:aio-rk3288j SDK版本:rk3288_linux_release_20210304 下 ...

  8. linux I2C驱动(Linux驱动开发篇)

    1.linux IIC驱动 由于裸机的驱动迎合驱动的分离和分层的思想,分为IIC主机驱动(接口驱动)和IIC设备驱动. 这种思想的好处,请看我写的另外一篇文章Linux驱动的分离和分层. 其中上面说的 ...

  9. STM32MP157驱动开发——Linux I2C驱动

    相关文章:正点原子教程第四十章--Linux I2C驱动实验 0.前言   为了简化笔记的编写以及降低工作量,本节开始相关的基础知识部分通过引入原子哥的教材链接来完成,有兴趣的可以进入学习.   上一 ...

最新文章

  1. gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle...
  2. Spring入门简介
  3. maven多个web模块进行合并
  4. SAP财务中国本土化报表
  5. 光有面罩不是能防护的
  6. Web Dev领域:2017精彩事件和 2018预测
  7. 树莓派通过网络共享USB设备
  8. CMSIS 记录与下载
  9. 电脑系统运行框代码大全
  10. 最大公因数、最小公倍数求法(C++)
  11. TCP传输慢问题分析
  12. html设计带图形的边框,css怎么设置图片的边框?
  13. python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
  14. webpack 打包时排除某些依赖模块
  15. MySQL中DML语言的插入语句、修改语句、删除语句(增删改)——笨蛋笔记4
  16. linux中 likely与unlikely
  17. 2022年湖北助理工程师职称发证单位是哪里呢?甘建二告诉你
  18. 主题:分享一个靠谱的免费论文查重网站
  19. matlab ezplot hod,MATLAB常用命令
  20. 程序咖:体验沉浸式学习,评测中提升你的职业技能

热门文章

  1. PST转换软件 v6.3
  2. spring mysql事物级别_mysql事务级别和spring中应用
  3. 微商分销代理商城源码-代理等级和升级条件
  4. Spring Boot最新版集成邮件发送功能大全
  5. Spring Boot集成Redis缓存之注解方式
  6. Win7系统忘记登入密码的解决方法
  7. google ads 黑名单目录
  8. ADBannerView 的基本使用方法
  9. self-trainning, co-trainning
  10. sql中left join后用on还是where