I2C总线是一种用于IC器件之间连接的二线制总线,最早由Philips公司推出。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件,不管是单片机、存储器、LCD驱动器还是键盘接口。串行扩展总线有突出的优点,电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。
采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。I2C总线接口电路结构如图1所示。
当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。
在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状庙,于是这些器件将进入高电平等待的状态。
当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。在I2C总线技术规范中,开始和结束信号的定义如图2所示。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为低电平时,SDA线发生低电平到高电平的跳变为“结束”信号。
I2C总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不需要广播呼叫寻址中所提供的任何数据,则可以忽略该地址不作响应。
I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。
目前世界上采用的I2C总线有两个规范,它们分别是由荷兰PHILIPS公司和日本SONY公司提出的。现在广泛采用的是PHILIPS公司的I2C总线技术规范,它已成为被电子行业认可的总线标准。采用I2C技术的单片机以及外围器件已广泛应用于家用电器、通讯设备及各类电子产品中,而且应用范围将会越来越广。
2 IC总线应用下的EEPROH的测试方法
这里以常见的24LC02容量为2K的EEPROM芯片为例来详细介绍该总线方式下工作的EEPROM测试方法。
2.1 24LC02芯片特点
24LC02是***CERAMATE公司生产的容量为2Kbit的应用于I2C总线工作方式的EEPROM芯片,其芯片管脚定义如图3。
图中,A0、A1、A3为片选端,因为I2C总线最多可以挂接16Kbit的EEPROM,也就是说可以挂接8个24LC02芯片,其硬件地址就这三个片选端决定;WP是写保护端,在发送Word Address之前起作用。
24LC02在写入数据的时候有两种模式:Byte write和Page write,如图4。
以TESTER作为Master对24LC0写入数据,然后读取其数据验证与写入的数据是否一致。
对于24LC02的命令格式等细节,这里不再赘述,下面我们来看看24LC02的BLOCK DIAGRAM图6。
由此可知,在Byte write模式下,一次可写入8bit数据,而在Page write模式下一次可写入8bytes的数据。
2.2 24LC02的测试
根据I2C总线工作方式,我们将其测试图连接如图5。
芯片中的Start/stop Logic单元处理Start/Stop信号,控制芯片是否开始工作;S1ave address register&comparator单元译码Master发送的Slave address,完成与片选信号的比较,并设定write/read模式;Wordaddress counter单元管理要写入或读取的地址,地址由xdec和ydec单元译码成行地址和列地址,24LC02的EEPROMArray分为64行×4列字节单元。
这里我们对于一些简单的电流测试不再讨论,主要讨论功能测试。
根据以上分析,我们提出如下测试方法:
对芯片写入各种不同的字节数据来验证读取到的数据是否和写入的一致:
(1)每个字节写入随机码数据,这里随机码我们选择00~FF,共256 bytes,读取看与写入的是否一致
如果该项测试通过,说明芯片基本上工作正常,但不能保证EEPROMArray(2Kbit)所有bit位都能正常写入数据。
这里每个字节写入00-FF保证了写入每个word address的数据都不一样,其目的是验证Word address counter、xdec、ydec等单元是否能正常工作。
假设我们这里每个字节写入相同的数据(如00或FF等),那么在这种情况下,要是Word address counter无法正常工作,那么我们写入或读取的可能是部分地址所指向的EEpromArray中的bit位,而且无法保证xdec和ydec能正常解码行地址和列地址,譬如说我们对“10101010”word address所指向的字节写入00,如果读取“101010”这个地址数据时,Word address counter、xdec、ydec任意单元发生了错误,那么最终我们读取到的数据就不是“10101010”这个地址所指向的字节数据,也就是说因为每个字节数据是一样的,所以即使写入和读取的地址发生了错位,我们也会认为测试是通过的。
由此可见,要保证Word address counter、xdec、ydec等单元正常工作,我们写入的数据必须满足下列三个条件:
①写入EEPROM Array的每一行数据不一样(验证xdec单元);
②写入EEPROM Array的每一列数据不一样(验证ydec单元);
③写入EEPROM Array的每一个字节数据不一样(验证Word address counter单元);
这就是我们选择写入00~FF的理由(当然也可以选择写入其他数据,只要符合上述最后一个条件即可)。
(2)每个字节写入数据00,读取看是否与写入的一致
通过上述第一项测试,其实已经可以基本保证芯片各单元能正常工作,接下来只需测试验证EEPROM Array(2Kbit)中的每个bit位是否良好,这里写入数据00,可排除EEPROM Array(2Kbit)中恒为“1”的bit位。
(3)每个字节写入数据FF,读取看是否与写入的一致
可排除EEPROM Array(2Kbit)中恒为“0”的b“位。
(4)从00H地址开始写入4个字节55,接着写入4个字节AA,如此重复,直至写满256个字节,读取看是否与写入的一致。
EEPROM Array中相邻bit位(包括行相邻、列相邻、对角线相邻)会互相影响。
而24LC02的EEPROM Array分为4列×64行×8bit,所以我们写入上述的数据使得每个相邻bit位的数据都不一样,经过该项测试可排除相邻bit位的数据窜扰。最好是再测试一下写入4个字节AA,写入4个字节55……,看读取与写入的是否一致。
到此我们完成了全部的功能测试。24LC02读写时有page write、byte write、random read、Sequentialread等各种工作模式以及writeprotect功能,这些测试都比较简单,这里就不再一一赘述了。
3 由此,我们概括出EEPROM的一般测试方法:
(1)每个字节写入random code,读取验证是否与写入时一致,从而测试Word address counter、xdec、ydec等单元是否能正常工作;Random code需要满足下面这个条件:写入EEPROMArray的每一个字节数据不一样。
(2)每个字节写入数据00或FF,读取验证是否与写入时一致,排除EEPROM Array中恒“0”或恒“1”的bit位。
(3)对EEPROM Array写入相邻bit位(包括行相邻、列相邻、对角线相邻)都不一样的数据,读取验证是否与写入时一致,排除相邻bit位的数据窜扰。
评论
查看更多