IIC串行总线的工作原理及应用_第1页
IIC串行总线的工作原理及应用_第2页
IIC串行总线的工作原理及应用_第3页
IIC串行总线的工作原理及应用_第4页
IIC串行总线的工作原理及应用_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、I2C串行总线的工作原理串行总线的工作原理及应用及应用1. I2C串行总线的组成及工作原理串行总线的组成及工作原理采用串行总线技术可以使系统的硬件设计大大采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。统的更改和扩充极为容易。常用的串行扩展总线有:常用的串行扩展总线有: I2C (Inter IC BUS)总线、总线、单总线单总线(1WIRE BUS)、)、SPI(Serial Peripheral Interface)总线及)总线及Microwire/PLUS等。等。 本章仅讨论本章仅讨论I2

2、C串行总线。串行总线。I2C串行总线概述串行总线概述 I2C总线是总线是PHLIPS公司推出的一种串行总线,是具备多公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。性能串行总线。 I2C总线只有两根双向信号线。一根是数据线总线只有两根双向信号线。一根是数据线SDA,另,另一根是时钟线一根是时钟线SCL。 总线接口器件地址具有很大的独立性。总线接口器件地址具有很大的独立性。在单主系统中,每个在单主系统中,每个I I2 2C C接口芯片具有唯一的器件地址,各从器件之间互不干扰,接口芯片具有唯一的器件地

3、址,各从器件之间互不干扰,相互之间不能进行通信。相互之间不能进行通信。MCUMCU与与I I2 2C C器件之间的通信是通过独器件之间的通信是通过独一无二的器件地址来实现的。一无二的器件地址来实现的。v数据传输首先从最高位开始。传输速率在标准模式下可达100kbit/s,在快速模式下达400kbit/s,在高速模式下达3.4Mbit/s。v它是一个真正的多主机总线。如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。v软件操作的一致性。任何器件通过I2C总线与MCU进行数据传送的方式基本一样,决定了I2C总线软件编写的一致性。v数据线SDA/时钟线SCL(接上拉电阻)

4、I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的线的信号变低,即各器件的SDA及及SCL都是线都是线“与与”关系关系。 每个接到每个接到I2C总线上的器件都有唯一的地总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为为发送器。由总线上接收数据的器件则为接收器接收器

5、。 在多主机系统中,可能同时有几个主机企图启在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,动总线传送数据。为了避免混乱, I2C总线要通总线要通过总线仲裁,以决定由哪一台主机控制总线。过总线仲裁,以决定由哪一台主机控制总线。 在在80C51单片机应用系统的串行总线扩展中,单片机应用系统的串行总线扩展中,我们经常遇到的是以我们经常遇到的是以80C51单片机为主机,其它单片机为主机,其它接口器件为从机的单主机情况。接口器件为从机的单主机情况。 一、数据位的有效性规定一、数据位的有效性规定 I2C总线进行数据传送时,总线进行数据传送时,时钟信号为高电平期间时钟信号为高电平期间

6、,数据,数据线上的数据必须保持稳定,只有在线上的数据必须保持稳定,只有在时钟线上的信号为低电时钟线上的信号为低电平期间平期间,数据线上的高电平或低电平状态才允许变化。,数据线上的高电平或低电平状态才允许变化。2. I2C总线的数据传送总线的数据传送二、起始和终止信号二、起始和终止信号 SCL线为高电平期间,线为高电平期间,SDA线由高电平向低电线由高电平向低电平的变化表示起始信号;平的变化表示起始信号;SCL线为高电平期间,线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。线由低电平向高电平的变化表示终止信号。 起始和终止信号都是由主机发出的,在起始信起始和终止信号都是由主机发出的,

7、在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。号产生后,总线就处于空闲状态。 连接到连接到I2C总线上的器件,若具有总线上的器件,若具有I2C总线的硬件接口,则总线的硬件接口,则很容易检测到起始和终止信号。对于不具备很容易检测到起始和终止信号。对于不具备I2C总线硬件接总线硬件接口的有些单片机来说,为了检测起始和终止信号,必须保证口的有些单片机来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线在每个时钟周期内对数据线SDA采样两次采样两次。 接收器件收到一个完整的数据字节后,有可能需要完成接收器件收到一个完

8、整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将下一个字节,这时接收器件可以将SCL线拉成低电平,从而线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放时,再释放SCL线使之为高电平,从而使数据传送可以继续线使之为高电平,从而使数据传送可以继续进行。进行。 三、数据传送格式三、数据传送格式(1)字节传送与应答)字节传送与应答 每一个字节必须保证是每一个字节必须保证是8位长度。数据传送时,先传位长度。

