Linux I2C App 开发示例
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 开发示例相关推荐
- SharePoint 2013 APP 开发示例 (三)使用远程的web资源
在这个示例里我们将详细介绍 TokenHelper 类, 我们将看到它是怎么简单地从远程web站点访问SharePoint的.我们还将取到它的一些值.这将帮助我们理解连接是怎么被构造的,同时也方便我们 ...
- SharePoint 2013 APP 开发示例 系列
SharePoint 2013 APP 安全: SharePoint 2013 APP 开发示例 (一)List 读写 SharePoint 2013 APP 开发示例 (二)获取用户信息 Share ...
- SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
上个示例(SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API))是基于JavaScript,运行在web browser内去访问REST AP ...
- SharePoint 2013 APP 开发示例 (二)获取用户信息
这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的 SharePoint 2013 app: UserProfileTest. 3. 选 ...
- 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子Linux连载】第六十一章 Linux I2C驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- firefly-rk3288j开发板--linux I2C实验之eeprom驱动
firefly-rk3288j开发板–linux I2C实验之eeprom驱动 1 准备工作 开发板:aio-rk3288j SDK版本:rk3288_linux_release_20210304 下 ...
- linux I2C驱动(Linux驱动开发篇)
1.linux IIC驱动 由于裸机的驱动迎合驱动的分离和分层的思想,分为IIC主机驱动(接口驱动)和IIC设备驱动. 这种思想的好处,请看我写的另外一篇文章Linux驱动的分离和分层. 其中上面说的 ...
- STM32MP157驱动开发——Linux I2C驱动
相关文章:正点原子教程第四十章--Linux I2C驱动实验 0.前言 为了简化笔记的编写以及降低工作量,本节开始相关的基础知识部分通过引入原子哥的教材链接来完成,有兴趣的可以进入学习. 上一 ...
最新文章
- gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第一篇:安装配置gradle...
- Spring入门简介
- maven多个web模块进行合并
- SAP财务中国本土化报表
- 光有面罩不是能防护的
- Web Dev领域:2017精彩事件和 2018预测
- 树莓派通过网络共享USB设备
- CMSIS 记录与下载
- 电脑系统运行框代码大全
- 最大公因数、最小公倍数求法(C++)
- TCP传输慢问题分析
- html设计带图形的边框,css怎么设置图片的边框?
- python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
- webpack 打包时排除某些依赖模块
- MySQL中DML语言的插入语句、修改语句、删除语句(增删改)——笨蛋笔记4
- linux中 likely与unlikely
- 2022年湖北助理工程师职称发证单位是哪里呢?甘建二告诉你
- 主题:分享一个靠谱的免费论文查重网站
- matlab ezplot hod,MATLAB常用命令
- 程序咖:体验沉浸式学习,评测中提升你的职业技能