i2c总线包含哪些信号协议起始信号

什么是I2C协议?
I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。
&1. I2C总线的特点
(1)只要求两条总线线路 一条串行数据线SDA 一条串行时钟线SCL&
(2) 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主发送器或主机接收器&
(3)它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏&
(4)串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达.4Mbit/s&
(5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
(6) 连接到相同总线的IC数量只受到总线的最大电容400pF 限制
I2C协议总线信号时序分析
1 .数据的有效性:
SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在 SCL线的时钟信号是低电平时才能改变。
2 .起始和停止条件
当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。
当SCL线是高电平时,SDA线由低电平向高电平切换表示停止条件。如图3.2 I2C起始和停止条件所示。
3. 总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;
4 .数据传输与应答信号ACK
发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高), 由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。如图3.3 I2C总线响应。
首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节, 可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。如图3.4 I2C总线数据传输所示。
4. 地址格式
数据的传输遵循如图4.1 完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/ & W),0-表示发送数据(写), 1-表示接收数据(读)。数据传输一般由主机产生的停止位(P)终止。但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机, 而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。如图3.5 I2C总线完整的数据传输。
现代电子系统中,有为数众多的IC需要进行相互之间以及与外界的通信。为了提供硬件的效率和简化电路的设计, PHILIPS开发了一种用于内部IC控制的简单的双向两线串行总线I2C。I2C总线支持任何一种IC制造工艺, 并且PHILIPS和其他厂商提供了种类非常丰富的I2C兼容芯片。作为一个专利的控制总线,I2C已经成为世界性的工业标准。 &
每个器件都有一个唯一的地址,而且可以是单接收的器件(例如:LCD驱动器)或者可以接收也可以发送的器件(例如:存储器)。 发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。I2C是一个多主总线,即它可以由多个连接的器件控制。 基本的I2C总线规范于20年前发布,其数据传输速率最高为100Kbits/s,采用7位寻址。但是由于数据传输速率和应用功能的迅速增加, I2C总线也增强为快速模式(400Kbits/s)和10位寻址以满足更高速度和更大寻址空间的需求。 I2C总线始终和先进技术保持同步,但仍然保持其向下兼容性。并且最近还增加了高速模式,其速度可达3.4Mbits/s。 它使得I2C总线能够支持现有以及将来的高速串行传输应用,例如EEPROM和Flash存储器。
请问:为何IIC传送过程中,其地址(slaver address)是7bits? IIC的书上说:送入SDA中的每个字节长度必须是8-bits,在IIC总线上,START信号后,一个从地址(slave address)被传送, 在该字节中的bit7是一个读写选择信号,&0&表示写,&1&表示读。但在实际中传送的地址是8bits的,如在我们门的一个系统中EDID的 地址是0xA0,这种矛盾怎么解释?请e-mail:xintan_
你可能还没理解到,因为第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。 首先,你要知道:常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位。 如格式如下:
& D7 D6 D5 D4 D3 D2 D1 D0 1-器件类型由:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。
2-用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合 电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。 3-最低一位就是R/W位。这位不用我多说了。 这没什么矛盾可解释,你再看看书本和多动脑子我想你很快就会明白的。
经你这么一说,我大概明白了,谢谢! 按你的说法:在IIC传送中,先传送最高位D7,我现在明白为何在我们的系统中EDID有两个地址是0xA0/0xA1,一个是读地址,一个是写地址,我以前还真没搞懂
您好,有关I2C的传送又来请教你了。
1st、 在我们系统的主芯片与MStar芯片的通信过程中,传送的第一个数据的最高位总是为低电平,比如我向某寄存器中先写一个数(0xff), 再读取该寄存器,读出的数据的最高位总是为&0&(0x7f)。不过这种错误仅仅在第一个数据出现,以后的数据就正确了。
2nd、 在我们系统的主芯片与EEPROM芯片的通信过程中,情况就更糟糕,不管向memory Addr 中写什么数据,然后再读取 这个memory Addr中数据,出来的数据总是&0xff&(note:slaver Addr正确,芯片的电源ok,也没有写保护WP=0),我实验了两块板子, 不可能这两块板子的EEPROM都坏了吧!程序(与1st中的)是一样的,只是slaver Addr发生改变。
从你的资料看来,我无法总判定是那里或什么问题;估计很大程序上是你的程序问题。 要知道,主机向从访问时。 & 1-先向总线发出芯片地址 & 2-如果有芯片地址正确的芯片,会产生一个SDA上应答。 & 3-接着主机再发出应答过的芯片发出将要所进行操作的片内地址。 & 4-芯片地址正确的芯片,会再产生一个SDA上应答。 & 5-此时如果是读操作,从芯片将输出数据到SDA上。如果是写操作,主机会将数据写到SDA上。 & 就这样可以完成了一个读或写的操作。当然这里面还开始和停止位这些动作。 & 对以此类的分析,我们一般建议学生使用我站销售的虚拟示波器来做分析,用ezSDO虚拟示波器可以方便地为IIC总线进行分析, & 因为有较深圳的波动存储功能。捕获回来的波形后,可以进行分析比较等动作。 & 以下就是一个实例波形,有关详细看查看本论坛上的虚拟示波器销售专区中的文章
阅读(...) 评论()IIC总线通讯协议详解_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
IIC总线通讯协议详解
上传于||暂无简介
大小:346.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢16082人阅读
I2C总线学习(13)
I2C总线信号时序总结
总线空闲状态&
  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
  在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。
