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线来识别有没有电平变化.













HDMI中SCL和SDA两个引脚的作用

高清晰度多媒体界面(英语:High Definition Multimedia Interface,简称HDMI) Pin Pin定义 1 Hot Plug Detect 2 Utili...
  • huangyangquan
  • huangyangquan
  • 2017年08月22日 17:34
  • 492

I2c slave将SCL主动拉低

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

i2c 相关知识总结(转)

一. 技术性能:     工作速率有100K和400K两种;     支持多机通讯;     支持多主控模块,但同一时刻只允许有一个主控;           由数据线SDA和时钟SCL构成的...
  • hygzxf
  • hygzxf
  • 2013年12月19日 15:41
  • 37372

Arduino I2C任意更换SDA SCL GPIO引脚

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

很清晰的解读i2c协议

很清晰的解读i2c协议。 I2C协议:2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering...
  • lingfeng5
  • lingfeng5
  • 2017年06月17日 02:15
  • 2944

简单介绍I2C总线

第7章  I2C 总线简介 ZLG7290B与微控制器的接口形式是I2C串行总线,因此有必要简要地介绍一下I2C总线协议标准。第8章还给出了用C51编写的I2C总线软件包,以供参考学习。 7.1 I2...
  • junyeer
  • junyeer
  • 2015年06月13日 16:51
  • 4736

I2C从机挂死分析和解决方法

I2C几乎是嵌入系统中最为通用串行总线,MCU周边的各种器件只要对速度要求不高都可以使用。优点是兼容性好(几乎所有MCU都有I2C主机控制器,没有也可以用IO模拟),管脚占用少,芯片实现简单。I2C协...
  • Stephen_yu
  • Stephen_yu
  • 2017年04月07日 15:42
  • 1553

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

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

【笔记】ARM裸机程序开发_part5

吐槽~天啦噜真是累哭了,以前不会想到排版这么累的。 以下是ARM裸机的最后一部分12.1 I2C I2C: 物理结构非常简单,只有两根线。SCL+SDASCL是时钟线,传输CLK信号,一般是...
  • qq_29068607
  • qq_29068607
  • 2017年12月28日 21:56
  • 138

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

I2C只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据.每一个设备都由唯一的地址来识别(不管是微处理器、LCD驱动器、存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用....
  • dddxxxx
  • dddxxxx
  • 2016年11月16日 10:32
  • 320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:I2C之知(二)--I2C总线SDA\SCL以及开始终止条件
举报原因:
原因补充:

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