I2C之知(二)--I2C总线SDA\SCL以及开始终止条件

原创 2012年07月16日 22:51:42

        I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.每一个设备都由唯一的地址来识别(不管是微处理器、LCD驱动器、存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用.LCD驱动器可能只是个接收器,而存储器可以发送和接受数据.除了发送器和接收器,当传送数据时设备还可以作为主机或者从机.主机就是初始化数据传输和产生时钟信号的设备,在那个时刻,任何被寻址的设备都是从机.

        I2C总线是一个多主机总线.意味着可以连接多个可以控制总线的设备到总线上.主机通常是微控制器,我们可以考虑以下两个连接到总线上的微处理器之间的数据传输的情况.


        这个例子中突出了I2C总线中的主从和接收器-发送器之间的关系.注意这些关系不是固定的,仅依赖于当前时刻数据传输的方向.数据传输的过程如下:
1.假定微控制器A向微控制器B发送数据
微控制器A(主机)寻址微控制器B(从机)
微控制器A(主机-发送器)发送数据到微控制器B(从机-接收器)
微控制器A结束数据传输
2.假定微控制器A从微控制器B接收数据
微控制器A(主机)寻址微控制器B(从机)
微控制器A(主机-接收器)从微控制器B(从机-发送器)接收数据
微控制器A结束数据传输
甚至在这种情况下,主机(微控制器A)产生时序并终止传输.
在多个微控制器连接到I2C总线上时意味着可能有多个主机尝试初始化数据传输.为了避免由此引发的混乱,设计了一个仲裁机制.它依靠线与逻辑连接所有I2C接口道I2C总线.
如果有多个主机尝试发送信息到总线上,在其它产生"0"的情况下,首先产生"1"的主机会丢掷仲裁.仲裁时的时钟信号是用线与连接到SCL线的主机产生的时钟的同步结合.
I2C总线上的主机设备通常负责产生时钟,当传输数据时每个主机产生自己的时钟信号.只有在低速从设备控制时钟线或者仲裁发生时,主机的总线时钟才会被改变.
下表总结了I2C总线中的一些配置选择:

[1]这里也指被当作从机的主机
[2]时钟拉伸是部分从机的特性.如果在系统中没有从机可以拉伸时钟(将SCL拉低),主机一定需要设计处理程序
[3]'Bit banging'(软件模拟)多个主机系统应该考虑START字节

SDA和SCL信号
SDA和SCL都是双向线路,通过电流源或者上拉电阻连接到一个正向电压.(见下图)当总线空闲时,两条线都是高电平.连接到总线的设备的输出级必须是OD(漏极开路)或者OC(集电极开路)门才能执行线与功能.在标准模式下I2C总线传输数据可以达到100kb/s的速度,而在快速模式下达到400kb/s的速度,快速plus模式下是1Mb/s的速度,告诉模式下是3.4Mb/s的速度.总线的电容限制连接到总线上的接口数量.
对于一个单一主机的应用,如果总线上没有设备可以拉低时钟那么主机的SCL输出应该是push-pull(推挽)驱动设计.


SDA和SCL的逻辑电平
由于有各种不同的工艺的设备(CMOS NMOS 双极性)可以连接到I2C总线,低电平和高电平不是固定的而是依赖于相对应的VDD的电平.

数据有效性
在时钟为高期间SDA线上的数据必须稳定.只有在SCL线上的时钟信号低时数据线才可以改变高低状态.每个数据位传输都需要一个时钟产生.


开始和终止条件
所有的传输都由一个START(S)开始,有一个STOP(P)终止.
START条件是当SCL高时SDA从高到低
STOP条件是SCL高时SDA从低到高


开始条件和终止条件一直由主机产生.在开始条件后总线就处于忙状态.在终止条件后隔上一个固定时间总线就处于空闲状态.如果没有终止条件产生,而是一个重复的开始条件(Sr),那总线依旧是忙状态.这种情况下S和Sr在功能上是一样的.
如果连接到总线的设备包含了必须的接口硬件那么开始条件和终止条件的检测时很容易的.但是没有这样接口的微控制器在每个时钟周期内至少要采样两次SDA线来识别有没有电平变化.













相关文章推荐

gcc linker简要手册

名词解释: bfd (binary format description) : 是指GNU的bfd库项目,其目标是希望通过一种统一的接口来处理各种不同的目标文件。 Orphan sections ...
  • fdcp123
  • fdcp123
  • 2017年03月13日 17:36
  • 123

MATLAB弹出窗口定义操作函数

1、uigetfile():文件打开操作1.1:用法 [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,Defaul...
  • ouening
  • ouening
  • 2016年07月28日 19:24
  • 3022

I2C之知(二)--I2C总线SDA\SCL以及开始终止条件

I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.每一个设备都由唯一的地址来识别(不管是微处理器、LCD驱动器、存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用....

I2C之知(二)--I2C总线SDA\SCL以及开始终止条件

I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.每一个设备都由唯一的地址来识别(不管是微处理器、LCD驱动器、存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用....
  • dddxxxx
  • dddxxxx
  • 2016年11月16日 10:32
  • 252

Arduino I2C任意更换SDA SCL GPIO引脚

我的硬件是atmega2560的芯片。由于需求使用了LCD2004。虽然板子上也有硬件的SDA(20)和SCL(21)引脚。但是由于各种原因我只能使用被指定的45和47引脚。   ...
  • Maktubc
  • Maktubc
  • 2014年10月18日 10:53
  • 5851

I2C总线SCL信号无法正常拉高的问题

昨天板子起来以后,发现I2C总线不能正常工作。挂载到I2C总线上的设备出去RTC可以正常工作外,其他都“完蛋”了。于是抓波,发现SCL高电平无法达到3.3V的幅值。起初以为是上拉电阻太大了,于是更换为...
  • wxf_126
  • wxf_126
  • 2012年08月30日 00:06
  • 3344

I2c slave将SCL主动拉低

【原文 http://blog.sina.com.cn/s/blog_6582c5f30102v9ic.html】  I2C总线的SCL同步时钟脉冲一般都是由主控器发出作为串行数据的移位脉冲...

I2C总线学习之二

1.I2C协议    2条双向串行线,一条数据线SDA,一条时钟线SCL。    SDA传输数据是大端传输,每次传输8bit,即一字节。    支持多主控(multimastering),任何时间点只...

I2C总线学习终结,开始SPI总线的学习

I2C总线学习终结,开始SPI总线的学习          学习IIC总线近一个星期了,由浅及深,慢慢的理解了很多的东西。但一直对IIC总线协议的总线时序不甚理解。对数据位的传送,懵懵懂懂,知其然,...
  • ce123
  • ce123
  • 2011年10月21日 16:23
  • 5828

二、关于I2C和SPI总线协议

关于I2C和SPI总线协议 转载请注明出处:http://blog.csdn.net/ce123 IICvs SPI          现今,在低端数字通信应用领域,我们随处可见IIC (...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:I2C之知(二)--I2C总线SDA\SCL以及开始终止条件
举报原因:
原因补充:

(最多只允许输入30个字)