專利名稱:在通信設(shè)備中操作多個(gè)i2c從器件的裝置及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)通信領(lǐng)域,特別是涉及一種在計(jì)算機(jī)網(wǎng)絡(luò)通信設(shè)備中操作多個(gè)I2C從器件的方法。
背景技術(shù):
在計(jì)算機(jī)網(wǎng)絡(luò)通信設(shè)備中,具有I2C總線(INTER-IC BUS或IC TO BUS)接口的器件應(yīng)用越來(lái)越多,I2C總線接口具有信號(hào)線少、操作方便的優(yōu)點(diǎn)。一般的對(duì)I2C操作方法是依靠不同的器件地址來(lái)區(qū)分器件,I2C總線上的每個(gè)器件都有唯一的器件地址。有的器件地址是靠本身外部硬件配置,而有的器件地址是制造商固化在芯片內(nèi)部的,不可配置。在實(shí)際應(yīng)用中,會(huì)用到多個(gè)同一器件地址且不可配置的I2C從器件。比如小封裝可插拔光模塊(SFP,SmallForm-Factor Pluggable)的I2C從器件地址已由制造商固定為“000”,無(wú)法由外部設(shè)定。這種情況下,如果按標(biāo)準(zhǔn)的I2C總線的結(jié)構(gòu)連接,將無(wú)法區(qū)分每一個(gè)器件。
一種現(xiàn)有技術(shù)是給每個(gè)I2C從器件提供一個(gè)I2C接口,系統(tǒng)控制器或CPU對(duì)每個(gè)接口分別進(jìn)行操作。這種方法的缺點(diǎn)是占用系統(tǒng)資源較多。當(dāng)系統(tǒng)接有數(shù)十個(gè)具有相同器件地址的I2C從器件時(shí),采用這種方式會(huì)占用大量的系統(tǒng)硬件資源。
另一種現(xiàn)有技術(shù)是用邏輯器件和模擬開關(guān)相結(jié)合,用邏輯器件做單刀多擲開關(guān),控制CPUI2C總線接口的串行時(shí)鐘線(SCL,Serial Clock Line)與I2C從器件的串行時(shí)鐘線相連;模擬開關(guān)用來(lái)控制分組的I2C從器件的串行數(shù)據(jù)信號(hào)線(SDA,Serial DAta)與CPU的I2C接口的串行數(shù)據(jù)信號(hào)線相連。這樣分別對(duì)每個(gè)I2C從器件操作。此方式的缺點(diǎn)是所增硬件設(shè)備多,若CPU無(wú)I2C總線接口,則無(wú)法實(shí)現(xiàn)對(duì)I2C從器件的操作。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種在通信設(shè)備中操作多個(gè)I2C從器件的設(shè)備及其方法,使得CPU在無(wú)I2C總線接口的情形下也能實(shí)現(xiàn)對(duì)I2C從器件的操作,并且實(shí)現(xiàn)高效低成本的目的。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種在通信設(shè)備中操作多個(gè)I2C從器件的裝置,包括有一邏輯器件、多個(gè)I2C從器件、CPU,其特點(diǎn)在于,所述CPU與所述邏輯器件以總線方式相連,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行時(shí)鐘線都與所述邏輯器件的同一個(gè)時(shí)鐘線管腳連接,每個(gè)I2C接口的串行數(shù)據(jù)線分別與所述邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接;并且,所述邏輯器件內(nèi)部包括有一時(shí)鐘寄存器,其輸出端連接至所述邏輯器件的時(shí)鐘線管腳,與所述多個(gè)從器件的串行時(shí)鐘線對(duì)應(yīng);多個(gè)數(shù)據(jù)寄存器,每個(gè)數(shù)據(jù)寄存器的輸出端與所述數(shù)據(jù)線管腳之間均設(shè)置一電子開關(guān),該電子開關(guān)的輸出端連接所述邏輯器件的數(shù)據(jù)線管腳,分別與所述多個(gè)I2C從器件的I2C接口的串行數(shù)據(jù)線對(duì)應(yīng),每一電子開關(guān)通過一輸入輸出狀態(tài)寄存器控制該電子開關(guān)的閉合和斷開,以連通所述數(shù)據(jù)寄存器的輸出端與所述邏輯器件的數(shù)據(jù)線管腳;其中,所述時(shí)鐘寄存器、數(shù)據(jù)寄存器、輸入輸出狀態(tài)寄存器均可被所述CPU操作,所述數(shù)據(jù)線管腳的狀態(tài)也可由CPU通過所述邏輯器件讀?。凰鯟PU通過訪問所述邏輯器件內(nèi)部與所述I2C從器件的串行時(shí)鐘線和串行數(shù)據(jù)線對(duì)應(yīng)的寄存器來(lái)實(shí)現(xiàn)對(duì)一個(gè)或多個(gè)I2C從器件的操作。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的裝置,其特點(diǎn)在于,對(duì)于未設(shè)置有內(nèi)部上拉電阻的接口線,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行數(shù)據(jù)線還分別通過一上拉電阻與所述接口的供電電源連接。
本發(fā)明還提供了一種在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,該方法包括如下步驟步驟一,設(shè)置一CPU與一邏輯器件以總線方式連接,并將所述多個(gè)I2C從器件的每個(gè)I2C從器件的串行數(shù)據(jù)線分別與所述邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接,每個(gè)I2C從器件的串行時(shí)鐘線都與所述邏輯器件的同一個(gè)時(shí)鐘線管腳連接;步驟二,在所述邏輯器件內(nèi)用多個(gè)數(shù)據(jù)寄存器分別與所述邏輯器件的多個(gè)不同的數(shù)據(jù)線管腳對(duì)應(yīng),每個(gè)數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳之間設(shè)置一電子開關(guān),由該電子開關(guān)狀態(tài)決定是否連通所述數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳,另設(shè)置有一輸入輸出狀態(tài)寄存器控制每一電子開關(guān)的狀態(tài);并用一個(gè)時(shí)鐘寄存器與所述邏輯器件的對(duì)應(yīng)的時(shí)鐘線管腳對(duì)應(yīng);步驟三,當(dāng)CPU需要操作I2C從器件時(shí),按I2C總線規(guī)范的時(shí)序,分別訪問對(duì)應(yīng)于所述邏輯器件的數(shù)據(jù)寄存器和時(shí)鐘寄存器以及輸入輸出狀態(tài)寄存器,以使需操作的I2C從器件的串行數(shù)據(jù)線和串行時(shí)鐘線與標(biāo)準(zhǔn)的I2C總線主設(shè)備的串行數(shù)據(jù)線和串行時(shí)鐘線的作用相同,從而實(shí)現(xiàn)CPU對(duì)I2C從器件的操作。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在步驟一中,對(duì)于未設(shè)置有內(nèi)部上拉電阻的接口線,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行數(shù)據(jù)線還分別通過一上拉電阻與所述接口的供電電源連接。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在步驟二中,相對(duì)所述邏輯器件來(lái)說,當(dāng)需要所述數(shù)據(jù)線管腳作為輸出時(shí),所述電子開關(guān)閉合,數(shù)據(jù)線管腳輸出內(nèi)容來(lái)自對(duì)應(yīng)的數(shù)據(jù)寄存器的輸出;當(dāng)不需要所述數(shù)據(jù)線管腳作為輸出時(shí),所述電子開關(guān)斷開;當(dāng)需要所述數(shù)據(jù)線管腳作為輸入時(shí),所述電子開關(guān)也斷開,所述數(shù)據(jù)線管腳的電平狀態(tài),可由CPU通過所述邏輯器件讀取;并且,當(dāng)輸入輸出狀態(tài)寄存器的輸出為高電平時(shí),所述電子開關(guān)閉合,當(dāng)輸入輸出狀態(tài)寄存器的輸出為低電平時(shí),所述電子開關(guān)斷開。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在步驟三中,當(dāng)CPU需往所述多個(gè)I2C從器件中任一從器件的寄存器中寫入數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需寫入數(shù)據(jù)的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需寫入的寄存器地址,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則向該I2C從器件寫入所需寫入的數(shù)據(jù),并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;
CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則表示寫入數(shù)據(jù)成功,停止操作,否則發(fā)送出錯(cuò)報(bào)告并停止操作。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在步驟三中,當(dāng)CPU需讀取所述多個(gè)I2C從器件中任一從器件的寄存器中的數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需讀取的寄存器地址,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則再次開始操作,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則開始讀取數(shù)據(jù),并在讀取數(shù)據(jù)完畢后停止操作,否則發(fā)送出錯(cuò)報(bào)告并停止操作。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在步驟三中,當(dāng)CPU需連續(xù)讀取所述多個(gè)I2C從器件中任一從器件的寄存器中地址為0~N的N+1個(gè)字節(jié)的數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需讀取的寄存器地址的初始地址0,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;再次開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則賦值0給一變量L,并開始讀取寄存器地址為0中的數(shù)據(jù),并在讀取完該寄存器地址為0的數(shù)據(jù)后將該變量L加1后重新賦值予該變量L,同時(shí)向該I2C從器件發(fā)送低電平的應(yīng)答信息,并讀取下一地址中的數(shù)據(jù),如此循環(huán)直至該變量L的值等于N,此時(shí)向該I2C從器件發(fā)送高電平的非應(yīng)答信息,并停止操作,結(jié)束操作。
上述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特點(diǎn)在于,在器件地址操作中,只操作對(duì)應(yīng)所述邏輯器件中對(duì)應(yīng)的數(shù)據(jù)寄存器,并配合操作所述邏輯器件中的時(shí)鐘寄存器。
與現(xiàn)有技術(shù)相比,本發(fā)明通過多個(gè)I2C從器件的I2C接口的SCL接到邏輯器件上,多個(gè)I2C從器件的每個(gè)I2C接口的SDA分別接到邏輯器件的IO上,CPU通過訪問邏輯器件內(nèi)部與SCL和SDA對(duì)應(yīng)的寄存器來(lái)實(shí)現(xiàn)對(duì)一個(gè)或多個(gè)I2C從器件的操作。不論CPU有沒有I2C總線接口,都可實(shí)現(xiàn)對(duì)多個(gè)I2C從器件的操作。方便靈活,速度快,硬件成本低。
以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
圖1為本發(fā)明裝置的硬件連接結(jié)構(gòu)圖;圖2為本發(fā)明的邏輯器件內(nèi)部控制SDA、SCL線的寄存器示意圖;圖3為本發(fā)明連續(xù)讀I2C從器件方法的流程圖;圖4為本發(fā)明寫I2C從器件任一寄存器的方法的流程圖;圖5為本發(fā)明讀I2C從器件任一寄存器的方法的流程圖。
具體實(shí)施例方式
本發(fā)明的硬件連接方式見圖1,包括有CPU10、邏輯器件20、多個(gè)I2C從器件30,其中所述多個(gè)I2C從器件都具有一個(gè)I2C接口,每個(gè)I2C接口包括有串行時(shí)鐘線321和串行數(shù)據(jù)線323,用以與所述邏輯器件20連接。每個(gè)I2C從器件30的串行數(shù)據(jù)線323分別與邏輯器件20的不同IO管腳(以下標(biāo)稱為數(shù)據(jù)線管腳)相連,標(biāo)稱為SDA1,SDA2,……,SDAn。其中,SDA1,SDA2,……,SDAn分別用一上拉電阻R拉至接口信號(hào)的供電電源VDD上;若與接口線上帶內(nèi)部上拉電阻的接口連接,可以不外加上拉電阻。每個(gè)I2C從器件30的串行時(shí)鐘線321都與邏輯器件的同一IO管腳(以下標(biāo)稱為時(shí)鐘線管腳)相連,標(biāo)稱為SCL;邏輯器件20與CPU10通過接口以總線方式相連,以使CPU10能訪問邏輯器件20的寄存器和管腳狀態(tài)。
在邏輯器件20內(nèi)部的與SCL線和SDAm(m=1,2,...,n)線相對(duì)應(yīng)的寄存器和這些寄存器與SCL、SDAm(m=1,2,...,n)之間的邏輯關(guān)系如圖2所示,該邏輯器件20內(nèi)部包括有一時(shí)鐘寄存器21,標(biāo)稱為Reg_SCL,其輸出端連接至所述邏輯器件20的時(shí)鐘線管腳,與所述多個(gè)I2C從器件30的串行時(shí)鐘線321對(duì)應(yīng)。
多個(gè)數(shù)據(jù)寄存器22,標(biāo)稱為Reg_SDAm(m=1,2,...,n),共n個(gè),每個(gè)數(shù)據(jù)寄存器22的輸出端與所述數(shù)據(jù)線管腳之間均設(shè)置一電子開關(guān)23,該電子開關(guān)23的輸出端連接所述邏輯器件20的數(shù)據(jù)線管腳,分別與所述多個(gè)I2C從器件30的I2C接口的串行數(shù)據(jù)線323對(duì)應(yīng),每一電子開關(guān)23通過一輸入輸出狀態(tài)寄存器(標(biāo)稱為Reg_inout)24控制該電子開關(guān)23的閉合和斷開,以連通所述數(shù)據(jù)寄存器22的輸出端與所述邏輯器件20的數(shù)據(jù)線管腳。
由于在I2C總線規(guī)范中,總線協(xié)議有嚴(yán)格的時(shí)序要求??偩€工作時(shí),由時(shí)鐘控制線SCL傳送時(shí)鐘脈沖,由串行數(shù)據(jù)線SDA傳送數(shù)據(jù)??偩€傳送的每幀數(shù)據(jù)均為一個(gè)字節(jié)(8bit),但啟動(dòng)I2C總線后,傳送的字節(jié)個(gè)數(shù)沒有限制,只要求每傳送一個(gè)字節(jié)后,對(duì)方回應(yīng)一個(gè)應(yīng)答位(Acknowledge Bit)。發(fā)送數(shù)據(jù)時(shí)首先發(fā)送數(shù)據(jù)的最高位(MSB)。
I2C總線協(xié)議規(guī)定,啟動(dòng)總線后第一個(gè)字節(jié)的高7位是從器件的尋址地址,第8位為方向位(“0”表示主器件對(duì)從器件的寫操作;“1”表示主器件對(duì)從器件的讀操作),其余的字節(jié)為操作的數(shù)據(jù)??偩€每次傳送開始時(shí)有起始信號(hào),結(jié)束時(shí)有停止信號(hào)。在總線傳送完一個(gè)或幾個(gè)字節(jié)后,可以使SCL線的電平變低,從而使傳送暫停。
依據(jù)I2C總線的傳輸協(xié)議,總線工作時(shí)的具體時(shí)序如下起始信號(hào)(S)在時(shí)鐘線SCL為高電平期間,數(shù)據(jù)線SDA出現(xiàn)由高電平向低電平的變化,用于啟動(dòng)I2C總線,準(zhǔn)備開始傳送數(shù)據(jù);停止信號(hào)(P)在時(shí)鐘線SCL為高電平期間,數(shù)據(jù)線SDA出現(xiàn)由低電平向高電平的變化,用于停止I2C總線上的數(shù)據(jù)傳送;應(yīng)答信號(hào)(A)I2C總線的第9個(gè)脈沖對(duì)應(yīng)應(yīng)答位,若SDA線上顯示低電平則為總線“應(yīng)答”(A),若SDA線上顯示高電平則為“非應(yīng)答”(/A);數(shù)據(jù)位傳送I2C總線起始信號(hào)或應(yīng)答信號(hào)之后的第1~8個(gè)時(shí)鐘脈沖對(duì)應(yīng)一個(gè)字節(jié)的8位數(shù)據(jù)傳送。在脈沖高電平期間,數(shù)據(jù)串行傳送;在脈沖低電平期間,數(shù)據(jù)準(zhǔn)備,允許總線上數(shù)據(jù)電平變化。
因此,本發(fā)明中當(dāng)CPU需要操作I2C從器件時(shí),按I2C總線規(guī)范的時(shí)序,由CPU分別訪問邏輯器件中數(shù)據(jù)寄存器Reg_SDAm、時(shí)鐘寄存器Reg_SCL和輸入輸出狀態(tài)寄存器Reg_inout,以使數(shù)據(jù)線SDAm和時(shí)鐘線SCL產(chǎn)生與標(biāo)準(zhǔn)的I2C總線主設(shè)備的SDA、SCL相同的作用,如產(chǎn)生起始、停止條件,應(yīng)答,數(shù)據(jù)傳送等作用。
在本發(fā)明的邏輯器件20中,I2C從器件30的SCL線由時(shí)鐘寄存器Reg_SCL控制,Reg_SCL輸出為‘1’時(shí),SCL為高電平,Reg_SCL輸出為‘0’時(shí),SCL為低電平,Reg_SCL輸出從‘0’變?yōu)椤?’時(shí),SCL為正跳沿,Reg_SCL輸出從‘1’變?yōu)椤?’時(shí),SCL為負(fù)跳沿。
相對(duì)邏輯器件20來(lái)說,當(dāng)需要數(shù)據(jù)線SDAm作為輸出時(shí),電子開關(guān)閉合,數(shù)據(jù)線SDAm輸出內(nèi)容來(lái)自對(duì)應(yīng)的數(shù)據(jù)寄存器Reg_SDAm的輸出,當(dāng)數(shù)據(jù)線SDAm不作為輸出時(shí),電子開關(guān)斷開,當(dāng)需要數(shù)據(jù)線SDAm作為輸入時(shí),電子開關(guān)也斷開,此時(shí)數(shù)據(jù)線SDAm的狀態(tài)(是‘1’還是‘0’)可由CPU通過邏輯器件讀??;輸入輸出狀態(tài)寄存器Reg_inout的輸出為‘1’時(shí),電子開關(guān)閉合,輸入輸出狀態(tài)寄存器Reg_inout的輸出為‘0’時(shí),電子開關(guān)斷開;相對(duì)邏輯器件來(lái)說,SDAm線作為輸出,I2C從器件作為輸入時(shí),該線狀態(tài)由寄存器Reg_SDAm的輸出控制,Reg_SDAm輸出為‘1’,則SDAm線為高電平,Reg_SDAm輸出為‘0’,則SDAm線為低電平,Reg_SDAm輸出從‘0’變?yōu)椤?’時(shí),SDAm線為正跳沿,Reg_SDAm輸出從‘1’變?yōu)椤?’時(shí),SDAm線為負(fù)跳沿。
因此,本發(fā)明中,在通信設(shè)備中操作多個(gè)I2C從器件的方法,包括如下步驟步驟一,設(shè)置一CPU與一邏輯器件以總線方式連接,并將所述多個(gè)I2C從器件的每個(gè)I2C從器件的串行數(shù)據(jù)線分別與所述邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接,每個(gè)I2C從器件的串行時(shí)鐘線都與所述邏輯器件的同一個(gè)時(shí)鐘線管腳連接;步驟二,在所述邏輯器件內(nèi)用多個(gè)數(shù)據(jù)寄存器分別與所述邏輯器件的多個(gè)不同的數(shù)據(jù)線管腳對(duì)應(yīng),每個(gè)數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳之間設(shè)置一電子開關(guān),由該電子開關(guān)狀態(tài)決定是否連通所述數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳,另設(shè)置有一輸入輸出狀態(tài)寄存器控制每一電子開關(guān)的狀態(tài);并用一個(gè)時(shí)鐘寄存器與所述邏輯器件的對(duì)應(yīng)的時(shí)鐘線管腳對(duì)應(yīng);步驟三,當(dāng)CPU需要操作I2C從器件時(shí),按I2C總線規(guī)范的時(shí)序,分別訪問對(duì)應(yīng)于所述邏輯器件的數(shù)據(jù)寄存器和時(shí)鐘寄存器以及輸入輸出狀態(tài)寄存器,以使需操作的I2C從器件的串行數(shù)據(jù)線和串行時(shí)鐘線與標(biāo)準(zhǔn)的I2C總線主設(shè)備的串行數(shù)據(jù)線和串行時(shí)鐘線的作用相同,從而實(shí)現(xiàn)CPU對(duì)I2C從器件的操作。
下面以某產(chǎn)品中的具有24個(gè)SFP光接口業(yè)務(wù)板為例,SFP光模塊具有I2C接口,系統(tǒng)可通過I2C接口讀取SFP光模塊信息。每個(gè)SFP光模塊I2C器件地址都為10100000。單板上24個(gè)SFP光模塊的I2C接口的串行時(shí)鐘(SCL,Serial Clock)信號(hào)連接到邏輯芯片上,24個(gè)SFP光模塊的I2C接口中的串行數(shù)據(jù)(SDA,Serial Data)信號(hào)分別與邏輯芯片的不同管腳連接,CPU通過CPU總線與邏輯器件連接。當(dāng)CPU需要讀取SFP光模塊內(nèi)部信息時(shí),按I2C總線規(guī)范,分別操作邏輯器件內(nèi)部的數(shù)據(jù)寄存器Reg_SDAm和時(shí)鐘寄存器Reg_SCL以及SDA輸入輸出轉(zhuǎn)換控制寄存器Reg_inout,使SDAm(m=1,...,24)、SCL產(chǎn)生與標(biāo)準(zhǔn)I2C總線的數(shù)據(jù)線、時(shí)鐘線相同的作用,從而將SFP的信息被讀入CPU中。
具體舉例連續(xù)讀取SFP中的寄存器地址從‘0’到‘N’的N+1個(gè)字節(jié)的內(nèi)容至CPU中,其操作流程圖如圖3所示步驟301,開始操作;步驟302,向SFP寫器件地址‘10100000’;步驟303,讀取從器件SFP的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟304,否則進(jìn)入步驟315和316;步驟304,向SFP寫寄存器地址‘0’;步驟305,重新開始操作;步驟306,寫器件地址‘10100000’;步驟307,讀取從器件SFP的應(yīng)答信息ACK,若ACK=0,即為低電平,則繼續(xù)下一步驟308,否則進(jìn)入步驟315和316;步驟308,賦值0給一變量L;
步驟309,讀取寄存器M的值至CPU(M=0,1,2……N);步驟310,判斷L=N?若否,則說明連續(xù)讀取數(shù)據(jù)過程未結(jié)束,進(jìn)入步驟311,否則說明連續(xù)讀取數(shù)據(jù)過程已結(jié)束,進(jìn)入步驟313;步驟311,賦值L=L+1;步驟312,向從器件發(fā)送應(yīng)答消息ACK為“0”,并回到步驟309,繼續(xù)讀取寄存器M的值至CPU;步驟313,向從器件發(fā)送應(yīng)答消息ACK為“1”,即非應(yīng)答,并進(jìn)入步驟314;步驟314,停止操作;步驟315,發(fā)送出錯(cuò)報(bào)告;步驟316,停止操作。
如圖3的流程圖所示,為讀一個(gè)SFP內(nèi)容,實(shí)際操作中可同時(shí)讀取24個(gè)SFP的內(nèi)容。在操作中,也可以只操作要讀取的SFP內(nèi)容,在器件地址操作中,只操作對(duì)應(yīng)邏輯器件中對(duì)應(yīng)的數(shù)據(jù)寄存器(而使其它數(shù)據(jù)寄存器保持為值“1”不變),并配合操作邏輯器件中的時(shí)鐘寄存器。這樣就可以讀取24個(gè)SFP中的某一個(gè)或某幾個(gè)的信息。
再以某產(chǎn)品中的一個(gè)電路板使用一片CY22393FC、兩片CY22150FC為例,CY22393FC、CY22150FC的I2C器件地址都為‘1101001’,以上兩芯片為鎖相環(huán)時(shí)鐘芯片,需要對(duì)其內(nèi)部寄存器寫入配置數(shù)據(jù)才能得到需要的時(shí)鐘信號(hào)。硬件也如圖1方式。
如圖4所示,為寫CY22393FC、CY22150FC某一個(gè)寄存器的操作流程,其步驟如下步驟401,開始操作;步驟402,寫器件地址;步驟403,讀取從器件SFP的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟404,否則進(jìn)入步驟409和410;步驟404,再寫所需要寫入的寄存器地址;步驟405,讀取從器件SFP的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟406,否則進(jìn)入步驟409和410;步驟406,再寫入需要配置的數(shù)據(jù);
步驟407,讀取從器件SFP的應(yīng)答信息ACK,若ACK=0,即為低電平,則說明寫入數(shù)據(jù)成功,進(jìn)入步驟408,否則進(jìn)入步驟409和410;步驟408,停止操作;步驟409,發(fā)送出錯(cuò)報(bào)告;步驟410,停止操作。
上述為寫操作過程,對(duì)于讀CY22393FC、CY22150FC某一個(gè)寄存器的操作流程請(qǐng)參見圖5,其包括如下步驟步驟501,開始操作;步驟502,寫從器件的器件地址;步驟503,讀取從器件的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟504,否則進(jìn)入步驟511和512;步驟504,再寫入所要讀的寄存器地址;步驟505,讀取從器件的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟506,否則進(jìn)入步驟511和512;步驟506,重新再做開始操作;步驟507,寫從器件的器件地址;步驟508,讀取從器件的應(yīng)答信息ACK,若ACK=0,即為低電平,則進(jìn)入步驟509,否則進(jìn)入步驟511和512;步驟509,進(jìn)行讀操作;步驟510,在讀操作進(jìn)行完畢后停止操作;步驟511,發(fā)送出錯(cuò)報(bào)告;步驟512,停止操作。
本發(fā)明提供的方法在對(duì)多個(gè)I2C從器件操作時(shí)方便靈活,速度快,硬件成本低。
當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種在通信設(shè)備中操作多個(gè)I2C從器件的裝置,包括有一邏輯器件、多個(gè)I2C從器件、CPU,其特征在于,所述CPU與所述邏輯器件以總線方式相連,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行時(shí)鐘線都與所述邏輯器件的同一個(gè)時(shí)鐘線管腳連接,每個(gè)I2C接口的串行數(shù)據(jù)線分別與所述邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接;并且,所述邏輯器件內(nèi)部包括有一時(shí)鐘寄存器,其輸出端連接至所述邏輯器件的時(shí)鐘線管腳,與所述多個(gè)從器件的串行時(shí)鐘線對(duì)應(yīng);多個(gè)數(shù)據(jù)寄存器,每個(gè)數(shù)據(jù)寄存器的輸出端與所述數(shù)據(jù)線管腳之間均設(shè)置一電子開關(guān),該電子開關(guān)的輸出端連接所述邏輯器件的數(shù)據(jù)線管腳,分別與所述多個(gè)I2C從器件的I2C接口的串行數(shù)據(jù)線對(duì)應(yīng),每一電子開關(guān)通過一輸入輸出狀態(tài)寄存器控制該電子開關(guān)的閉合和斷開,以連通所述數(shù)據(jù)寄存器的輸出端與所述邏輯器件的數(shù)據(jù)線管腳;其中,所述時(shí)鐘寄存器、數(shù)據(jù)寄存器、輸入輸出狀態(tài)寄存器均可被所述CPU操作,所述數(shù)據(jù)線管腳的電平狀態(tài)也可由CPU通過所述邏輯器件讀取。
2.根據(jù)權(quán)利要求1所述的在通信設(shè)備中操作多個(gè)I2C從器件的裝置,其特征在于,對(duì)于未設(shè)置有內(nèi)部上拉電阻的接口線,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行數(shù)據(jù)線還分別通過一上拉電阻與所述接口的供電電源連接。
3.一種在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,該方法包括如下步驟步驟一,設(shè)置一CPU與一邏輯器件以總線方式連接,并將所述多個(gè)I2C從器件的每個(gè)I2C從器件的串行數(shù)據(jù)線分別與所述邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接,每個(gè)I2C從器件的串行時(shí)鐘線都與所述邏輯器件的同一個(gè)時(shí)鐘線管腳連接;步驟二,在所述邏輯器件內(nèi)用多個(gè)數(shù)據(jù)寄存器分別與所述邏輯器件的多個(gè)不同的數(shù)據(jù)線管腳對(duì)應(yīng),每個(gè)數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳之間設(shè)置一電子開關(guān),由該電子開關(guān)狀態(tài)決定是否連通所述數(shù)據(jù)寄存器的輸出與對(duì)應(yīng)的數(shù)據(jù)線管腳,另設(shè)置有一輸入輸出狀態(tài)寄存器控制每一電子開關(guān)的狀態(tài);并用一個(gè)時(shí)鐘寄存器與所述邏輯器件的對(duì)應(yīng)的時(shí)鐘線管腳對(duì)應(yīng);步驟三,當(dāng)CPU需要操作I2C從器件時(shí),按I2C總線規(guī)范的時(shí)序,分別訪問對(duì)應(yīng)于所述邏輯器件的數(shù)據(jù)寄存器和時(shí)鐘寄存器以及輸入輸出狀態(tài)寄存器,以使需操作的I2C從器件的串行數(shù)據(jù)線和串行時(shí)鐘線與標(biāo)準(zhǔn)的I2C總線主設(shè)備的串行數(shù)據(jù)線和串行時(shí)鐘線的作用相同,從而實(shí)現(xiàn)CPU對(duì)I2C從器件的操作。
4.根據(jù)權(quán)利要求3所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在步驟一中,對(duì)于未設(shè)置有內(nèi)部上拉電阻的接口線,所述多個(gè)I2C從器件的每個(gè)I2C接口的串行數(shù)據(jù)線還分別通過一上拉電阻與所述接口的供電電源連接。
5.根據(jù)權(quán)利要求3或4所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在步驟二中,相對(duì)所述邏輯器件來(lái)說,當(dāng)需要所述數(shù)據(jù)線管腳作為輸出時(shí),所述電子開關(guān)閉合,數(shù)據(jù)線管腳輸出內(nèi)容來(lái)自對(duì)應(yīng)的數(shù)據(jù)寄存器的輸出;當(dāng)不需要所述數(shù)據(jù)線管腳作為輸出時(shí),所述電子開關(guān)斷開;當(dāng)需要所述數(shù)據(jù)線管腳作為輸入時(shí),所述電子開關(guān)也斷開,所述數(shù)據(jù)線管腳的電平狀態(tài),可由CPU通過所述邏輯器件讀?。徊⑶?,當(dāng)輸入輸出狀態(tài)寄存器的輸出為高電平時(shí),所述電子開關(guān)閉合,當(dāng)輸入輸出狀態(tài)寄存器的輸出為低電平時(shí),所述電子開關(guān)斷開。
6.根據(jù)權(quán)利要求5所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在步驟三中,當(dāng)CPU需往所述多個(gè)I2C從器件中任一從器件的寄存器中寫入數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需寫入數(shù)據(jù)的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需寫入的寄存器地址,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則向該I2C從器件寫入所需寫入的數(shù)據(jù),并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則表示寫入數(shù)據(jù)成功,停止操作,否則發(fā)送出錯(cuò)報(bào)告并停止操作。
7.根據(jù)權(quán)利要求5所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在步驟三中,當(dāng)CPU需讀取所述多個(gè)I2C從器件中任一從器件的寄存器中的數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需讀取的寄存器地址,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則再次開始操作,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則開始讀取數(shù)據(jù),并在讀取數(shù)據(jù)完畢后停止操作,否則發(fā)送出錯(cuò)報(bào)告并停止操作。
8.根據(jù)權(quán)利要求5所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在步驟三中,當(dāng)CPU需連續(xù)讀取所述多個(gè)I2C從器件中任一從器件的寄存器中地址為0~N的N+1個(gè)字節(jié)的數(shù)據(jù)時(shí),還包括如下步驟開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則寫入需讀取的寄存器地址的初始地址0,并進(jìn)入下一步驟,否則發(fā)送出錯(cuò)報(bào)告并停止操作;再次開始操作;寫入需讀取的I2C從器件地址;CPU讀取該I2C從器件的應(yīng)答信息,判斷是否為表示收到數(shù)據(jù)的低電平,若是則賦值0給一變量L,并開始讀取寄存器地址為0中的數(shù)據(jù),并在讀取完該寄存器地址為0的數(shù)據(jù)后將該變量L加1后重新賦值予該變量L,同時(shí)向該I2C從器件發(fā)送低電平的應(yīng)答信息,并讀取下一地址中的數(shù)據(jù),如此循環(huán)直至該變量L的值等于N,此時(shí)向該I2C從器件發(fā)送高電平的非應(yīng)答信息,并停止操作,結(jié)束操作。
9.根據(jù)權(quán)利要求5或6或7或8所述的在通信設(shè)備中操作多個(gè)I2C從器件的方法,其特征在于,在器件地址操作中,只操作對(duì)應(yīng)所述邏輯器件中對(duì)應(yīng)的數(shù)據(jù)寄存器,并配合操作所述邏輯器件中的時(shí)鐘寄存器。
全文摘要
本發(fā)明涉及一種在通信設(shè)備中操作多個(gè)I2C從器件的裝置及其方法,該裝置包括有CPU、與CPU總線連接的邏輯器件,每個(gè)從器件的I2C接口的串行時(shí)鐘線都與邏輯器件的同一個(gè)時(shí)鐘線管腳連接,每個(gè)從器件的I2C接口的串行數(shù)據(jù)線分別與邏輯器件的對(duì)應(yīng)的不同的數(shù)據(jù)線管腳連接;并且邏輯器件內(nèi)包括有一時(shí)鐘寄存器,其輸出端連接至所述邏輯器件的時(shí)鐘線管腳;多個(gè)數(shù)據(jù)寄存器,每個(gè)數(shù)據(jù)寄存器的輸出端與數(shù)據(jù)線管腳之間均設(shè)置一電子開關(guān),其輸出端連接至數(shù)據(jù)線管腳,分別與多個(gè)從器件的I2C接口的串行數(shù)據(jù)線對(duì)應(yīng),并通過一輸入輸出狀態(tài)寄存器控制該電子開關(guān)的閉合和斷開,CPU通過訪問邏輯器件內(nèi)部對(duì)應(yīng)的寄存器來(lái)實(shí)現(xiàn)對(duì)一個(gè)或多個(gè)I2C從器件的操作。
文檔編號(hào)H04B10/02GK1581026SQ20041000910
公開日2005年2月16日 申請(qǐng)日期2004年5月19日 優(yōu)先權(quán)日2004年5月19日
發(fā)明者趙偉, 邵國(guó) 申請(qǐng)人:中興通訊股份有限公司