1、112第第11章章 单片机应用系统的串行扩展单片机应用系统的串行扩展11.1 单总线串行扩展单总线串行扩展 11.1.1 单总线系统的典型应用单总线系统的典型应用-DS18B20的温度测量系统的温度测量系统 11.1.2 单总线单总线DS18B20温度测量系统的设计温度测量系统的设计11.2 SPI总线串行扩展总线串行扩展11.3 I2C总线的串行扩展总线的串行扩展 11.3.1 I2C串行总线系统的基本结构串行总线系统的基本结构 11.3.2 I2C总线的数据传送规定总线的数据传送规定 11.3.3 AT89S52的的I2C总线系统扩展总线系统扩展 11.3.4 I2C总线数据传送的模拟总线
2、数据传送的模拟 11.3.5 利用利用I2C总线扩展总线扩展E2PROM AT24C02的的IC卡设计卡设计3内容概要内容概要单片机应用系统除并行扩展外,串行扩展技术也已得到广泛应单片机应用系统除并行扩展外,串行扩展技术也已得到广泛应用。与并行扩展相比,串行接口器件与单片机相连需要的用。与并行扩展相比,串行接口器件与单片机相连需要的I/O口线很少,极大地简化了器件间的连接,进而提高了可靠性;口线很少,极大地简化了器件间的连接,进而提高了可靠性;串行接口器件体积小,占用电路板的空间小,减少了电路板空串行接口器件体积小,占用电路板的空间小,减少了电路板空间和成本。间和成本。常见的单片机串行扩展总线
3、接口有单总线(常见的单片机串行扩展总线接口有单总线(1-Wire)、)、SPI串串行外设接口以及行外设接口以及I2C(Inter Interface Circuit)串行总线接口,)串行总线接口,本章介绍这几种串行扩展接口总线的工作原理及特点以及如何本章介绍这几种串行扩展接口总线的工作原理及特点以及如何进行系统串行扩展的典型设计。进行系统串行扩展的典型设计。11.1 11.1 单总线串行扩展单总线串行扩展 单总线也称单总线也称1-Wire bus,由,由美国美国DALLAS公司公司推出的外围串推出的外围串行扩展总线。它只有一条数据输入行扩展总线。它只有一条数据输入/输出线输出线DQ,总线上的所
4、有,总线上的所有器件都挂在器件都挂在DQ上,电源也通过这条信号线供给,这种只使用上,电源也通过这条信号线供给,这种只使用一条信号线的串行扩展技术,称为单总线技术。一条信号线的串行扩展技术,称为单总线技术。单总线系统中配置的各种器件,由单总线系统中配置的各种器件,由DALLAS公司提供的专用公司提供的专用芯片实现。每个芯片都有芯片实现。每个芯片都有64位位ROM,厂家对每一芯片都用激,厂家对每一芯片都用激光烧写编码,其中存有光烧写编码,其中存有16位十进制编码序列号,它是器件的地位十进制编码序列号,它是器件的地址编号,确保它挂在总线上后,可唯一地被确定。址编号,确保它挂在总线上后,可唯一地被确定
5、。445 除了器件的地址编码外,芯片内还包含收发控制和电源存储除了器件的地址编码外,芯片内还包含收发控制和电源存储电路,如电路,如图图11-1所示。这些芯片的耗电量都很小(空闲时几所示。这些芯片的耗电量都很小(空闲时几W,工作时几,工作时几mW),工作时从总线上馈送电能到大电容中就),工作时从总线上馈送电能到大电容中就可以工作,故一般不需另加电源。可以工作,故一般不需另加电源。66图图11-1 单总线芯片的内部结构示意图单总线芯片的内部结构示意图11.1.1 单总线系统的典型应用单总线系统的典型应用-DS18B20的温度测量系统的温度测量系统 单总线应用的典型案例是采用单总线温度传感器单总线应
6、用的典型案例是采用单总线温度传感器DS18B20的温度测量系统。的温度测量系统。1.单总线温度传感器单总线温度传感器DS18B20简介简介 美国美国DALLAS公司推出的单总线接口的数字温度传感器,公司推出的单总线接口的数字温度传感器,温度测量范围为温度测量范围为55+128,在,在-10+85范围内,测量范围内,测量精度可达精度可达0.5。DS18B20体积小、功耗低,现场温度的体积小、功耗低,现场温度的测量直接通过测量直接通过“单总线单总线”以数字方式传输,大大提高了系统以数字方式传输,大大提高了系统的抗干扰性。非常适合于恶劣环境的现场温度测量,也可用的抗干扰性。非常适合于恶劣环境的现场温
7、度测量,也可用于各种狭小空间内设备的测温,如环境控制、过程监测、测于各种狭小空间内设备的测温,如环境控制、过程监测、测温类消费电子产品以及多点温度测控系统等。温类消费电子产品以及多点温度测控系统等。778 由于由于DS18B20可直接将温度转化成数字信号传送给单片机可直接将温度转化成数字信号传送给单片机处理,因而可省去传统的信号放大、处理,因而可省去传统的信号放大、A/D转换等外围电路。转换等外围电路。图图11-2为单片机与多个带有单总线接口的数字温度传感器为单片机与多个带有单总线接口的数字温度传感器DS18B20芯片的分布式温度监测系统,图中多个芯片的分布式温度监测系统,图中多个DS18B2
8、0都都挂在单片机的挂在单片机的1根根I/O口线(即口线(即DQ线)上。线)上。单片机对每个单片机对每个DS18B20通过总线通过总线DQ寻址。寻址。DQ为漏极开路,为漏极开路,须加上拉电阻。须加上拉电阻。DS18B20的一种封装形式如的一种封装形式如图图11-2所示。除所示。除DS18B20外,在该数字温度传感器系列中还有外,在该数字温度传感器系列中还有DS1820、DS18S20、DS1822等其他型号产品,工作原理与特性基本相等其他型号产品,工作原理与特性基本相同。同。9图图11-2 单总线构成的分布式温度监测系统单总线构成的分布式温度监测系统 片内有片内有9个字节的高速暂存器个字节的高速
9、暂存器RAM单元,具体内容如下:单元,具体内容如下:1010 第第1字节和第字节和第2字节是在单片机发给字节是在单片机发给DS18B20温度转换命令发温度转换命令发布后,经转换所得的温度值,以两字节补码形式存放其中。一布后,经转换所得的温度值,以两字节补码形式存放其中。一般情况下,用户多使用第般情况下,用户多使用第1字节和第字节和第2字节。单片机通过单总线字节。单片机通过单总线可读得该数据,读取时低位在前,高位在后。第可读得该数据,读取时低位在前,高位在后。第3、4字节分别字节分别是由软件写入用户报警的上下限值是由软件写入用户报警的上下限值TH和和TL。第。第5字节为配置寄字节为配置寄存器,可
10、对其更改存器,可对其更改DS18B20的测温分辨率,高速暂存器的的测温分辨率,高速暂存器的11第第6、7、8字节未用,为全字节未用,为全1。第。第9字节是前面所有字节是前面所有8个字节的个字节的CRC码,用来保证正确通信。片内还有码,用来保证正确通信。片内还有1个个E2PROM为为TH、TL以及配置寄存器的映像。以及配置寄存器的映像。配置寄存器(第配置寄存器(第5字节)各位的定义如下:字节)各位的定义如下:其中,最高位其中,最高位TM出厂时已被写入出厂时已被写入0,用户不能改变;低,用户不能改变;低5位位都为都为1;R1和和R0用来设置分辨率。用来设置分辨率。表表11-1列出了列出了R1、R0
11、与分与分辨率和转换时间的关系。用户可通过修改辨率和转换时间的关系。用户可通过修改R1、R0位的编码,位的编码,获得合适的分辨率。获得合适的分辨率。1212 由由表表11-1可看出,可看出,DS18B20的转换时间与分辨率有关。当设的转换时间与分辨率有关。当设定分辨率为定分辨率为9位时,转换时间为位时,转换时间为93.75ms;当设定分辨率;当设定分辨率为为12位时,转换时间为位时,转换时间为750ms。表表11-2列出了列出了DS18B20温度转换后所得到的温度转换后所得到的16位转换结果的位转换结果的典型值。典型值。1313下面介绍温度转换的计算方法。下面介绍温度转换的计算方法。当当DS18
12、B20采集的采集的温度为温度为+125时,输出为时,输出为07D0H,则:,则:实际温度实际温度=(07D0H)/16=(0163+7162+13161 +0160)/16=125 当当DS18B20采集的采集的温度为温度为-55时,输出为时,输出为FC90H,由于是,由于是补码,则先将补码,则先将11位数据取反加位数据取反加1得得0370H,注意符号位不变,也,注意符号位不变,也不参加运算,则:不参加运算,则:实际温度实际温度=(0370H)/16=(0163+3162+7161 +0160)/16=55注意,负号则需要对采集的温度的结果数据进行判断后,再予注意,负号则需要对采集的温度的结果
13、数据进行判断后,再予以显示。以显示。2.DS18B20的工作时序的工作时序 DS18B20对工作时序要求严格,延时时间需准确,否则容易对工作时序要求严格,延时时间需准确,否则容易出错。工作时序包括初始化时序、写时序和读时序。出错。工作时序包括初始化时序、写时序和读时序。1414(1)初始化时序)初始化时序,单片机将数据线,单片机将数据线DQ电平拉低电平拉低480960s后后释放,等待释放,等待1560s,单总线器件即可输出一持续,单总线器件即可输出一持续60240s的低电平,单片机收到此应答后即可进行操作。的低电平,单片机收到此应答后即可进行操作。(2)写时序,)写时序,当单片机将数据线当单片
14、机将数据线DQ电平从高拉到低时,产生电平从高拉到低时,产生写时序,有写写时序,有写“0”和写和写“1”两种时序。写时序开始后,两种时序。写时序开始后,DS18B20在在1560s期间从数据线上采样。如果采样到低电期间从数据线上采样。如果采样到低电平,则向平,则向DS18B20写的是写的是“0”;如果采样到高电平,则向;如果采样到高电平,则向DS18B20写的是写的是“1”。这两个独立的时序间至少需要拉高总线。这两个独立的时序间至少需要拉高总线电平电平1s的时间。的时间。151516(3)读时序)读时序,当单片机从,当单片机从DS18B20读取数据时,产生读时序。读取数据时,产生读时序。此时单片
15、机将数据线此时单片机将数据线DQ的电平从高拉到低使读时序被初始化。的电平从高拉到低使读时序被初始化。如果在此后的如果在此后的15s内,单片机在数据线上采样到低电平,则从内,单片机在数据线上采样到低电平,则从DS18B20读的是读的是“0”;如果在此后的;如果在此后的15s内,单片机在数据线内,单片机在数据线上采样到高电平,则从上采样到高电平,则从DS18B20读的是读的是“1”。3.DS18B20的命令的命令 DS18B20片内都有唯一的片内都有唯一的64位光刻位光刻ROM编码,出厂时已刻编码,出厂时已刻好。它是好。它是DS18B20的地址序列码,目的是使每个的地址序列码,目的是使每个DS18
16、B20的地的地址都不相同,这样就可实现在一根总线上挂接多个址都不相同,这样就可实现在一根总线上挂接多个DS18B20的的目的。目的。64位光刻位光刻ROM的各位定义如下:的各位定义如下:1717 单片机写入单片机写入DS18B20的所有命令均为的所有命令均为8位长,对位长,对ROM操作操作的命令见的命令见表表11-3。1818 下面介绍下面介绍表表11-3中命令的用法。当主机需要对多个单总线上中命令的用法。当主机需要对多个单总线上的某一的某一DS18B20进行操作时,首先应将主机逐个与进行操作时,首先应将主机逐个与DS18B20挂挂接,读出其序列号(命令代码为接,读出其序列号(命令代码为33H
17、);然后再将所有的);然后再将所有的DS18B20挂接到总线上,单片机发出匹配挂接到总线上,单片机发出匹配ROM命令(命令(55H),),紧接着主机提供的紧接着主机提供的64位序列号之后的操作就是针对该位序列号之后的操作就是针对该DS18B20的。的。如果主机只对一个如果主机只对一个DS18B20进行操作,就不需要读取进行操作,就不需要读取ROM编编码以及匹配码以及匹配ROM编码,只要使用跳过读编码,只要使用跳过读ROM序列号(序列号(CCH)命)命令,就可按令,就可按表表11-4执行如下温度转换和读取命令。执行如下温度转换和读取命令。1919 11.1.2 单总线单总线DS18B20温度测量
18、系统的设计温度测量系统的设计 【例例11-1】利用利用DS18B20和和LED数码管实现单总线温度数码管实现单总线温度测量系统,原理仿真电路如测量系统,原理仿真电路如图图11-3所示。所示。DS18B20的测量范的测量范围是围是55128。本例由于只接有两只数码管,所以显示。本例由于只接有两只数码管,所以显示的数值为的数值为0099。读者通过本例应掌握。读者通过本例应掌握DS18B20的特性以的特性以及单片机及单片机I/O实现单总线协议的方法。实现单总线协议的方法。在在Proteus环境下进行虚拟仿真时,用手动调整环境下进行虚拟仿真时,用手动调整DS18B20的温度值,即用鼠标单击的温度值,即
19、用鼠标单击DS18B20图标上的图标上的“”或或“”来改变温度,注意手动调节温度的同时,来改变温度,注意手动调节温度的同时,LED数码数码管上会显示出与管上会显示出与DS18B20窗口相同的窗口相同的2位温度数值,表示测位温度数值,表示测量结果正确。量结果正确。202021图图11-3 单总线单总线DS18B20温度测量与显示系统温度测量与显示系统图图11-3 74LS47为为BCD-7段译码器段译码器/驱动器驱动器,用于将单片机,用于将单片机P0口输出的欲显示的口输出的欲显示的BCD码转化成相应的数字显示的段码,并直码转化成相应的数字显示的段码,并直接驱动接驱动LED数码管显示。电路中的两个
20、三极管用于两个数码管数码管显示。电路中的两个三极管用于两个数码管的位控端的选通和驱动。的位控端的选通和驱动。参考程序如下。参考程序如下。222223232424252526262728293011.2 SPI总线串行扩展总线串行扩展 SPI(Serial Periperal Interface,串行外设接口)是,串行外设接口)是Motorola公司推出的一种同步串行外设接口公司推出的一种同步串行外设接口,允许单片机与,允许单片机与多厂家的带有标准多厂家的带有标准SPI接口的外围器件直接连接。所谓同步,接口的外围器件直接连接。所谓同步,就是串行口每发送、接收一位数据都伴随有一个同步时钟脉就是串行
21、口每发送、接收一位数据都伴随有一个同步时钟脉冲来控制。冲来控制。SPI外围串行扩展结构如外围串行扩展结构如图图11-4所示。所示。SPI使用使用4条线:条线:串行时钟串行时钟SCK,主器件输入,主器件输入/从器件输出数据线从器件输出数据线MISO,主器,主器件输出件输出/从器件输入数据线从器件输入数据线MOSI和从器件选择线和从器件选择线CS*。313132图图11-4 SPI外围串行扩展结构图外围串行扩展结构图 典型的典型的SPI系统是单主器件系统,从器件通常是外围器件,系统是单主器件系统,从器件通常是外围器件,如存储器、如存储器、I/O接口、接口、A/D、D/A、键盘、日历、键盘、日历/时
22、钟和显示驱时钟和显示驱动等。单片机使用动等。单片机使用SPI扩展多个外围器件时,扩展多个外围器件时,SPI无法通过地无法通过地址线译码选择,故外围器件都有片选端。在扩展单个址线译码选择,故外围器件都有片选端。在扩展单个SPI器件器件时,外围器件的片选端时,外围器件的片选端CS*可以接地或通过可以接地或通过I/O口控制;在扩口控制;在扩展多个展多个SPI器件时,单片机应分别通过器件时,单片机应分别通过I/O口线来分时选通外口线来分时选通外围器件。在围器件。在SPI串行扩展系统中,如果某一从器件只作输入串行扩展系统中,如果某一从器件只作输入(如键盘)或只作输出(如显示器)时,可省去一条数据输(如键
23、盘)或只作输出(如显示器)时,可省去一条数据输出(出(MISO)线或一条数据输入()线或一条数据输入(MOSI)线,从而构成双线)线,从而构成双线系统(系统(CS*接地)。接地)。SPI系统中单片机对从器件的选通需控制其系统中单片机对从器件的选通需控制其CS*端,由于端,由于333334省去了地址字节,数据传送软件十分简单。但在扩展器件较省去了地址字节,数据传送软件十分简单。但在扩展器件较多时,需要控制较多的从器件端,连线较多。多时,需要控制较多的从器件端,连线较多。在在SPI串行扩展系统中,作为主器件的单片机在启动一次传串行扩展系统中,作为主器件的单片机在启动一次传送时,便产生送时,便产生8
24、个时钟,传送给外围器件作为同步时钟,控制个时钟,传送给外围器件作为同步时钟,控制数据的输入和输出。数据的传送格式是高位(数据的输入和输出。数据的传送格式是高位(MSB)在前,)在前,低位(低位(LSB)在后,如)在后,如图图11-5所示。数据线上输出数据的变所示。数据线上输出数据的变化以及输入数据时的采样,都取决于化以及输入数据时的采样,都取决于SCK。但对于不同的外。但对于不同的外围芯片,有的可能是围芯片,有的可能是SCK的上升沿起作用,有的可能是的上升沿起作用,有的可能是SCK的下降沿起作用。的下降沿起作用。SPI有较高的数据传输速度,最高可达有较高的数据传输速度,最高可达1.05Mbit
25、/s。3535图图11-5 SPI数据传送格式数据传送格式 目前世界各大公司为用户提供了一系列具有目前世界各大公司为用户提供了一系列具有SPI接口的单片接口的单片机和外围接口芯片,例如机和外围接口芯片,例如Motorola公司存储器公司存储器MC2814、显示、显示驱动器驱动器MC14499和和MC14489等各种芯片;美国等各种芯片;美国TI公司的公司的8位串位串行行A/D转换器转换器TLC549、10位串行位串行A/D转换器转换器TLC1549、12位串位串行行A/D转换器转换器TLC2543等。等。SPI外围串行扩展系统的从器件要具有外围串行扩展系统的从器件要具有SPI接口。主器件是单接
26、口。主器件是单片机。片机。AT89S51单片机不带有单片机不带有SPI接口,可采用软件与接口,可采用软件与I/O口结口结合来模拟合来模拟SPI的接口时序。在的接口时序。在SPI总线系统扩展的应用设计中,总线系统扩展的应用设计中,扩展串行扩展串行D/A转换器和串行转换器和串行A/D转换器应用较多,转换器应用较多,AT89S52单片机与带有单片机与带有SPI串行接口的串行接口的12位位A/D转换器转换器TLC2543的扩展设计案例已在的扩展设计案例已在11.7节节介绍。介绍。363611.3 I2C总线的串行扩展总线的串行扩展 I2C(Inter Interface Circuit)全称为芯片间总
27、线,是)全称为芯片间总线,是应用广泛的芯片间串行扩展总线。目前世界上采用的应用广泛的芯片间串行扩展总线。目前世界上采用的I2C总总线有两个规范,分别由荷兰飞利浦公司和日本索尼公司提出,线有两个规范,分别由荷兰飞利浦公司和日本索尼公司提出,现在多采用飞利浦公司的现在多采用飞利浦公司的I2C总线技术规范,它已成为电子总线技术规范,它已成为电子行业认可的总线标准。采用行业认可的总线标准。采用I2C技术的单片机以及外围器件技术的单片机以及外围器件种类很多,目前已广泛用于各类电子产品、家用电器及通信种类很多,目前已广泛用于各类电子产品、家用电器及通信设备中。设备中。37373811.3.1 I2C串行总
28、线系统的基本结构串行总线系统的基本结构 I2C串行总线只有两条信号线,一条是数据线串行总线只有两条信号线,一条是数据线SDA,另一,另一条是时钟线条是时钟线SCL。SDA和和SCL是双向的,是双向的,I2C总线上各器件总线上各器件的数据线都接到的数据线都接到SDA线上,各器件的时钟线均接到线上,各器件的时钟线均接到SCL线上。线上。I2C总线系统的基本结构如总线系统的基本结构如图图11-6所示。所示。带有带有I2C总线接口的主器件可直接与具有总线接口的主器件可直接与具有I2C总线接口的各总线接口的各种从器件(如存储器、种从器件(如存储器、I/O芯片、芯片、A/D或或D/A转换器、键盘、转换器、
29、键盘、显示器、日历显示器、日历/时钟芯片)连接。由于时钟芯片)连接。由于I2C总线采用纯软件的总线采用纯软件的寻址方法,无需片选线的连接,这样就大大简化了总线数量。寻址方法,无需片选线的连接,这样就大大简化了总线数量。I2C串行总线的运行由主器件控制。主器件是指启动串行总线的运行由主器件控制。主器件是指启动3939图图11-6 I2C串行总线系统的基本结构串行总线系统的基本结构数据的发送(发出起始信号)、发出时钟信号、传送结束时发数据的发送(发出起始信号)、发出时钟信号、传送结束时发出终止信号的器件,通常由单片机来担当。从器件可以是存储出终止信号的器件,通常由单片机来担当。从器件可以是存储器、
30、器、LED或或LCD驱动器、驱动器、A/D或或D/A转换器、时钟转换器、时钟/日历器件等,日历器件等,从器件必须带有从器件必须带有I2C串行总线接口。串行总线接口。当当I2C总线空闲时,总线空闲时,SDA和和SCL两条线均为高电平。由于连接两条线均为高电平。由于连接到总线上器件的输出级必须是漏级或集电极开路的,只要有一到总线上器件的输出级必须是漏级或集电极开路的,只要有一个器件任意时刻输出低电平,都将使总线上的信号变低,即各个器件任意时刻输出低电平,都将使总线上的信号变低,即各器件的器件的SDA及及SCL都是都是“线与线与”的关系。由于各器件输出端为的关系。由于各器件输出端为漏级开路,故必须通
31、过上拉电阻接正电源(漏级开路,故必须通过上拉电阻接正电源(图图11-6中的两个电中的两个电阻),以保证阻),以保证SDA和和SCL在空闲时被上拉为高电平。在空闲时被上拉为高电平。4040 SCL线上的时钟信号对线上的时钟信号对SDA线上的各器件间的数据传输起同线上的各器件间的数据传输起同步控制作用。步控制作用。SDA线上的数据起始、终止及数据的有效性均要根线上的数据起始、终止及数据的有效性均要根据据SCL线上的时钟信号来判断。线上的时钟信号来判断。在标准的在标准的I2C普通模式下,数据的传输速率为普通模式下,数据的传输速率为100kbit/s,高速,高速模式下可达模式下可达400kbit/s。
32、总线上扩展的器件数量不是由电流负载。总线上扩展的器件数量不是由电流负载决定的,而是由电容负载确定的。决定的,而是由电容负载确定的。I2C总线上的每个器件的接口总线上的每个器件的接口处都有一定的等效电容,器件越多,电容值就越大,就会造成信处都有一定的等效电容,器件越多,电容值就越大,就会造成信号传输的延迟。总线上允许的器件数以器件的电容量不超过号传输的延迟。总线上允许的器件数以器件的电容量不超过400pF(通过驱动扩展可达(通过驱动扩展可达4000pF)为宜,据此可计算出总线)为宜,据此可计算出总线长度及连接器件的数量。每个连到长度及连接器件的数量。每个连到I2C总线上的器件都有一个唯总线上的器
33、件都有一个唯一的地址,扩展器件数目的多少也要受器件地址数目的限制。一的地址,扩展器件数目的多少也要受器件地址数目的限制。41 I2C总线应用系统允许多主器件,但是在实际应用中,经常总线应用系统允许多主器件,但是在实际应用中,经常遇到的是以单一单片机为主器件,其他外围接口器件为从器件遇到的是以单一单片机为主器件,其他外围接口器件为从器件的情况。的情况。11.3.2 I2C总线的数据传送规定总线的数据传送规定1数据位的有效性规定数据位的有效性规定 I2C总线在进行数据传送时,每一数据位的传送都与时钟脉总线在进行数据传送时,每一数据位的传送都与时钟脉冲相对应。时钟脉冲为高电平期间,数据线上的数据必须
34、保持冲相对应。时钟脉冲为高电平期间,数据线上的数据必须保持稳定,在稳定,在I2C总线上,只有在时钟线总线上,只有在时钟线SCL为低电平期间,数据线为低电平期间,数据线SDA上的电平状态才允许变化,如上的电平状态才允许变化,如图图11-7所示。所示。424243图图11-7 数据位的有效性规定数据位的有效性规定 2起始信号和终止信号起始信号和终止信号 根据根据I2C总线协议,总线上数据信号的传送由起始信号(总线协议,总线上数据信号的传送由起始信号(S)开始、由终止信号(开始、由终止信号(P)结束。起始信号和终止信号都由主器)结束。起始信号和终止信号都由主器件发出,在起始信号产生后,总线就处于占用
35、状态;在终止信件发出,在起始信号产生后,总线就处于占用状态;在终止信号产生后,总线就处于空闲状态。下面结合号产生后,总线就处于空闲状态。下面结合图图11-8介绍有关起介绍有关起始信号和终止信号的规定。始信号和终止信号的规定。4444图图11-8 起始信号和终止信号起始信号和终止信号 45(1)起始信号)起始信号S。在。在SCL线为高电平期间,线为高电平期间,SDA线由高电平向线由高电平向低电平的变化表示起始信号,只有在起始信号以后,其他命令低电平的变化表示起始信号,只有在起始信号以后,其他命令才有效。才有效。(2)终止信号)终止信号P。在。在SCL线为高电平期间,线为高电平期间,SDA线由低电
36、平向线由低电平向高电平的变化表高电平的变化表示终止信号。随着终止信号的出现,所有外部操作都结束。示终止信号。随着终止信号的出现,所有外部操作都结束。3I2C总线上数据传送的应答总线上数据传送的应答 I2C总线进行数据传送时,首先要由主器件对从器件进行寻总线进行数据传送时,首先要由主器件对从器件进行寻址,发出寻址字节,而传送的数据字节数没有限制,但是每字址,发出寻址字节,而传送的数据字节数没有限制,但是每字节必须为节必须为8位。数据传送时,先传送最高位(位。数据传送时,先传送最高位(MSB),如),如46图图11-9所示。所示。I2C总线在传送每总线在传送每1字节数据后都必须有接收数据字节数据后
37、都必须有接收数据方发出的应答信号方发出的应答信号A,应答信号在第,应答信号在第9个时钟位上出现,与应答个时钟位上出现,与应答信号对应的时钟信号由主器件产生,这时发送方必须在这一时信号对应的时钟信号由主器件产生,这时发送方必须在这一时钟位上使钟位上使SDA线处于高电平状态,以便接收方在这一位上送出线处于高电平状态,以便接收方在这一位上送出低电平的应答信号低电平的应答信号A。由于某种原因接收方不对主器件寻址信号应答时,例如接收由于某种原因接收方不对主器件寻址信号应答时,例如接收方正在进行其他处理而无法接收总线上的数据时,必须释放总方正在进行其他处理而无法接收总线上的数据时,必须释放总线,将数据线线
38、,将数据线SDA置为高电平,而由主器件产生一个终止信号置为高电平,而由主器件产生一个终止信号以结束总线的数据传送。当主器件接收来自从器件的数据时,以结束总线的数据传送。当主器件接收来自从器件的数据时,47图图11-9 I2C总线上的应答信号总线上的应答信号接收的最后一个数据字节后,必须给从器件发送一个非应答信接收的最后一个数据字节后,必须给从器件发送一个非应答信号(号(A*),使从机释放数据总线,以便主器件发送一个终止信),使从机释放数据总线,以便主器件发送一个终止信号,从而结束数据的传送。号,从而结束数据的传送。4寻址字节寻址字节 上面已经介绍,上面已经介绍,I2C总线系统中主器件完成与从器
39、件的数据总线系统中主器件完成与从器件的数据传输(读或写),首先要由主器件对从器件寻址,并确定数据传输(读或写),首先要由主器件对从器件寻址,并确定数据的传输方向(读或写),这是由主器件发出的寻址字节来控制的传输方向(读或写),这是由主器件发出的寻址字节来控制的。寻址字节格式如下:的。寻址字节格式如下:484849寻址字节包含了寻址字节包含了7位从器件地址和位从器件地址和1位数据传输方向(读或写)位数据传输方向(读或写)控制位。控制位。7位从器件地址为位从器件地址为“DA3、DA2、DA1、DA0”和和“A2、A1、A0”,其中,其中“DA3、DA2、DA1、DA0”为器件固有的类型号编为器件固
40、有的类型号编码,出厂时就已经给定。码,出厂时就已经给定。“A2、A1、A0”为引脚地址,由器件为引脚地址,由器件引脚引脚A2、A1、A0在电路中接高电平或接地决定(见后面的图在电路中接高电平或接地决定(见后面的图10-11)。寻址字节的最低位为数据方向位()。寻址字节的最低位为数据方向位(R/W*),规定了),规定了总线上的主器件(单片机)与从器件的数据传送方向。总线上的主器件(单片机)与从器件的数据传送方向。R/W*=1,表示主器件接收(读)。,表示主器件接收(读)。R/W*=0,表示主器件发送,表示主器件发送(写)。(写)。5I2C总线上的数据帧格式总线上的数据帧格式 I2C总线上传送的信
41、号即包括数据信号,也包括地址信号。总线上传送的信号即包括数据信号,也包括地址信号。50 I2C总线规定,在起始信号后必须传送一个寻址字节,即总线规定,在起始信号后必须传送一个寻址字节,即7位位从器件的地址,从器件的地址,1位数据传送的方向位(位数据传送的方向位(R/),用),用“0”表示主器表示主器件发送数据(),件发送数据(),“1”表示主器件接收数据(表示主器件接收数据(R)。每次数据)。每次数据传送总是由主器件产生的终止信号结束。但是,若主器件希望传送总是由主器件产生的终止信号结束。但是,若主器件希望继续占用总线进行新的数据传送,则可以不产生终止信号,马继续占用总线进行新的数据传送,则可
42、以不产生终止信号,马上再次发出起始信号对另一从器件发寻址字节。因此,在总线上再次发出起始信号对另一从器件发寻址字节。因此,在总线一次数据传送过程中,通常有以下几种组合方式:一次数据传送过程中,通常有以下几种组合方式:(1)主器件向从器件发送)主器件向从器件发送n字节数据的写操作字节数据的写操作,数据传送方向,数据传送方向在整个传送过程中不变,数据传送的格式如下:在整个传送过程中不变,数据传送的格式如下:5151A其中:字节其中:字节1字节字节n为主机写入从器件的为主机写入从器件的n字节的数据。格式字节的数据。格式中阴影部分表示主器件向从器件发送数据,无阴影部分表示从中阴影部分表示主器件向从器件
43、发送数据,无阴影部分表示从器件向主器件发送,以下同。上述格式中的寻址字节中的器件向主器件发送,以下同。上述格式中的寻址字节中的7位为位为“从器件地址从器件地址”,紧接其后的,紧接其后的“1”为读,为读,“0”为写。为写。(2)主器件接收来自从器件的)主器件接收来自从器件的n字节的读操作字节的读操作。除第。除第1个寻址个寻址字节由主器件发出,字节由主器件发出,n字节都由从器件发送,主器件接收,数据字节都由从器件发送,主器件接收,数据传送的格式如下:传送的格式如下:其中:字节其中:字节1n为从器件被读出的为从器件被读出的n字节数据。主器件发送字节数据。主器件发送终止信号前应发送非应答信号,向从器件
44、表明读操作要结束。终止信号前应发送非应答信号,向从器件表明读操作要结束。(3)主器件的读、写操作。在一次数据传送过程中,主器件)主器件的读、写操作。在一次数据传送过程中,主器件先发送先发送1字节数据,然后再接收字节数据,然后再接收1字节数据,此时起始信号和从字节数据,此时起始信号和从器件地址都被重新产生一次,但两次读写的方向位正好相反。器件地址都被重新产生一次,但两次读写的方向位正好相反。数据传送的格式如下:数据传送的格式如下:5252A 格式中的格式中的“Sr”表示重新产生的起始信号,表示重新产生的起始信号,“从器件地址从器件地址r”表示重新产生的从器件地址。表示重新产生的从器件地址。由上可
45、见,无论哪种方式,起始信号、终止信号和从器件地由上可见,无论哪种方式,起始信号、终止信号和从器件地址(寻址字节中的高址(寻址字节中的高7位)均由主器件发送,数据字节的传送位)均由主器件发送,数据字节的传送方向则由主器件发出的寻址字节的最低位规定,每个字节的传方向则由主器件发出的寻址字节的最低位规定,每个字节的传送都必须有应答位(送都必须有应答位(A或或A*)相随。)相随。6数据传送的时序数据传送的时序 I2C总线上每传送一位数据都与一个时钟脉冲相对应,传总线上每传送一位数据都与一个时钟脉冲相对应,传送的每一帧数据均为一字节。但启动送的每一帧数据均为一字节。但启动I2C总线后传送的字节总线后传送
46、的字节数没有限制,只要求每传送一个字节后,对方回答一个应答数没有限制,只要求每传送一个字节后,对方回答一个应答位。在时钟线为高电平期间,数据线的状态就是要传送的数位。在时钟线为高电平期间,数据线的状态就是要传送的数据。数据线上数据的改变必须在时钟线为低电平期间完成。据。数据线上数据的改变必须在时钟线为低电平期间完成。在数据传输期间,只要时钟线为高电平,数据线都必须稳定,在数据传输期间,只要时钟线为高电平,数据线都必须稳定,否则数据线上的任何变化都当作起始或终止信号。否则数据线上的任何变化都当作起始或终止信号。I2C总线数据传送必须遵循的数据传送格式见总线数据传送必须遵循的数据传送格式见图图11
47、-10。图图11-10所示为一次完整的数据传送应答时序。根据总线规所示为一次完整的数据传送应答时序。根据总线规范,起始信号表明一次数据传送的开始,其后为寻址字节。范,起始信号表明一次数据传送的开始,其后为寻址字节。5353A A54在寻址字节后是按指定读、写的数据字节与应答位。在数据在寻址字节后是按指定读、写的数据字节与应答位。在数据传送完成后主器件都必须发送终止信号。在起始与终止信号传送完成后主器件都必须发送终止信号。在起始与终止信号之间传输的数据字节数由主器件(单片机)决定,没有字节之间传输的数据字节数由主器件(单片机)决定,没有字节数限制。数限制。55图图11-10 I2C总线一次完整的
48、数据传送应答时序总线一次完整的数据传送应答时序11.3.3 AT89S52的的I2C总线系统扩展总线系统扩展 目前,许多公司都推出带有目前,许多公司都推出带有I2C总线接口的单片机及各种外总线接口的单片机及各种外围扩展器件,常见的有围扩展器件,常见的有ATMEL公司的公司的AT24Cxx系列存储器、系列存储器、PHILIPS公司的公司的PCF8553(时钟(时钟/日历且带有日历且带有2568 RAM)和)和PCF8570(2568 RAM)、)、MAXIM公司的公司的MAX117/118(A/D转换器)和转换器)和MAX517/518/519(D/A转换器)等。转换器)等。主器件通常由带有主器
49、件通常由带有I2C总线接口的单片机来担当。从器件必总线接口的单片机来担当。从器件必须带有须带有I2C总线接口。总线接口。AT89S52单片机没有单片机没有I2C接口,可利用并接口,可利用并行行I/O口线结合软件来模拟口线结合软件来模拟I2C总线时序。因此,在许多的应用总线时序。因此,在许多的应用5656R/W57中,都将中,都将I2C总线的模拟传送作为常规的设计方法。总线的模拟传送作为常规的设计方法。图图11-11所示为所示为AT89S51单片机与具有单片机与具有I2C总线器件的扩展接总线器件的扩展接口电路。图中,口电路。图中,AT24C02为为E2PROM芯片,芯片,PCF8570为静态为静
50、态2568 RAM,PCF8574为为8位位I/O接口,接口,SAA1064为为4位位LED驱动器。虽然各种器件的原理和功能有很大的差异,但它们与驱动器。虽然各种器件的原理和功能有很大的差异,但它们与AT89S52单片机的连接是相同的。单片机的连接是相同的。58图图11-11 AT89S52单片机扩展单片机扩展I2C总线器件的接口电路总线器件的接口电路11.3.4 I2C总线数据传送的模拟总线数据传送的模拟 使用使用I2C总线进行单片机系统扩展时,多为单主器件结构,这总线进行单片机系统扩展时,多为单主器件结构,这样总线数据的传送控制比较简单,没有总线的竞争与同步,只存样总线数据的传送控制比较简