大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了使用无线遥控模块的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习IIC总线的基本原理与应用实例。

        先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。

study board图1 51单片机综合学习系统

    上图是我们将要使用的51单片机综合学习系统硬件平台,如图1所示,本期实验我们用到了综合系统主机、板载的AT24C02芯片,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。

    在很多电子设备中都有要随时存取数据作为历史记录或标志位。目前常用的存储器有24CXX系列和93CXX系列,前者是I2C总线结构,后者是SPI总线结构,本小节先介绍I2C结构的EEPROM(24CXX)作用方法,在后面小节中再介绍SPI结构的EEPROM(93CXX)使用方法。

I2C总线基本概念

    I2C总线,是INTERINTEGRATEDCIRCUITBUS的缩写,即“内部集成电路总线”。I2C总线是Philips公司推出的一种双向二线制总线。目前Philips公司和其它集成电路制造商推出了很多基于I2C总线的外围器件。I2C总线包括一条数据线(SDA)和一条时钟线(SCL)。协议允许总线接入多个器件,并支持多主工作。总线中的器件既可以作为主控器也可以作为被控器,既可以是发送器也可以是接收器。总线按照一定的通信协议进行数据交换。在每次数据交换开始,作为主控器的器件需要通过总线竞争获得主控权,并启动一次数据交换。系统中各个器件都具有唯一的地址,各器件之间通过寻址确定数据接收方。

I2C总线的系统结构

    一个典型的I2C总线标准的IC器件,其内部不仅有I2C接口电路,还可将内部各单元电路划分成若干相对独立的模块,它只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。CPU可以通过指令对各功能模块进行控制。。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I 2 C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器)。CPU发出的控制信号分为地址码和控制量(数据)两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线接口电路如下图2所示。

sch

图2 I2C总线接口电路图

    I2C总线的器件分为主器件和从器件。主器件的功能是启动在总线上传送数据,并产生时钟脉冲,以允许与被寻址的器件进行数据传送。被寻址的器件,称为从器件。一般来讲,任何器件均可以成为从器件,只有微控制器才能称为主器件。主、从器件对偶出现,工作在接收还是发送数据方式,由器件的功能和数据传送方向所决定。

    I2C总线允许连接多个微控制器,显然不能同时存在两个主器件,先控制总线的器件成为主器件,这就是总线竞争。在竞争过程中数据不会被破坏、丢失。数据只能在主、从器件中传送,结束后,主、从器件将释放总线,退出主、从器件角色。

I2C总线接口特性

    传统的单片机串行接口的发送和接收一般都分别各用一条线,如MCS-51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂在总线上的主器件送出的地址和数据决定,在总线上,既没有中心机也没有优先级。

    总线上主和从(即发送和接收)的关系取决于此时数据传送的方向。SDA 和SCL 都是双向线路,都通过一个电流源或上拉电阻连接到电源端。连接总线器件的输出级必须是集电极或漏极开路,以具有线“与”功能,当总线空闲时,两根线都是高电平。I2C总线上数据的传输速率在标准模式下可达100kbit/s 在快速模式下可达400kbit/s 在高速模式下可达3.4Mbit/s 连接到总线的接口数量只由总线电容是400pF 的限制决定。

I2C总线器件工作原理及时序

I2C总线的时钟信号

    在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号变为低电平,将使SCL线上所有器件开始并保护低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不影响SCL线的状态,这些器件将进入高电平等待的状态。

    当所有器件的时钟信号都变为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件决定,而时钟高电平时间由时钟高电平期最短的器件决定。

I2C总线的传输协议与数据传送

起始和停止条件

在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图3所示。

开始信号:当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳变,开始传送数据。

结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变,结束传送数据。

开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其它器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间过,总线被认为是空闲的。

 

sch

图3超始和停止信号图

数据格式

    I2C总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上高、低电平能变化,在高电平期间,SDA上数据必须保护稳定,以便接收器采样接收,时序如图4所示。

sch

图4 数据传送时序图

    I2C总线发送器送到SDA线上的每个字节必须为8位长,传送时高位在前,低位在后。与之对应,主器件在SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器释放SDA线,接收器把SDA线拉低,以给出一个接收确认位;第9个脉冲高电平期间,发送器收到这个确认位然后开始下一字节的传送,下一个字节的第一个脉冲低电平期间接收器释放SDA。每个字节需要9个脉冲,每次传送的字节数是不受限制的。

    I2C总线的数据传送格式是在I2C总线开始信号后,送出的第一字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件中;方向位为“1”表示主器件将从从器件读信息。格式如下:

1

0

1

0

A2

A1

A0

R/W

注:前四位固定为1010。

    开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)决定。发送完第一个字节后再开始发数据信号。

响应

    数据传输必须带响应。相关的响应时钟脉冲由主机产生,当主器件发送完一字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,此时钟内主器件释放SDA线,一字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。

    通常被寻址的接收器在接收到的每个字节后必须产生一个响应。当从机不能响应从机地址时,从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平主机产生一个停止或重复起始条件。完整的数据传送过程如图5所示。

sch

图5 完整的数据传送过程

    I2C总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不需要广播呼叫寻址中所提供的任何数据,则可以忽咯该地址不作响应。如果该器件需要广播呼叫寻址中按需提供的数据,则应对地址作出响应,其表现为一个接收器。

24C系列存储器的软硬件设计实例

    IIC总线常用的芯片有24C01、24C02、24C04、24C08等,下面以目前在单片机系统中常用的带I2C接口的EEPROM芯片AT24C02为例,介绍I2C器件的基本应用,不同型号的24C芯片,只是容量大小不同,读写方式与基本原理几乎一样。

AT24C02简介

    AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。AT24C02中带有片内寻址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的操作。所有字节都以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8字节的数据。图6为AT24C系列芯片的封装图。各引脚功能如下:

24c02

图6 24C系列芯片封装图

SCL:串行时钟。在该引脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。

SDA:串行数据。该引脚为开漏极驱动,可双向传送数据。

A0、A1、A2:器件/页面寻址。为器件地址输入端。

WP:硬件写保护。当该引脚为高电平时禁止写入,当为低电平时可正常读写数据。

VCC:电源。一般输入+5V电压。

VSS:接地。

程序功能

    本例的程序功能是利用单片机与24C02进行I2C通信,实现对某一地址内数据的读写校验操作。

    本程序先对地址0x01和0x02地址内写入数据0x55和0xAA,然后读其中一个地址内的数据,并在数码管上显示验证。本程序默认是读取0x02地址内的数据,读者也可以改变地址来读取其它空间内的数据。本实验进行前要先将实验板上功能选择开关调到24C**位置上,如图7所示,程序执行效果如图8所示。

 

study board图7

study board

图8 24C02实验演示图

硬件原理图

 

sch

图9 硬件原理图

程序流程图

 

sch

图10 程序流程图

    相信看到这里,你应该可以理解我们是如何利用单片机来进行IIC总线的读写操作了,你也可以根据自己的需要来写芯片读写、存储的相关程序。由于篇幅有限,读者朋友可以通过网站或电子邮件一起交流与学习。在下几期中,我们将陆续介绍51单片机综合学习系统的其它功能原理与应用。