孫軼君,周 霽,周 彬
(中國電子科技集團公司第四十七研究所,沈陽110032)
I2C總線實際上已經(jīng)成為一個國際標(biāo)準(zhǔn),在超過100種不同的IC上實現(xiàn)而且得到超過50家公司的許可。在消費者電子,電訊和工業(yè)電子中,看上去不相關(guān)的設(shè)計里經(jīng)常有很多相似的地方。例如幾乎每個系統(tǒng)都包括:①一些智能控制,通常是一個單片的微控制器;②通用電路,例如LCD驅(qū)動器,遠程I/O口,RAM,EEPROM或數(shù)據(jù)轉(zhuǎn)換器;③面向應(yīng)用的電路,譬如收音機和視頻系統(tǒng)的數(shù)字調(diào)諧和信號處理電路,或者是音頻撥號電話的DTMF發(fā)生器。
為了使這些相似之處對系統(tǒng)設(shè)計者和器件廠商都得益,而且使硬件效益最大,電路最簡單,Philips開發(fā)了一個簡單的雙向兩線總線,實現(xiàn)有效的IC之間控制。這個總線就稱為InterIC或I2C總線?,F(xiàn)在Philips包括超過150種CMOS和雙極性兼容I2C總線的IC,可以執(zhí)行前面提到的三種類型的功能。所有符合I2C總線的器件組合了一個片上接口,使器件之間直接通過I2C總線通訊。這個設(shè)計概念解決了很多在設(shè)計數(shù)字控制電路時遇到的接口問題。
I2C總線支持任何IC生產(chǎn)過程(NMOS,MOS,雙極性)。兩線——串行數(shù)據(jù)(SDA)和串行時鐘(SCL)線在連接到總線的器件間傳遞信息。每個器件都有一個唯一的地址識別(無論是微控制器,LCD驅(qū)動器,存儲器或鍵盤接口),而且都可以作為一個發(fā)送器或接收器(由器件的功能決定)。很明顯,LCD驅(qū)動器只是一個接收器,而存儲器則既可以接收又可以發(fā)送數(shù)據(jù)。除了發(fā)送器和接收器外,器件在執(zhí)行數(shù)據(jù)傳輸時也可以被看作是主機或從機。主機是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號的器件。此時,任何被尋址的器件都被認為是從機。
SDA和SCL都是雙向線路,都通過一個電流源或上拉電阻連接到正的電源電壓(見圖1)。當(dāng)總線空閑時,這兩條線路都是高電平。連接到總線的器件輸出級必須是漏極開路或集電極開路才能執(zhí)行線與的功能。
圖1 標(biāo)準(zhǔn)模式器件和快速模式器件連接到I2C總線
SDA線上的數(shù)據(jù)必須在時鐘的高電平周期保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時鐘信號是低電平時才能改變。
在I2C總線中,唯一出現(xiàn)的是被定義為起始(S)和停止(P)條件(見圖2)的情況。其中一種情況是在SCL線是高電平時,SDA線從高電平向低電平切換。這個情況表示起始條件。
當(dāng)SCL是高電平時,SDA線由低電平向高電平切換表示停止條件。起始和停止條件一般由主機產(chǎn)生??偩€在起始條件后被認為處于忙的狀態(tài)。在停止條件的某段時間后,總線被認為再次處于空閑狀態(tài)。
主機只能在總線空閑的時侯啟動傳輸。兩個或多個主機可能在起始條件的最小持續(xù)時間內(nèi)產(chǎn)生一個起始條件,結(jié)果在總線上產(chǎn)生一個規(guī)定的起始條件。
當(dāng)SCL線是高電平時,仲裁在SDA線發(fā)生。這樣在其他主機發(fā)送低電平時,發(fā)送高電平的主機將斷開它的數(shù)據(jù)輸出級,因為總線上的電平與它自己的電平不相同。
依據(jù)上述規(guī)定,可以設(shè)計一個簡單的滿足I2C總線協(xié)議的電路。主要由總線控制邏輯、預(yù)分頻器、地址寄存器和移位寄存器組成(見圖2)。電路工作時由主機對總線進行控制,尋址從機,配置總線控制邏輯的狀態(tài)寄存器和控制寄存器,接收從機的數(shù)據(jù),并通過移位將數(shù)據(jù)由串行轉(zhuǎn)換成并行給數(shù)據(jù)總線。數(shù)據(jù)開始傳輸時,先由主機發(fā)送一個起始信號,主機可以在不發(fā)送結(jié)束信號的情況下再發(fā)送起始信號,重復(fù)起始信號可以使主機在不釋放總線的情況下,選擇不同的從機或改變數(shù)據(jù)的傳輸方向。然后發(fā)送一個字節(jié)的數(shù)據(jù),其中前7位是從機地址,緊跟著的是數(shù)據(jù)傳輸方向位,所有從機地址都不相同,只有與主機發(fā)出的地址相匹配的從機才會在SCL的第九個周期通過拉低SDA線給主機一個響應(yīng)。尋址成功后就傳送數(shù)據(jù),每字節(jié)數(shù)據(jù)后都跟隨一個響應(yīng)位。傳輸結(jié)束時主機發(fā)送一個結(jié)束信號,在SCL高電平時,SDA發(fā)生一個由低到高的變化為結(jié)束信號??偩€的傳輸速率與主機時鐘有關(guān),可以通過設(shè)置預(yù)分頻寄存器改變,計算公式為預(yù)分頻寄存器的值=[主機頻率/(5×總線時鐘頻率)]-1。
圖2 邏輯功能框圖
在設(shè)計芯片時也可以集成I2C總線的功能,符合I2C總線的IC允許系統(tǒng)設(shè)計快速向前推進,直接從功能結(jié)構(gòu)圖到原型。此外,由于它們直接“剪貼”到I2C總線,沒有任何額外的外部接口,所以允許簡單地通過從或者向總線“剪貼”或“不剪貼”IC來修改或升級原型系統(tǒng)。
[1]Jong Sam Lee,Leonard E Miller.CDMA 系統(tǒng)工程手冊[M].許希斌,周世東,趙明,等譯.北京:人民郵電出版社,2002.
[2]李佳.ARM系列處理器應(yīng)用技術(shù)完全手冊[M].北京:人民郵電出版社,2006.
[3]毛德操,胡希明.嵌入式—采用公開源代碼和STRONG ARM/XSCALE微處理器[M].浙江:浙江大學(xué)出版社,2003.
[4][美]斯密斯.專用集成電路[M].虞惠華,等譯.北京:電子工業(yè)出版社,2004.