9、数据传送时,先传送最高位(送最高位(MSB),每一个被传送的字节后面都必须跟),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有随一位应答位(即一帧共有9位)。位)。 由于某种原因从机不对主机寻址信号应答时(如从机由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。以结束总线的数据传送。 如果从机对主机进行了应答,但在数据传送一段时间后如果从机对主机进行了应答,但在数据传送一

10、段时间后无法继续接收更多的数据时,从机可以通过对无法接收的无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的第一个数据字节的“非应答非应答”通知主机,主机则应发出终通知主机,主机则应发出终止信号以结束数据的继续传送。止信号以结束数据的继续传送。 当主机接收数据时,它收到最后一个数据字节后,必须当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的向从机发出一个结束传送的信号。这个信号是由对从机的“非应答非应答”来实现的。然后,从机释放来实现的。然后,从机释放SDA线,以允许主线,以允许主机产生终止信号。机产生终止信号。(2)数据帧格式

11、)数据帧格式 I2C总线上传送的数据信号是广义的,既包括地址总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。信号,又包括真正的数据信号。 在总线的一次数据传送过程中,可以有以下几种在总线的一次数据传送过程中,可以有以下几种组合方式:组合方式: 在起始信号后必须传送一个从机的地址(在起始信号后必须传送一个从机的地址(7位),位),第第8位是数据的传送方向位(位是数据的传送方向位(R/),用),用“0”表示主机表示主机发送数据(发送数据(T),),“1”表示主机接收数据(表示主机接收数据(R)。每)。每次数据传送总是由主机产生的终止信号结束。但是,次数据传送总是由主机产生的终止

12、信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。从机进行寻址。 a、主机向从机发送数据,数据传送方向在整、主机向从机发送数据,数据传送方向在整个传送过程中不变:个传送过程中不变:注:有阴影部分表示数据由主机向从机传送,无阴影部分则注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。表示数据由从机向主机传送。 A表示应答,表示应答, 表示非应答(高电平)。表示非应答(高电平)。S表示起始信号,表示起始信号,P表示终

13、止信号。表示终止信号。b、主机在第一个字节后,立即由从机读数据、主机在第一个字节后,立即由从机读数据c、在传送过程中,当需要改变传送方向时,、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但起始信号和从机地址都被重复产生一次,但两次读两次读/写方向位正好反相。写方向位正好反相。四、总线的寻址四、总线的寻址 I2C总线协议有明确的规定:采用总线协议有明确的规定:采用7位的寻址字位的寻址字节(寻址字节是起始信号后的第一个字节)。节(寻址字节是起始信号后的第一个字节)。 (1)寻址字节的位定义)寻址字节的位定义 D7D1位组成从机的地址。位组成从机的地址。D0位是数据位是数

14、据传送方向位,为传送方向位,为“0”时表示主机向从机写数时表示主机向从机写数据,为据,为“1”时表示主机由从机读数据。时表示主机由从机读数据。主机发送地址主机发送地址时,总线上的每个从机都将这时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据则认为自己正被主机寻址,根据R/位将自己确位将自己确定为发送器或接收器定为发送器或接收器。从机的地址从机的地址由固定部分和可编程部分组成。由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了

15、可接入总线该类从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的器件的最大数目。如一个从机的7位寻址位有位寻址位有4位是固定位,位是固定位,3位是可编程位,这时仅能寻位是可编程位,这时仅能寻址址8个同样的器件,即可以有个同样的器件,即可以有8个同样的器件个同样的器件接入到该接入到该I2C总线系统中总线系统中。(2)寻址字节中的特殊地址)寻址字节中的特殊地址 固定地址编号固定地址编号0000和和1111已被保留作为特已被保留作为特殊用途。殊用途。 起始信号后的第一字节的起始信号后的第一字节的8位为位为“0000 0000”时,时,称为通用呼叫地址。通用呼叫地址的用意在第二字节称

16、为通用呼叫地址。通用呼叫地址的用意在第二字节中加以说明。格式为:中加以说明。格式为: 第二字节为第二字节为 06H时,所有能响应通用呼叫地址的从机器件时,所有能响应通用呼叫地址的从机器件复位,并由硬件装入从机地址的可编程部分。能响应命令的复位,并由硬件装入从机地址的可编程部分。能响应命令的从机器件复位时不拉低从机器件复位时不拉低SDA和和SCL线,以免堵塞总线。线,以免堵塞总线。 第二字节为第二字节为 04H时,所有能响应通用呼叫地址并通过硬件时,所有能响应通用呼叫地址并通过硬件来定义其可编程地址的从机器件将锁定地址中的可编程位,来定义其可编程地址的从机器件将锁定地址中的可编程位,但不进行复位