重启动信号
  在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动Sr信号时序。重启动信号Sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。
重启动信号
  在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动Sr信号时序。重启动信号Sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。
  在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。
&&&&&&&不是在数据有效性中规定在SDA只能在SCL的低电平的时候变化,为何STAR,STOP不一样?首先STAR和STOP不是数据,所以可以不遵守数据有效性中的规定,其它数据都遵守,而STAR和STOP“不遵守”导致STAR和STOP更容易被识别。这样不是不遵守而是更有优势。
&&&&起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被认为再次处于空闲状态。
&&&&如果产生重复起始(Sr) 条件而不产生停止条件,总线会一直处于忙的状态。此时的起始条件(S)和重复起始(Sr) 条件在功能上是一样的。&
&&&&如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。但是没有这种接口的微控制器在每个时钟周期至少要采样SDA 线两次来判别有没有发生电平切换。
数据位传送
  在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态。逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压VDD(当使用独立电源时)。数据位的传输是边沿触发。
  I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。 对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。
插入等待时间&
  如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线SCL电平拉低并且保持,使主控器进入等待状态。一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。带有CPU的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把SCL线钳位在低电平上,直到处理妥当后才释放SCL线,进而使主控器继续后续数据字节的发送。
总线封锁状态&
  在特殊情况下,如果需要禁止所有发生在I2C总线上的通信活动,封锁或关闭总线是一种可行途径,只要挂接于该总线上的任意一个器件将时钟线SCL锁定在低电平上即可。
总线竞争的仲裁&
&&&&&&&&总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。
&&&&&&&& 为何识别到“0”将丢失仲裁呢?因为对于OD门,只能驱动到低电平,释放总线只能通过不驱动总线释放,停止驱动即产生“1”,但是发现总线还是“0”,这说明还有主机在跟自己竞争总线使用权,自己线驱动到“1”,确检测到“0”,那代表自己已经失去了仲裁。
主机只能在总线空闲的时侯启动传送。两个或多个主机可能在起始条件的最小持续时间tHD;STA&内产生一个起始条件,结果在总线上产生一个规定的起始条件。当SCL&线是高电平时,仲裁在SDA&线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。然后,进一步获得其的判定条件:仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假设主机是发送器),或者比较响应位(假设主机是接收器)。I2C&总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。在串行传输过程中时,一旦有重复的起始条件或停止条件发送到I2C&总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。&此外,如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器件。那么,丢失仲裁的主机必须立即切换到它的从机模式。I2C&总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。
& & & & & & & & & & & & &
上图显示了两个主机的仲裁过程当然可能包含更多的内容由连接到总线的主机数量决定此时产生DATA1 的主机的内部数据电平与SDA 线的实际电平有一些差别如果关断数据输出这就意味着总线连接了一个高输出电平这不会影响由赢得仲裁的主机初始化的数据传输。
时钟信号的同步
&&&&&&&&& 在I2C总线上传送信息时的时钟同步信号是由挂接在SCL线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1818129次
积分:23962
积分:23962
排名:第181名
原创:342篇
转载:29篇
评论:931条
文章:15篇
阅读:102509
文章:34篇
阅读:355565
文章:14篇
阅读:48990
文章:62篇
阅读:541402博客访问: 627509
博文数量: 203
博客积分: 2743
博客等级: 少校
技术积分: 3942
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
I2C总线协议 &&
16:39:25|&&分类:
阅读(1727) | 评论(0) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 i2c总线协议详解 的文章

 

随机推荐