摘要:I2C總線是最早由PHILIPS公司推出的新一代串行擴展總線,廣泛應(yīng)用于IC器件之間的連接,。本文在分析了I2C總線的工作原理及其特點后,,通過對臺灣CERAMATE公司生產(chǎn)的2Kbits的串行EEPROM芯片24LC02的測試實例分析,提出了I2C總線應(yīng)用下的EEPROM的一般測試方法,。
關(guān)鍵詞:EEPROM測試,;I2C總線,;24LC02
中圖分類號:TN407 文獻標(biāo)識碼:A 章編號:1003-353X(2004)04-0031-04
1 I2C總線的工作原理及其特點
I2C總線是一種用于IC器件之間連接的二線制總線,最早由Philips公司推出,。它通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,,并根據(jù)地址識別每個器件,不管是單片機,、存儲器,、LCD驅(qū)動器還是鍵盤接口。串行擴展總線有突出的優(yōu)點,,電路結(jié)構(gòu)簡單,,程序編寫方便,易于實現(xiàn)用戶系統(tǒng)軟硬件的模塊化,、標(biāo)準(zhǔn)化等,。
采用I2C總線標(biāo)準(zhǔn)的單片機或IC器件,其內(nèi)部不僅有I2C接口電路,,而且將內(nèi)部各單元電路按功能劃分為若干相對獨立的模塊,,通過軟件尋址實現(xiàn)片選,減少了器件片選線的連接,。I2C總線接口電路結(jié)構(gòu)如圖1所示,。
|
當(dāng)某個器件向總線上發(fā)送信息時,它就是發(fā)送器(也叫主器件),,而當(dāng)其從總線上接收信息時,,又成為接收器(也叫從器件)。主器件用于啟動總線上傳送數(shù)據(jù)并產(chǎn)生時鐘以開放傳送的器件,,此時任何被尋址的器件均被認(rèn)為是從器件,。I2C總線的控制完全由掛接在總線上的主器件送出的地址和數(shù)據(jù)決定。在總線上,,既沒有中心機,也沒有優(yōu)先機,。
在I2C總線上傳送信息時的時鐘同步信號是由掛接在SCL時鐘線上的所有器件的邏輯“與”完成的,。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘信號下跳為低電平,將使SCL線一直保持低電平,使SCL線上的所有器件開始低電平期。此時,低電平周期短的器件的時鐘由低至高的跳變并不能影響SCL線的狀廟,,于是這些器件將進入高電平等待的狀態(tài),。
當(dāng)所有器件的時鐘信號都上跳為高電平時,低電平期結(jié)束,,SCL線被釋放返回高電平,,即所有的器件都同時開始它們的高電平期。其后,,第一個結(jié)束高電平期的器件又將SCL線拉成低電平,。這樣就在SCL線上產(chǎn)生一個同步時鐘,。可見,,時鐘低電平時間由時鐘低電平期最長的器件確定,,而時鐘高電平時間由時鐘高電平期最短的器件確定。在I2C總線技術(shù)規(guī)范中,,開始和結(jié)束信號的定義如圖2所示,。當(dāng)時鐘線SCL為高電平時,數(shù)據(jù)線SDA由高電平跳變?yōu)榈碗娖蕉x為“開始”信號,;當(dāng)SCL線為低電平時,,SDA線發(fā)生低電平到高電平的跳變?yōu)?ldquo;結(jié)束”信號。
|
I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能,。若一個器件不需要廣播呼叫尋址中所提供的任何數(shù)據(jù),,則可以忽略該地址不作響應(yīng)。
I2C總線具有多主控能力,,可以對發(fā)生在SDA線上的總線競爭進行仲裁,,其仲裁原則是這樣的:當(dāng)多個主器件同時想占用總線時,如果某個主器件發(fā)送高電平,,而另一個主器件發(fā)送低電平,,則發(fā)送電平與此時SDA總線電平不符的那個器件將自動關(guān)閉其輸出級??偩€競爭的仲裁是在兩個層次上進行的,。首先是地址位的比較,如果主器件尋址同一個從器件,,則進入數(shù)據(jù)位的比較,,從而確保了競爭仲裁的可靠性。
目前世界上采用的I2C總線有兩個規(guī)范,,它們分別是由荷蘭PHILIPS公司和日本SONY公司提出的?,F(xiàn)在廣泛采用的是PHILIPS公司的I2C總線技術(shù)規(guī)范,它已成為被電子行業(yè)認(rèn)可的總線標(biāo)準(zhǔn),。采用I2C技術(shù)的單片機以及外圍器件已廣泛應(yīng)用于家用電器,、通訊設(shè)備及各類電子產(chǎn)品中,而且應(yīng)用范圍將會越來越廣,。
2 IC總線應(yīng)用下的EEPROH的測試方法
這里以常見的24LC02容量為2K的EEPROM芯片為例來詳細(xì)介紹該總線方式下工作的EEPROM測試方法,。
2.1 24LC02芯片特點
24LC02是臺灣CERAMATE公司生產(chǎn)的容量為2Kbit的應(yīng)用于I2C總線工作方式的EEPROM芯片,其芯片管腳定義如圖3,。
|
圖中,,A0、A1,、A3為片選端,,因為I2C總線最多可以掛接16Kbit的EEPROM,,也就是說可以掛接8個24LC02芯片,其硬件地址就這三個片選端決定,;WP是寫保護端,,在發(fā)送Word Address之前起作用。
24LC02在寫入數(shù)據(jù)的時候有兩種模式:Byte write和Page write,,如圖4,。
|
以TESTER作為Master對24LC02寫入數(shù)據(jù),然后讀取其數(shù)據(jù)驗證與寫入的數(shù)據(jù)是否一致,。
對于24LC02的命令格式等細(xì)節(jié),,這里不再贅述,下面我們來看看24LC02的BLOCK DIAGRAM圖6,。
由此可知,,在Byte write模式下,一次可寫入8bit數(shù)據(jù),,而在Page write模式下一次可寫入8bytes的數(shù)據(jù),。
2.2 24LC02的測試
根據(jù)I2C總線工作方式,我們將其測試圖連接如圖5,。
|
|
芯片中的Start/stop Logic單元處理Start/Stop信號,,控制芯片是否開始工作;S1ave address register&comparator單元譯碼Master發(fā)送的Slave address,,完成與片選信號的比較,,并設(shè)定write/read模式;Wordaddress counter單元管理要寫入或讀取的地址,,地址由xdec和ydec單元譯碼成行地址和列地址,,24LC02的EEPROMArray分為64行×4列字節(jié)單元。
這里我們對于一些簡單的電流測試不再討論,,主要討論功能測試,。
根據(jù)以上分析,我們提出如下測試方法:
對芯片寫入各種不同的字節(jié)數(shù)據(jù)來驗證讀取到的數(shù)據(jù)是否和寫入的一致:
(1)每個字節(jié)寫入隨機碼數(shù)據(jù),,這里隨機碼我們選擇00~FF,,共256 bytes,讀取看與寫入的是否一致
如果該項測試通過,,說明芯片基本上工作正常,但不能保證EEPROMArray(2Kbit)所有bit位都能正常寫入數(shù)據(jù),。
這里每個字節(jié)寫入00-FF保證了寫入每個word address的數(shù)據(jù)都不一樣,,其目的是驗證Word address counter、xdec,、ydec等單元是否能正常工作,。
假設(shè)我們這里每個字節(jié)寫入相同的數(shù)據(jù)(如00或FF等),,那么在這種情況下,要是Word address counter無法正常工作,,那么我們寫入或讀取的可能是部分地址所指向的EEpromArray中的bit位,,而且無法保證xdec和ydec能正常解碼行地址和列地址,譬如說我們對“10101010”word address所指向的字節(jié)寫入00,,如果讀取“101010”這個地址數(shù)據(jù)時,,Word address counter、xdec,、ydec任意單元發(fā)生了錯誤,,那么最終我們讀取到的數(shù)據(jù)就不是“10101010”這個地址所指向的字節(jié)數(shù)據(jù),也就是說因為每個字節(jié)數(shù)據(jù)是一樣的,,所以即使寫入和讀取的地址發(fā)生了錯位,,我們也會認(rèn)為測試是通過的。
由此可見,,要保證Word address counter,、xdec、ydec等單元正常工作,,我們寫入的數(shù)據(jù)必須滿足下列三個條件:
①寫入EEPROM Array的每一行數(shù)據(jù)不一樣(驗證xdec單元),;
②寫入EEPROM Array的每一列數(shù)據(jù)不一樣(驗證ydec單元);
③寫入EEPROM Array的每一個字節(jié)數(shù)據(jù)不一樣(驗證Word address counter單元),;
這就是我們選擇寫入00~FF的理由(當(dāng)然也可以選擇寫入其他數(shù)據(jù),,只要符合上述最后一個條件即可)。
(2)每個字節(jié)寫入數(shù)據(jù)00,,讀取看是否與寫入的一致
通過上述第一項測試,,其實已經(jīng)可以基本保證芯片各單元能正常工作,接下來只需測試驗證EEPROM Array(2Kbit)中的每個bit位是否良好,,這里寫入數(shù)據(jù)00,,可排除EEPROM Array(2Kbit)中恒為“1”的bit位。
(3)每個字節(jié)寫入數(shù)據(jù)FF,,讀取看是否與寫入的一致
可排除EEPROM Array(2Kbit)中恒為“0”的b“位,。
(4)從00H地址開始寫入4個字節(jié)55,接著寫入4個字節(jié)AA,,如此重復(fù),,直至寫滿256個字節(jié),讀取看是否與寫入的一致,。
EEPROM Array中相鄰bit位(包括行相鄰,、列相鄰、對角線相鄰)會互相影響。
而24LC02的EEPROM Array分為4列×64行×8bit,,所以我們寫入上述的數(shù)據(jù)使得每個相鄰bit位的數(shù)據(jù)都不一樣,,經(jīng)過該項測試可排除相鄰bit位的數(shù)據(jù)竄擾。最好是再測試一下寫入4個字節(jié)AA,,寫入4個字節(jié)55……,,看讀取與寫入的是否一致。
到此我們完成了全部的功能測試,。24LC02讀寫時有page write,、byte write、random read,、Sequentialread等各種工作模式以及writeprotect功能,,這些測試都比較簡單,這里就不再一一贅述了,。
由此,,我們概括出EEPROM的一般測試方法:
(1)每個字節(jié)寫入random code,讀取驗證是否與寫入時一致,,從而測試Word address counter,、xdec、ydec等單元是否能正常工作,;Random code需要滿足下面這個條件:寫入EEPROMArray的每一個字節(jié)數(shù)據(jù)不一樣,。
(2)每個字節(jié)寫入數(shù)據(jù)00或FF,讀取驗證是否與寫入時一致,,排除EEPROM Array中恒“0”或恒“1”的bit位,。
(3)對EEPROM Array寫入相鄰bit位(包括行相鄰、列相鄰,、對角線相鄰)都不一樣的數(shù)據(jù),,讀取驗證是否與寫入時一致,排除相鄰bit位的數(shù)據(jù)竄擾,。