I2C通讯协议

1、基本概念

主机 初始化发送,产生时钟信号和终止发送的器件

从机 被主机寻址的器件

发送器 发送数据到总线的器件

接收器 从总线接收数据的器件

多主机 同时有多于一个主机尝试控制总线 但不破坏报文

仲裁 是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程

同步 两个或多个器件同步时钟信号的过程

2、硬件结构

每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器。这种电路具有两个特点:

(1)由于 SDA、SCL 为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑; (2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟同步”和“总线仲裁”提供硬件基础。

3、时钟同步

如果从机希望主机降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主机,当主机在准备下一次传送发现SCL的电平被拉低时就进行等待,直至从机完成操作并释放SCL线的控制控制权。这样以来,主机实际上受到从机的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟同步,它解决了I2C总线的速度同步问题。

4、主机发送数据流程

(1)主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始

(2)主机接着发送一个命令字节。该字节由 7 位的外围器件地址(设备地址)和 1 位读写控制位 R/W组成(此时 R/W=0)

通常最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)

(3)相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)

(4)主机收到从机的应答信号后开始发送第一个字节的数据

(5)从机收到数据后返回一个应答信号 ACK

(6)主机收到应答信号后再发送下一个数据字节

(7)当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信。

注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。

I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲) 数据改变:SCL为低电平时,SDA线才能改变传输的bit

I2C开始和结束信号 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

 另外I2C的通信速率为100Kb,快速为400Kb

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

手把手教你 Spark 性能调优

0、背景 上周四接到反馈,集群部分 spark 任务执行很慢,且经常出错,参数改来改去怎么都无法优化其性能和解决频繁随机报错的问题。 看了下任务的历史运行情况,...

1.3K10
来自专栏嵌入式程序猿

带你走进飞思卡尔Kinetis Flashloader(5)

上节我们了解了Kinetis Flashloader支持的外设SPI和I2C,今天我们来看支持的外设UART和CAN UART外设 飞思卡尔Kinetis Fl...

2586
来自专栏java架构师

Hadoop总结篇之一------开篇

从今天开始新的系列:Hadoop总结篇 之前的hadoop学习篇由于是学习过程中随手记下来的一些内容,不具有系统性。所以在这个系列中,将凭着这段时间的研究心得,...

2525
来自专栏精讲JAVA

流计算框架 Flink 与 Storm 的性能对比

1. 背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm(以下简称“Sto...

2539
来自专栏Albert陈凯

流式大数据处理的三种框架:Storm,Spark和Samza

许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。 Apache Storm ...

2816
来自专栏Vamei实验室

协议森林05 我尽力 (IP协议详解)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。 在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP...

2019
来自专栏ImportSource

NoSQL分布式模型实现之一:Single Server

翻译内容: NoSQL Distilled 第四章 Distribution Models 作者简介: ? 本节摘要: 第四章我们主要说的是NoSQL运...

24510
来自专栏CSDN技术头条

流式大数据处理的三种框架:Storm,Spark和Samza

许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。 Apache Storm在S...

1908
来自专栏Golang语言社区

[go语言]吐槽:怎么样实现支持并发访问的数据集合更好?

在go语言里,提倡用信道通讯的方式来替代显式的同步机制。但是我发现有的时候用信道通讯方式实现的似乎也不是很好(暂不考虑效率问题)。 假设有一个帐号的集合,需要在...

4057
来自专栏软件开发 -- 分享 互助 成长

虚拟存储管理

程序局部性原理:基于大量的程序运行特征的观察发现在一段时间内,一个程序的执行往往是呈现高度的局部性。 表现在以下两个方面: 时间局部性:若一条指令被执行,那么不...

1796

扫描关注云+社区