17、。但不进行复位。 如果第二字节的方向位如果第二字节的方向位B为为“1”,则这两个字节命令称,则这两个字节命令称为硬件通用呼叫命令。为硬件通用呼叫命令。 在这第二字节的高在这第二字节的高7位说明自己的地址。接在总线上的智位说明自己的地址。接在总线上的智能器件,如单片机或其他微处理器能识别这个地址,并与能器件,如单片机或其他微处理器能识别这个地址,并与之传送数据。硬件主器件作为从机使用时,也用这个地址之传送数据。硬件主器件作为从机使用时,也用这个地址作为从机地址。格式为:作为从机地址。格式为: 在系统中另一种选择可能是系统复位时硬件主机在系统中另一种选择可能是系统复位时硬件主机器件工作在从机接收器

18、方式,这时由系统中的主机器件工作在从机接收器方式,这时由系统中的主机先告诉硬件主机器件数据应送往的从机器件地址,先告诉硬件主机器件数据应送往的从机器件地址,当硬件主机器件要发送数据时就可以直接向指定从当硬件主机器件要发送数据时就可以直接向指定从机器件发送数据了。机器件发送数据了。(3)起始字节)起始字节 不具备不具备I2C总线接口的单片机,则必须通过软件不断地检总线接口的单片机,则必须通过软件不断地检测总线,以便及时地响应总线的请求。单片机的速度与硬测总线,以便及时地响应总线的请求。单片机的速度与硬件接口器件的速度就出现了较大的差别,为此,件接口器件的速度就出现了较大的差别,为此,I2C总线上

19、总线上的数据传送要由一个较长的起始过程加以引导。的数据传送要由一个较长的起始过程加以引导。 起始字节是提供给没有起始字节是提供给没有I2C总线接口的单片机查询总线接口的单片机查询I2C总总线时使用的特殊字节。线时使用的特殊字节。 引导过程由起始信号、起始字节、应答位、引导过程由起始信号、起始字节、应答位、重复起始信号(重复起始信号(Sr)组成。)组成。请求访问总线的主机发出起始信号后,发送起始字请求访问总线的主机发出起始信号后,发送起始字节(节(0000 0001),另一个单片机可以用一个比较低),另一个单片机可以用一个比较低的速率采样的速率采样SDA线,直到检测到起始字节中的线,直到检测到起

20、始字节中的7个个“0”中的一个为止。在检测到中的一个为止。在检测到SDA线上的高电平后,线上的高电平后,单片机就可以用较高的采样速率,以便寻找作为同单片机就可以用较高的采样速率,以便寻找作为同步信号使用的第二个起始信号步信号使用的第二个起始信号Sr。在起始信号后的应答时钟脉冲仅仅是为了和总线所在起始信号后的应答时钟脉冲仅仅是为了和总线所使用的格式一致,并不要求器件在这个脉冲期间作使用的格式一致,并不要求器件在这个脉冲期间作应答。应答。 3. 80C51单片机单片机I2C串行总线器件的接口串行总线器件的接口一、典型信号模拟一、典型信号模拟 为了保证数据传送的可靠性,标准的为了保证数据传送的可靠性

21、,标准的I2C总线的数据传送有严格的时序要求。总线的数据传送有严格的时序要求。I2C总总线的起始信号、终止信号、发送线的起始信号、终止信号、发送“0”及发及发送送“1”的模拟时序的模拟时序 : 一、一、总线数据传送的模拟总线数据传送的模拟 主机可以采用不带主机可以采用不带I2C总线接口的单片机,如总线接口的单片机,如80C51、AT89C2051等单片机,利用软件实现等单片机,利用软件实现I2C总线的数据传送,即软件与硬件结合的信号模拟。总线的数据传送,即软件与硬件结合的信号模拟。 I I2 2C C总线信号类型总线信号类型 开始信号:开始信号:SCLSCL为高电平时,为高电平时,SDASDA

22、由高电平向低电平跳变,开由高电平向低电平跳变,开始传送数据。始传送数据。 结束信号:结束信号:SCLSCL为低电平时,为低电平时,SDASDA由低电平向高电平跳变,结由低电平向高电平跳变,结束传送数据。束传送数据。 应答信号:应答信号:接收数据的器件在接收到接收数据的器件在接收到8bit8bit数据后,向发送数数据后,向发送数据的器件(发送器)发出特定的低电平脉冲,表示已收到数据的器件(发送器)发出特定的低电平脉冲,表示已收到数据。发送器接收到应答信号后,根据实际情况作出是否继续据。发送器接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为接收器出现传递信号的判

23、断。若未收到应答信号,由判断为接收器出现故障。故障。 数据数据只能在只能在SCLSCL为低电平时才能改变,为低电平时才能改变,SCLSCL为高电平时为高电平时SDASDA须须稳定。稳定。 起始信号与结束信号都是由主器件产生。起始信号与结束信号都是由主器件产生。二、典型信号模拟子程序二、典型信号模拟子程序(1)起始信号)起始信号Void T2CStart(void)SomeNop( );SCL = 1;SomeNop( );SDA = 0;SomeNop( );SCL = 0;SomeNop( );(2)终止信号)终止信号void I2cStop(void)SDA = 0;SomeNop( );

