I2C总线协议及工作原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I2C总线【2 】协定及工作道理I2C总线协定及工作道理
一.概述
1.I2C总线只有两根双向旌旗灯号线.一根是数据线SDA,另一根是时钟线SCL.
SCL:上升沿将数据输入到每个EEPROM器件中;降低沿驱动EEPROM器件输出数据.(边沿触发)
SDA:双向数据线,为OD门,与其它随意率性数量的OD与OC门成"线与"关系.
I2C总线经由过程上拉电阻接正电源.当总线余暇时,两根线均为高电平(SDL=1;SCL=1).连到总线上的任一器件输出的低电平,都将使总线的旌旗灯号变低,即各器件的SDA及SCL都是线“与”关系.
2.主装备与从装备
体系中的所有外围器件都具有一个7位的"从器件专用地址码",个中高4位为器件类型,由临盆厂家制订,低3位为器件引脚界说地址,由应用者界说.主控器件经由过程地址码树立多机通讯的机制,是以I2C总线省去了外围器件的片选线,如许无论总线上挂接若干个器件,其体系仍然为简约的二线构造.终端挂载在总线上,有主端和从端之分,主端必须是带有CPU的逻辑模块,在统一总线上统一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容 400pF的限制.
主端重要用来驱动SCL line;
从装备对主装备产生响应;
二者都可以传输数据,但是从装备不能提议传输,且传输是受到主装备掌握的.
二、协定
1.余暇状况I2C总线总线的SDA和SCL两条旌旗灯号线同时处于高电日常平凡,划定为总线的余暇状况.此时各个器件的输出级场效应管均处在截止状况,即释放总线,由两条旌旗灯号线各自的上拉电阻把电平拉高.
2.肇端位与停滞位的界说:
肇端旌旗灯号:当SCL为高时代,SDA由高到低的跳变;启动旌旗灯号是一种电平跳变时序旌旗灯号,而不是一个电平旌旗灯号.
停滞旌旗灯号:当SCL为高时代,SDA由低到高的跳变;停滞旌旗灯号也是一种电平跳变时序旌旗灯号,而不是一个电平旌旗灯号.
肇端和终止旌旗灯号都是由主机发出的,在肇端旌旗灯号产生后,总线就处于被占用的状况;在终止旌旗灯号产生后,总线就处于余暇状况.
吸收器件收到一个完全的数据字节后,有可能须要完成一些其它工作,如处理内部中止办事等,可能无法连忙吸收下一个字节,这时吸收器件可以将SCL线拉成低电平,从而使主机处于等待状况.直到吸收器件预备好吸收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以中断进行.
3.ACK
发送器每发送一个字节,就在时钟脉冲9时代释放数据线,由吸收器反馈一个应答旌旗灯号.
应答旌旗灯号为低电日常平凡,划定为有用应答位(ACK简称应答位),表示吸收器已经成功地吸收了该字节;应答旌旗灯号为高电日常平凡,划定为非应答位(NACK),一般表示吸收器吸收该字节没有成功.对于反馈有用应答位ACK的请求是,吸收器在第9个时钟脉冲之前的低电平时代将SDA线拉低,并且确保在该时钟的高电平时代为稳固的低电平.
假如吸收器是主控器,则在它收到最后一个字节后,发送一个NACK旌旗灯号,以通知被控发送器停滞数据发送,并释放SDA线,以便主控吸收器发送一个停滞旌旗灯号P.
如下图逻辑剖析仪的采样成果:释放总线后,假如没有应答旌旗灯号,sda应当一向中断为高电平,但是如图中蓝色虚线部分所示,它被拉低为低电平,证实收到了应答旌旗灯号.这里面给我们的两个信息是:1)吸收器在SCL的上升沿到来之前的低电平时代拉低SDA;2)应答旌旗灯号一向保持到SCL的降低沿停滞;正如前文红色标识所指出的那样.
4.数据的有用性:
I2C总线进行数据传送时,时钟旌旗灯号为高电平时代,数据线上的数据必须保持稳固,只有在时钟线上的旌旗灯号为低电平时代,数据线上的高电平或低电平状况才许可变化.
5.数据的传送:
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步掌握),即在SCL串行时钟的合营下,在SDA上逐位地串行传送每一位数据.数据位的传输是边沿触发.
工作进程
总线上的所有通讯都是由主控器激发的.在一次通讯中,主控器与被控器老是在扮演着两种不同的脚色.
1.主装备向从装备发送数据
主装备发送肇端位,这会通知总线上的所有装备传输开端了,接下来主机发送装备地址,与这一地址匹配的slave将中断这一传输进程,而其它slave将会疏忽接下来的传输并等待下一次传输的开端.主装备寻址到从装备后,发送它所要读取或写入的从装备的内部存放器地址; 之后,发送数据.数据发送完毕后,发送停滞位.(这段看不懂就别看了,没什么用)写入进程如下:
发送肇端位
1)发送从装备的地址和读/写选择位;释放总线,等到EEPROM拉低总线进行应答;假如E EPROM吸收成功,则进行应答;若没有握手成功或者发送的数据错误时EEPROM不产生应答,此时请求重发或者终止.
2)发送想要写入的内部存放器地址;EEPROM对其发出应答;
3)发送数据
4)发送停滞位.
5)EEPROM收到停滞旌旗灯号后,进入到一个内部的写入周期,精确须要10ms,此间任何操作都不会被EEPROM响应
具体:
须要解释的是:①主控器经由过程发送地址码与对应的被控器树立了通讯关系,而挂接在总线上的其它被控器固然同时也收到了地址码,但因为与其自身的地址不相相符,是以提前退出与主控器的通讯;
2.主控器读取数据的进程:
读的进程比较庞杂,在从slave读出数据前,你必须先要告知它哪个内部存放器是你想要读取的,是以必须先对其进行写入(dummy write):
1)发送肇端位;
2)发送slave地址+write bit set;
3)发送内部存放器地址;
4)从新发送肇端位,即restart;
5)从新发送slave地址+read bit set;
6)读取数据
主机吸收器在吸收到最后一个字节后,也不会发出ACK旌旗灯号.于是,从机发送器释放S DA线,以许可主机发出P旌旗灯号停滞传输.
7)发送停滞位
具体:
2.数据传送格局
(1)字节传送与应答
每一个字节必须保证是8位长度.数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须追随一位应答位(即一帧共有9位).
因为某种原因从机不对主机寻址旌旗灯号应答时(如从机正在进行及时性的处理工作而无法吸收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止旌旗灯号以停滞总线的数据传送.
假如从机对主机进行了应答,但在数据传送一段时光后无法中断吸收更多的数据时,从机可以经由过程对无法吸收的第一个数据字节的“非应答”通知主机,主机则应发出终止旌旗灯号以停滞数据的中断传送.
当主机吸收数据时,它收到最后一个数据字节后,必须向从机发出一个停滞传送的旌旗灯号.这个旌旗灯号是由对从机的“非应答”来实现的.然后,从机释放SDA线,以许可主机产生终止旌旗灯号.
(2)数据帧格局
I2C总线上传送的数据旌旗灯号是广义的,既包括地址旌旗灯号,又包括真正的数据旌旗灯号.
在肇端旌旗灯号后必须传送一个从机的地址(7位),第8位是数据的传送偏向位(R/),用“0”表示主机发送数据(T),“1”表示主机吸收数据(R).每次数据传送老是由主机产生
的终止旌旗灯号停滞.但是,若主机愿望中断占用总线进行新的数据传送,则可以不产生终止旌旗灯号,立时再次发出肇端旌旗灯号对另一从机进行寻址.
在总线的一次数据传送进程中,可以有以下几种组合方法:
a、主机向从机发送数据,数据传送偏向在全部传送进程中不变:
注:有暗影部分表示数据由主机向从机传送,无暗影部分则表示数据由从机向主机传送. A表示应答, 表示非应答(高电平).S表示肇端旌旗灯号,P表示终止旌旗灯号.
b.主机在第一个字节后,连忙由从机读数据
c.在传送进程中,当须要转变传送偏向时,肇端旌旗灯号和从机地址都被反复产生一次,但两次读/写偏向位正好反相.
6、总线的寻址
I2C总线协定有明白的划定:采用7位的寻址字节(寻址字节是肇端旌旗灯号后的第一个字节).
(1)寻址字节的位界说
D7~D1位构成从机的地址.D0位是数据传送偏向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据.
主机发送地址时,总线上的每个从机都将这7位地址码与本身的地址进行比较,假如雷同,则以为本身正被主机寻址,依据R/位将本身肯定为发送器或吸收器.
从机的地址由固定部分和可编程部分构成.在一个体系中可能愿望接入多个雷同的从机,从机地址中可编程部分决议了可接入总线该类器件的最大数量.如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C 总线体系中.
(2)寻址字节中的特别地址
固定地址编号0000和1111已被保留作为特别用处.
肇端旌旗灯号后的第一字节的8位为“0000
0000”时,称为通用呼叫地址.通用呼叫地址的用意在第二字节中加以解释.格局为:
第二字节为
06H(0110)时,所有能响应通用呼叫地址的从机械件复位,并由硬件装入从机地址的可编程部分.能响应敕令的从机械件复位时不拉低SDA和SCL线,以免堵塞总线.
第二字节为
04H(0100)时,所有能响应通用呼叫地址并经由过程硬件来界说其可编程地址的从机械件将锁定地址中的可编程位,但不进行复位.
假如第二字节的偏向位B为“1”,则这两个字节敕令称为硬件通用呼叫敕令.
在这第二字节的高7位解释本身的地址.接在总线上的智能器件,如单片机或其他微处理器能辨认这个地址,并与之传送数据.硬件主器件作为从机应用时,也用这个地址作为从机地址.格局为:
在体系中另一种选择可能是体系复位时硬件主机械件工作在从机吸收器方法,这时由体系中的主机先告知硬件主机械件数据应送往的从机械件地址,当硬件主机械件要发送数据时就可以直接向指定从机械件发送数据了.
(3)肇端字节
肇端字节是供给应没有I2C总线接口的单片机查询I2C总线时应用的特别字节.
不具备I2C总线接口的单片机,则必须经由过程软件不断地检测总线,以便及时地响应总线的请求.单片机的速度与硬件接口器件的速度就消失了较大的差别,为此,I2C总线上的数据传送要由一个较长的肇端进程加以引诱.
引诱进程由肇端旌旗灯号.肇端字节.应答位.反复肇端旌旗灯号(Sr)构成.
请求拜访总线的主机发出肇端旌旗灯号后,发送肇端字节(0000
0001),另一个单片机可以用一个比较低的速度采样SDA线,直到检测到肇端字节中的7个“0”中的一个为止.在检测到SDA线上的高电平后,单片机就可以用较高的采样速度,以便查找作为同步旌旗灯号应用的第二个肇端旌旗灯号Sr.
在肇端旌旗灯号后的应答时钟脉冲仅仅是为了和总线所应用的格局一致,并不请求器件在这个脉冲时代作应答.
总线数据传送的模仿。