RT_thread I2C设备(手把手教学)
一、I2C介绍
I2C总线是一种半双工、双向二线制同步串行总线。
全双工:两条线可以同时收发; 半双工:两条线不可以同时收发。同步通信:同步通信就是主机在进行通信前要先建立同步,即要使用相同的时钟频率,发送方的发送频率和接受方的接受频率要同步。除了时间频率的不同外,异步通信和同步通信之间的区别还是发送数据的表示形式,异步通信一般发送单位是字符,同步通信发送单位是比特流(数据帧),但是这不是绝对的,异步通信有时也使用帧来通信。
I2C 总线传输数据时只需两根信号线:双向数据线 SDA、双向时钟线 SCL
二、连接方式:
注:通过上拉电阻拉高,两根线默认状态下都是高电平。
三、时序:
起始条件:时钟线(SCL)电平保持高电平不变,数据线(SDA)从高电平向低电平跳变;
停止条件:时钟线(SCL)电平保持高电平不变,数据线(SDA)从低电平向高电平跳变;
周期:两条红线之间的部分为一个周期,在SCL为高电平的时段,读取SDA的数据;
ACK(应答位):SDA低电平为应答信号。因为SDA默认是高电平信号,应答为将高电平拉低。
四、协议
1、单字节读:(读是1,写是0)
主机发送一个起始信号,然后发送一个七位的设备地址和一个写的方向位。因为一个设备有很多寄存器,要告诉设备读哪个寄存器。等从机设备应答(ACK)后,主机在发送一个八位的寄存器地址,从机在进行应答。之后,主机发送起始信号和七位的设备地址+读的方向位,从机给一个应答和八位的数据。最后,主机回一个非应答和停止信号。
2、多字节读
多字节读与单字节读的区别在于:读完一个字节之后主机给一个应答信号,直到主机发一个非应答和停止信号之后结束。
3、单字节写
前面部分和“读单字节”类似,主机先发送一个起始信号,然后发送一个七位的设备地址和一个写的方向位。从机给一个应答之后,主机发送一个寄存器地址(八位),从机进行应答。之后(有区别的部分),主机写入八位数据,从机进行应答,然后主机发送停止信号后结束。
4、多字节写:
多字节写与单字节写的区别在于:多字节写一个字节之后,从机进行应答,直到主机发送停止信号之后结束。
注:一般情况下地址都会递增,比如第一次写入的地址是01,那么下次就是02,接下来就03……
五、RTT访问I2C总线设备
1、查找 I2C 总线设备
2、数据传输
#define RT_I2C_WR 0x0000
#define RT_I2C_RD (1u << 0)struct rt_i2c_msg
{rt_uint16_t addr;//从机地址rt_uint16_t flags;//读1,写0rt_uint16_t len;//传递数据的长度rt_uint8_t *buf;//传递数据的首地址
};
rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,struct rt_i2c_msg msgs[],rt_uint32_t num)//num是指msgs[]数组的个数。
RT_thread I2C设备(手把手教学)相关推荐
- rtthread studio与正点原子apollo(9)--I2C设备之IO扩展
rtthread studio与正点原子apollo[9]--I2C设备之IO扩展 前言 一.I2C总线接口简介 二.PC8574简介 三.访问I2C设备 四.I2C设备使用实践 五.IIC设备实例 ...
- linux下i2c设备驱动程序,Linux I2C 设备驱动
I2C 设备驱动要使用 i2c_driver 和 i2c_client 数据结构并填充其中的成员函数.i2c_client 一般被包含在设备的私有信息结构体yyy_data 中,而 i2c_drive ...
- linux 脚本给设备节点权限,[Linux] I2C设备读写及文件节点创建
Linux Kernel Version:3.0.35 Platform:Freescale DSA2L 通过I2C读取VGA屏的EDID信息(主要是分辨率),解析后喂给CH7036芯片(LVDS转V ...
- Linux I2C子系统分析-I2C设备驱动
接下来以一个实际的例子来看I2C设备驱动,就以drivers/i2c/i2c-dev.c为例. 先看它的初始化和注销函数 [cpp] view plaincopy static int __init ...
- linux i2c 设备节点读写
最近需要操作24C02,封装了一下函数方便以后操作. 参考链接: https://my.oschina.net/handawei/blog/68526 http://blog.csdn.net/one ...
- 嵌入式Linux中I2C设备驱动程序的研究与实现
I2C是"Inter Integrated Circuit Bus"的缩写,中文译成"内部集成电路总线", 它是Philips 公司于20 世纪80 年代研发成 ...
- 启明云端分享|Linux系统下如何调试I2C设备
提示:Linux系统中,一些传感器通常挂载在I2C总线上,比如RTC和CSI等.我们在调试这些设备的时候,就需要了解Linux系统中操作I2C总线的方法.本文将详细介绍在Linux系统中如何调试I2C ...
- 用户空间访问I2C设备驱动
2012-01-11 15:33:43 标签:Linux I2C 字符设备 设备驱动 用户空间 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
- 手把手教你写Linux I2C设备驱动
手把手教你写Linux I2C设备驱动 标签:Linux 设备 驱动 详解 i2c 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http:/ ...
最新文章
- jquery.dragsort.js 实现拖拽过程遇到的问题
- python编程入门到实践 百度云-python网络爬虫从入门到实践pdf
- linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
- mysql中的count函数和sum函数如果条件不符合返回什么
- 移动Exchange2007 CCR邮箱存储路径
- 笨办法学python3_月底送书!入门Python都在学的“笨办法”,出进阶篇了!
- Caffarelli 关于自由边界正则性的论文C1
- android权限检查
- python json()是什么函数_python 处理 json 四个函数dumps、loads、dump、load的区别
- 商品管理系统数据库设计--SQL Server
- Windows 10 office开机自启白页关闭,只需三步轻松关闭(亲测可用)
- linux 锐捷 自动,Ubuntu下锐捷自动认证设置
- LTE相关协议2——下行峰值速率计算
- 三层交换 VLAN 互访配置
- ASR_intern_summary
- 秘宝 | 将体育赛事结合区块链 数字藏品新风向
- Gradle sync failed: No variants found for ‘:app‘. Check build files to ensure at least one varian
- 吴恩达机器学习 EX7 第二部分 主成分分析(PCA)
- 浮点数存储方式理解,浮点数和整数之间的转换
- Java基础语法(二)
热门文章
- Win32 Api函数
- [名词解释:竞业禁止]
- 关于加密技术分类的说明(密码学基础)
- 提高网站Alexa排名的正确方法
- Maven compile 编译后Error:(8,31) java: 程序包com.sun.istack.internal不存在 Error:(318,57) java: 找不到符号的解决办法
- 【程序员必备】免费常用API收藏
- 全文检索工具Lucene入门教程
- 三轴桁架机械手控制系统 用于数控车床自动上下料
- ​​巨头抱团、新锐崛起,短视频时代「本地生活服务」起硝烟
- POJ1151 Atlantis(线段树,扫描线,离散化,矩形面积并)