24、SCL = 1;SomeNop( );SDA = 1;SomeNop( );SCL = 0;三、在三、在51上用上用P1口模拟口模拟I2C (c语言语言) /* 电平模拟函数和基本读写函数 void IIC_Start(void); void IIC_Stop(void); void SEND_0(void); void SEND_1(void); bit Check_Acknowledge(void); void Write_Byte(uchar b); bit Write_N_Bytes(uchar *buffer,uchar n);bit Read_N_Bytes(uchar Slave

25、Adr,uchar n,uchar *buffer); uchar Read_Byte(void); */ #include #include #include #includeaiic_51.h sbit SCL=P16; sbit SDA=P17; void DELAY(uint t) while(t!=0) t-; void IIC_Start(void) /启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变 SDA=1; SCL=1; DELAY(DELAY_TIME); SDA=0; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME);

26、 void IIC_Stop(void) /终止I2C总线,当SCL为高电平时使SDA产生一个正跳变 SDA=0; SCL=1; DELAY(DELAY_TIME); SDA=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); void SEND_0(void) /发送发送0,在,在SCL为低电平时使为低电平时使SDA信号变为低信号变为低 SCL=0; SDA=0; SCL=1; DELAY(DELAY_TIME); SCL=0;DELAY(DELAY_TIME); void SEND_1(void) /发送发送1,在,在SCL为低电平时使为低电平时

27、使SDA信号变为高信号变为高 SCL=0; SDA=1; SCL=1; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); bit Check_Acknowledge(void) /发送完一个字节后检验设备的应答信号 SDA=1; SCL=1; DELAY(DELAY_TIME/2); F0=SDA; DELAY(DELAY_TIME/2); SCL=0; DELAY(DELAY_TIME); if(F0=1) return FALSE; else return TRUE; void Write_Byte(uchar b) /向IIC总线写一个字节 uch

28、ar i; for(i=0;i8;i+) if(bi)&0 x80) SEND_1(); else SEND_0(); bit Write_N_Bytes(uchar *buffer,uchar n) /向I2C总线写n个字节 uchar i; IIC_Start(); for(i=0;in;i+) Write_Byte(bufferi); if(!Check_Acknowledge() IIC_Stop(); return(i=n); IIC_Stop(); return TRUE; uchar Read_Byte(void)reentrant /从从I2C总线读一个字节总线读一个字

29、节 uchar b=0,i; for(i=0;i8;i+) SDA=1; /释放总线释放总线 SCL=1; /接受数据接受数据 DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0=1) b=b1; b=b|0 x01; else b=b1; return b; bit Read_N_Bytes(uchar SlaveAdr,uchar n,uchar *buffer) /从从I2C总线读总线读n个字节个字节 uchar i; IIC_Start(); Write_Byte(SlaveAdr); /向总线发送接收器地址向总线发送接收器地址 if(!Check_A

30、cknowledge() /等待接收器应答信号等待接收器应答信号 return FALSE; for(i=0;in;i+) bufferi=Read_Byte(); if(i!=n) SEND_0(); /发送应答发送应答 else SEND_1(); /发送非应答发送非应答 IIC_Stop(); return TRUE; 2 2 I2C总线器件的扩展总线器件的扩展一、一、扩展电路扩展电路 二、串行二、串行E2PROM的扩展的扩展 (1)串行)串行E2PROM典型产品典型产品 AT24C01:128字节(1288位); AT24C02:256字节(2568位);AT24C04:512字节(5

31、128位)AT24C08:1K字节(1K8位);AT24C16:2K字节(2K8位); ATMEL公司的公司的AT24C系列:系列: (2)写入过程)写入过程 AT24C系列系列E2PROM芯片地址的固定部分为芯片地址的固定部分为1010,A2、A1、A0引脚接高、低电平后得到确定引脚接高、低电平后得到确定的的3位编码。形成的位编码。形成的7位编码即为该器件的地址码。位编码即为该器件的地址码。 单片机进行写操作时,首先发送该器件的单片机进行写操作时,首先发送该器件的7位地位地址码和写方向位址码和写方向位“0”(共(共8位,即一个字节),发位,即一个字节),发送完后释放送完后释放SDA线并在线并在SCL线上产生第线上产生第9个时钟信个时钟信号。被选中的存储器器件在确认是自己的地址后,号。被选中的存储器器件在确认是自己的地址后,在在SDA线上产生一个应答信号作为相应,单片机收线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。到应答后就可以传送数据了。 传送数据时,单片机首先发送一个字节的被写入器件的传送数据时,单片机首

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论