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位的數據竄擾。
評論
查看更多