I2C协议总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

I2C协议总结串行总线I2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。I2C总线系统中,以共同挂接的I2C总线作为通信手段的每个器件均构成I2C总线的一个器件节点。根据节点是否带有智能,可将这些节点分为主器件节点和外围器件节点。主器件节点可作为主控器,用来对总线进行主动控制。在一次通信过程中,由主控器负责向总线上发送启动信号、同步时钟信号、被控器件地址码、重启动信号和停止信号等。而被控器(即受控器件)可分别由这两种节点充当。如果在系统中同时存在2个或2个以上的主器件节点企图控制总线,则形成总线冲突状态。由于I2C引入了同步时钟和总线仲裁机制,即使出现总线冲突也不会造成信息丢失。发生总线冲突时,为了避免信息丢失,需要进行总线仲裁以决定谁是主控器。总线仲裁是通过裁定SDA线上的控制权来解决的。时钟同步是连接到SCL线上的所有器件进行“线与”实现的。只要有一个器件向SCL输出低电平,SCL就为低电平。因此SCL线的低电平时间由时钟低电平期最长的器件决定,而高电平时间由时钟高电平期最短的器件决定,由此形成了时钟的同步。下图所示为一次完整的通信过程的时序。图1i2c总线数据传送时序(注:图中,SCL线上1~7位为7位地址码,第8位为读写位R\~D,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第2个数据字节。)如图所示,主控器在检测到总线空闲(数据线SDA和时钟线SCL同时处于高电平状态)时,首先发送一个启动信号S(在时钟线SCL保持高电平期间,数据线SDA上电平被拉低),它标志着一次数据传输的开始。之后主控器发送一个地址字节包括7位地址码和一个读写位。被控器收到地址字节后反馈一个应答信号ACK=0,主控器接收到ACK后开始发送第一个数据字节,被控器接收到第一个数据字节后,由反馈一个应答信号ACK=0。主控器收到应答信号后开始传送第二个数据字节。依次循环,主控器发送完数据后,就发送一个停止信号P(SCL保持高电平期间,SDA被释放,返回高电平),并释放总线,使得总线返回空闲状态。在通信过程应注意以下6点:1进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。并且每个字节传送时都是高位在前。2对于应答信号,ACK=0时为有效应答位,说明接收器已经成功接收到该字节,若为1则说明接受不成功。3如果被控器需要延迟下一个下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主控器进入等待状态。4主控器完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。它既作为前一次数据传输的结束,又作为后一次传输的开始。5总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。6在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为挂接在总线上的任一器件将SCL锁定在低电平即可。什么是I2C协议?什么是I2C协议?I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。1.I2C总线的特点(1)只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL(2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主发送器或主机接收器(3)它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏(4)串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达.4Mbit/s(5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整(6)连接到相同总线的IC数量只受到总线的最大电容400pF限制2.I2C总线术语的定义3.I2C协议总线信号时序分析3.1数据的有效性:SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。如图3.1I2C总线的位传输所示。图3.1I2C总线的位传输3.2起始和停止条件当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。当SCL线是高电平时,SDA线由低电平向高电平切换表示停止条件。如图3.2I2C起始和停止条件所示。图3.2起始和停止条件3.3总线空闲状态SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;3.4数据传输与应答信号ACK发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高),由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。如图3.3I2C总线响应。图3.3I2C总线响应首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。如图3.4I2C总线数据传输所示。图3.4I2C总线数据传输4.地址格式数据的传输遵循如图4.1完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/—W),0-表示发送数据(写),1-表示接收数据(读)。数据传输一般由主机产生的停止位(P)终止。但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。如图3.5I2C总线完整的数据传输。图3.5I2C总线完整的数据传输I2C协议在消费者电子电讯和工业电子中看上去不相关的设计里经常有很多相似的地方例如几乎每个系统都包括一些智能控制通常是一个单片的微控制器通用电路例如LCD驱动器远程I/O口RAMEEPROM或数据转换器面向应用的电路譬如收音机和视频系统的数字调谐和信号处理电路或者是音频拨号电话的DTMF发生器为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips开发了一个简单的双向两线总线实现有效的IC之间控制这个总线就称为InterIC或I2C总线现在Philips包括超过150种CMOS和双极性兼容I2C总线的IC可以执行前面提到的三种类型的功能所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C总线通讯这个设计概念解决了很多在设计数字控制电路时遇到的接口问题。下面是I2C总线的一些特征只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达3.4Mbit/s片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整连接到相同总线的IC数量只受到总线的最大电容400pF限制.符合I2C总线的IC不只帮助了设计者它们也使设备厂商得到很多益处因为简单的两线串行I2C总线将互联减到最小因此IC的管脚更少而且PCB的线路也减少结果使PCB更小和更便宜完全完整的I2C总线协议不需要地址译码器和其他胶合逻辑I2C总线的多主机功能允许通过外部连接到生产线快速测试和调整最终用户的设备符合I2C总线的IC提供小型和超小型以及DIL封装,甚至减少了IC的空间要求.这些只是一些益处.另外兼容I2C总线的IC通过允许简单地构造设备变量和保持设计是最新的简易升级功能增加了系统设计的灵活性.这样整个装置系列可以围绕一个基本的模型开发新设备的升级或者功能增强的模型,即扩展的存储器远程控制等等,可以简单地通过剪贴相应的IC到总线上产生,如果需要更大的ROM只需要从我们广泛的IC中选择一个有更大ROM的微控制器就可以了.由于新的IC要取代旧的增加新功能到装置或者提升它的性能,只要简单地从总线上移去过时的IC然后换上它的后续IC就可以了.I2C总线规范对于面向8位的数字控制应用譬如那些要求用微控制器的,要建立一些设计标准:一个完整的系统通常由至少一个微控制器和其他外围器件例如存储器和I/O扩展器组成系统中不同器件的连接成本必须最小执行控制功能的系统不要求高速的数据传输总的效益由选择的器件和互连总线结构的种类决定产生一个满足这些标准的系统需要一个串行的总线结构,尽管串行总线没有并行总线的数据吞吐能力,但它们只要很少的配线和IC连接管脚.总线不仅仅是互连的线,还包含系统通讯的所有格式和过程,串行总线的器件间通讯必须有某种形式的协议,避免所有混乱数据丢失和妨碍信息的可能性.快速器件必须可以和慢速器件通讯,系统必须不能基于所连接的器件,否则不可能进行修改或改进,应当设计一个过程决定哪些器件何时可以控制总线,而且如果有不同时钟速度的器件连接到总线必须定义总线的时钟源.所有这些标准都在I2C总线的规范中.术语描述发送器发送数据到总线的器件接收器从总线接收数据的器件主机初始化发送产生时钟信号和终止发送的器件从机被主机寻址的器件多主机同时有多于一个主机尝试控制总线但不破坏报文仲裁多主机同时尝试控制总线但只允许其一个控制总线并使报文不被破坏的过程同步两个或多个器件同步时钟信号的过程SDA和SCL都是双向线路都通过一个电流源或上拉电阻连接到正的电源电压,当总线空闲时这两条线路都是高电平.连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能.I2C总线上数据的传输速率在标准模式下可达100kbit/s在快速模式下可达400kbit/s在高速模式下可达3.4Mbit/s连接到总线的接口数量只由总线电容是400pF的限制决定。SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变.起始和停止条件在I2C总线中唯一出现的是被定义为起始S和停止P条件的情况其中一种情况是在SCL线是高电平时SDA线从高电平向低电平切换这个情况表示起始条件;当SCL是高电平时SDA线由低电平向高电平切换表示停止条件.起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被认为再次处于空闲状态.如果产生重复起始条件,而不产生停止条件总线会一直处于忙的状态.此时的起始条件和重复起始条件在功能上是一样的,如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便.但是没有这种接口的微控制器,在每个时钟周期至少要采样SDA线两次来判别有没有发生电平切换。传输数据笔记字节格式发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制.每个字节后必须跟一个响应位,首先传输的是数据的最高位MSB.如果从机要完成一些其他功能后,例如一个内部中断服务程序,才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态.当从机准备好接收下一个数据字节,并释放时钟线SCL后数据传输继续.在一些情况下可以用与I2C总线格式不一样的格式.例如兼容CBUS的器件,甚至在传输一个字节时,用这样的地址起始的报文可以通过产生停止条件来终止.此时不会产生响应.响应数据传输必须带响应,相关的响应时钟脉冲由主机产生.在响应的时钟脉冲期间发送器释放SDA线,在响应的时钟脉冲期间,接收器必须将SDA线拉低.使它在这个时钟脉冲的高电平期间保持稳定的低电平.当从机不能响应从机地址时,例如它正在执行一些实时函数不能接收或发送.从机必须使数据线保持高电平主机,然后产生一个停止条件终止传输或者产生重复起始条件,开始新的传输.如果从机接收器,响应了从机地址,但是在传

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功