在现代电子设备中,传感器、芯片和模块之间的高效通信至关重要。因此,I2C(Inter-Integrated Circuit)总线作为一种简单且可靠的串行通信协议,已成为连接各种设备的首选之一。本文将深入探讨I2C总线的工作原理与应用,带您了解这种在电子领域扮演重要角色的通信技术。
一、简介
I2C总线最初由Philips公司于上世纪80年代开发,最初用于音频和视频设备。如今,它已经成为一种国际标准,在超过100种不同的集成电路(IC)上实现,并得到50多家公司的许可。由于其简单性和广泛应用性,学习单片机后几乎每个人都会涉及到I2C总线的应用。
二、功能和特点
I2C总线是一种双向的二线制总线,用于连接IC器件之间的通信。它具有以下功能和特点:
简洁而紧凑:I2C总线只需要两根信号线,即SDA(数据线)和SCL(时钟线)。它们可以连接多个器件,占用空间非常小。总线的长度可高达25英尺(约7.6米),并且可以支持最大传输速率为10Kbps时同时连接40个组件。
多主控制:I2C总线支持多主控制,即多个器件能够进行接收和发送操作,但不能同时工作。任何能发送和接收数据的设备都可以成为主控制器,但在同一时间只有一个主控制器活动。
三种控制信号:I2C总线的传输过程中涉及三种重要的控制信号:
起始信号:当SCL为高电平时,SDA由高电平转为低电平,表示数据传输开始。
结束信号:当SCL为高电平时,SDA由低电平转为高电平,表示数据传输结束。
应答信号:接收数据的器件在接收到8位数据后,向发送数据的器件发出低电平信号,表示已成功接收。应答信号可以由主控器件或从动器件发出。
这些信号中,起始信号是必需的,而结束信号和应答信号可以根据特定应用的需要进行配置。
总结
I2C总线作为一种简单、可靠的串行通信协议,在现代电子设备中具有广泛的应用。其简洁性和紧凑性使得它成为连接各种IC器件之间的理想选择。通过起始信号、结束信号和应答信号的控制,I2C总线能够实现高效的数据传输和通信。无论是在嵌入式系统、传感器网络还是其他电子设备中,I2C总线都发挥着重要的作用。了解其工作原理和应用对于电子工程师和爱好者来说至关重要,可以帮助他们更好地设计和构建电子系统。
I2C总线的基本操作与ATMEL公司的AT24C02
三、基本操作
在这篇文章中,我们将介绍I2C总线的基本操作,以及使用ATMEL公司的AT24C02作为示例进行说明。
AT24C02是ATMEL公司推出的一款低功耗CMOS串行EEPROM。它具有256×8位的存储空间,工作电压范围广(2.5~5.5V)、擦写次数多(大于10000次)以及快速写入速度(小于10ms)等特点。在系统中,它通常作为从动器件存在。
对AT24C02的操作主要包括字节读、字节写、页面读和页面写。
首先,我们发送起始信号。如下图所示,在起始信号后必须发送控制字。
控制字的格式如下:高四位是器件类型识别符(不同芯片类型有不同定义,EEPROM通常为1010),接着的三位是片选地址位,最后一位是读写控制位。当读操作时,该位为1(Input),当写操作时,该位为0(Output)。
在控制字之后,我们进行相应的操作,无论是读还是写,都不能结束操作。如果提前结束,相当于放弃了这个操作。
让我们先看一下写操作。写操作分为字节写和页面写两种。对于页面写,根据芯片每次装载的字节不同而有所区别。对于AT24C02来说,一次装载是8个字节,每写入一个字节后,地址会自动加1。
关于页面写的地址、应答和数据传输的时序,请参见图3。字节写可以看作只有一个字节的页面写,也就是写入一个数据后停止。
需要注意的是,写入一个数据需要一定的时间,一般为10ms。在进行这个操作时,必须等待它完成。时序如下图所示。
值得注意的是,在控制字之后,还需要写入地址。这个地址将成为之后读写的起始地址。
读操作有三种基本方法:当前地址读取、随机读取和顺序读取。这三种操作方法相似,只是读取的数据个数不同。顺序读取的时序图如图4所示,图中共读取了四个数据。需要注意的是当前的地址,如果不是我们想要的地址,可以使用写操作重新写入地址。
非常重要的一点是,每读取一个数据后,必须发送低电平的SDA作为应答信号。否则,仅能读取一个数据,因为AT24C02接收不到应答信号,认为出现错误,并停止操作。
特别提醒:只有当SCL为高电平时,数据才是稳定的。因此,读取数据时必须确保SCL为高电平。
四、例程序(51汇编,测试单片机为AT89C51,12M晶振)
电路连接请参见图5。其中A0、A1和A2是地址线,本例中全部接地,所以它们都为0。由于SCL和SDA是漏极开路输出,所以在使用时需要添加上拉电阻。
五、总结
在使用I2C总线的应用中,有一些需要注意的事项:
严格按照时序图的要求进行操作。
如果与具有内部上拉电阻的单片机接口连接,则不需要额外添加上拉电阻。
为了配合传输速率,在对总线进行操作后,可以使用NOP指令添加适当的延迟。
为了减少意外的干扰信号对EEPROM数据的改写,我们可以采取以下策略:使用外部写保护引脚(如果有),或者在EEPROM内部未使用的空间中写入标志字。每次上电或复位时,都进行一次检测,以判断EEPROM是否被意外改写。
通过本文的介绍,我们对I2C总线的工作原理和应用有了更深入的理解。无论是在嵌入式系统、物联网设备还是传感器网络中,I2C总线都发挥着至关重要的作用。它简单而高效,使得设备之间的通信变得更加便捷和可靠。随着技术的不断进步,我们相信I2C总线在未来的应用领域中将继续发挥重要作用,连接各种智能设备,为我们创造更加便利和智能的生活。