專利名稱:I2c總線中主器件復(fù)位的實現(xiàn)方法、復(fù)位裝置及其設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊設(shè)備中使用I2C總線的情況,尤其是當(dāng)I2C總線結(jié)構(gòu)中實現(xiàn)主器件復(fù)位的方法和裝置。
背景技術(shù):
I2C總線(Inter-IC BUS或IIC BUS,集成電路間互連總線)是一種由飛利浦(PHILIPS)公司開發(fā)的一套串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線有兩根信號線一根時鐘線SCL,一根雙向數(shù)據(jù)線SDA。所有接到I2C總線上的器件的時鐘線SCL均接到總線的SCL,其數(shù)據(jù)線SDA都連接到總線的雙向數(shù)據(jù)線SDA線??偩€使用軟件尋址來識別每個器件(如微控制器、存儲器、LCD驅(qū)動器、時鐘芯片和其他I2C總線器件),完全省去了每個器件的片選線,因而使系統(tǒng)的接線非常簡單。目前I2C已經(jīng)成為重要的全球業(yè)界標(biāo)準(zhǔn),被所有主要的IC廠商所認同和使用。在計算機網(wǎng)絡(luò)通訊設(shè)備中,具有I2C總線接口的器件應(yīng)用也越來越多。
在I2C總線中,當(dāng)某個器件生成總線上的時鐘信號SCK并發(fā)起數(shù)據(jù)傳輸時,被稱為是發(fā)送器(也叫主器件),某個器件從總線上接收控制信息時,被稱為接收器(也叫從器件)。主器件用于啟動總線,產(chǎn)生時鐘并傳送數(shù)據(jù),此時任何被尋址的器件均被認為是從器件。
I2C總線工作時,由總線上的主器件控制時鐘線SCL提供時鐘同步信號脈沖,由雙向數(shù)據(jù)線SDA完成數(shù)據(jù)傳送。I2C總線的數(shù)據(jù)傳送速率,在標(biāo)準(zhǔn)工作方式下為100kbit/s,在快速方式下,最高傳送速率可達400kbit/s。I2C總線技術(shù)規(guī)范中,總線協(xié)議有著嚴格的時序要求。
I2C總線的數(shù)據(jù)傳送格式是在I2C總線開始信號后,送出的第一個字節(jié)數(shù)據(jù)是用來選擇從器件的地址和指示讀寫操作,其中前7bit為地址碼,第8bit為讀寫標(biāo)志位(R/W)。標(biāo)志位為“0”表示是主器件的“寫”操作,即主器件把信息寫入到所選址的從器件;標(biāo)志位為“1”表示主器件的“讀”操作。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8bit標(biāo)志(R/W)確定。I2C總線上每次傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)不受限制,但每一個字節(jié)必須為8位,而且每個傳送的字節(jié)后面(第9位),從器件必須跟一個認可位,也叫應(yīng)答位(ACK,Acknowledge bit)I2C總線技術(shù)規(guī)范中,對開始和結(jié)束信號(也稱起始和停止信號)以及應(yīng)答信號的定義如下起始信號(S)在時鐘線SCL保持高電平期間,雙向數(shù)據(jù)線SDA上出現(xiàn)由高電平向低電平的變化,用于啟動I2C總線,為I2C總線的起始信號;停止信號(P)在時鐘線SCL保持高電平期間,雙向數(shù)據(jù)線SDA上出現(xiàn)由低電平向高電平的變化,用于停止I2C總線,為I2C總線的終止信號;應(yīng)答信號(A)在I2C總線傳輸過程中每一個字節(jié)的第9個SCL脈沖對應(yīng)著應(yīng)答位,若雙向數(shù)據(jù)線SDA上顯示低電平則為總線“應(yīng)答(A)”,若雙向數(shù)據(jù)線SDA上顯示高電平則為總線“非應(yīng)答(/A)”。
只有主器件才能對I2C總線實現(xiàn)管理與檢測,開始和結(jié)束信號一般都是由主器件產(chǎn)生。I2C總線數(shù)據(jù)傳輸時,在時鐘線SCL為高電平期間,數(shù)據(jù)線SDA上必須保持有穩(wěn)定的邏輯電平狀態(tài),高電平表示數(shù)據(jù)1,低電平表示數(shù)據(jù)0。只有在時鐘線SCL為低電平時,才允許數(shù)據(jù)線SDA上的電平狀態(tài)發(fā)生變化。
I2C總線的工作速度一般是取決于主器件和從器件的性能,參考I2C的總線規(guī)范,時鐘線SCL的工作頻率可以工作在0Hz到100kHz之間。
I2C總線本身不會鎖定,但如果總線上存在干擾或者SDA或SCL被某些特定的因素拉成低電平,I2C總線就產(chǎn)生鎖定,這些情況通常是由于外部干擾以及從器件的失效和故障造成。若SDA線被總線上的一個器件拉成低電平,主器件就不能產(chǎn)生起始、停止信號,進行下一步的傳送,此時主器件一般會檢測到I2C總線出現(xiàn)鎖定,無法實現(xiàn)下一步的數(shù)據(jù)傳輸。因此必須通過一定的手段來避免出現(xiàn)此種情況下造成I2C總線的故障。
在計算機通訊設(shè)備內(nèi),I2C總線上的主器件一般是CPU,從器件是連接在I2C總線上的其它器件,比如存儲器、傳感器、實時時鐘等。如果在印制電路板設(shè)計時經(jīng)過仔細的布局布線,一般可以避免因總線上出現(xiàn)干擾造成總線的鎖定。但是,還有一種可能出現(xiàn)但比較隱蔽的情況,也會造成I2C總線的鎖定,且必須要通過其它手段來解決。譬如,在主器件(CPU)在對I2C從器件的讀操作期間,如果CPU突然被復(fù)位(RESET),而此時I2C總線上的一個讀操作周期卻還沒有結(jié)束,I2C從器件一般有沒有復(fù)位輸入管腳,也無法知道主器件被復(fù)位的情況,從器件只是看到總線的SCL停止變化,但I2C總線允許時鐘線SCL停止,因此從器件也不會認為I2C總線的主器件出現(xiàn)故障。
在CPU復(fù)位過程中及復(fù)位后,SCL往往被上拉到高電平,保持穩(wěn)定,按照I2C總線的規(guī)范,SDA數(shù)據(jù)線上的數(shù)據(jù)在時鐘線SCL高電平期間必須是穩(wěn)定的,如果從器件此時在SDA上輸出的bit正巧為“低”,因此,從器件將始終驅(qū)動SDA線為低電平,使主器件無法產(chǎn)生任何起始、停止信號,從而由從器件鎖定SDA線,造成I2C總線的鎖定。
這種情況出現(xiàn)后,如果主器件能夠單獨控制SCK,可以通過發(fā)送幾個SCK脈沖,使從器件完成I2C總線上的讀操作周期,從而避免I2C總線的鎖定,但是,有許多CPU(主器件),其內(nèi)部集成的I2C寄存器一般不提供直接對SCK的控制,因此,無法采用輸出SCK脈沖的辦法來解決。I2C總線如果被上述的原因鎖定后,一般無法僅僅通過復(fù)位(RESET)主器件來解決,若沒有其它合適可靠的解決辦法,必須要重新上電才能解決。
對于I2C總線被鎖定后的解決方法,現(xiàn)有技術(shù)中的一些器件提供了各自的解決途徑。
FreeScale公司(美國一家芯片公司)PowerPC處理器中的MPC8541、MPC8560系列CPU,其內(nèi)部集成了I2C總線控制寄存器,在發(fā)現(xiàn)I2C總線被鎖定后,可以通過讀寫一系列的I2C總線控制寄存器來使I2C總線退出鎖定狀態(tài)。
MAXIM公司(美國一家芯片公司)的MAX7500系列I2C從器件,其內(nèi)部集成了超時功能,提供I2C總線的鎖定保護。如果在250ms內(nèi)時鐘線SCL沒有發(fā)生變化,從器件將自動結(jié)束本次的I2C操作,回到初始狀態(tài),從而避免了從器件對I2C總線的鎖定;但是,在計算機通訊設(shè)備內(nèi)I2C總線上連接的器件往往比較多,I2C主器件(一般是CPU)不一定具有解決I2C總線鎖定狀態(tài)的控制寄存器,同時,目前I2C總線上所有的從器件也不可能全部具備自動退出鎖定狀態(tài)的功能,因此,還需要提供一種適用性更好的裝置來解決I2C總線可能被鎖定的問題。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種I2C總線中主器件復(fù)位的實現(xiàn)方法,可以避免主器件復(fù)位時I2C總線被鎖定,且對主器件和從器件沒有特殊的設(shè)計要求。本發(fā)明還要提供一種可實現(xiàn)該方法的通訊設(shè)備,以及用于實現(xiàn)該方法的復(fù)位裝置。
為了解決上述技術(shù)問題,本發(fā)明提供了一種I2C總線中主器件復(fù)位的實現(xiàn)方法,包括以下步驟實時檢測I2C總線狀態(tài),在接收到外界對所述主器件的復(fù)位信號時,先判斷當(dāng)前時刻I2C總線的狀態(tài),如果I2C總線空閑,立刻對主器件進行復(fù)位,如果I2C總線上正在有I2C總線操作周期,則在該操作周期結(jié)束后,再對所述主器件進行復(fù)位。
進一步地,上述實現(xiàn)方法還可具有以下特點該方法是通過獨立于主器件的一個復(fù)位裝置來檢測I2C總線的狀態(tài),接收外界對所述主器件的復(fù)位信號,并完成狀態(tài)判斷和對主器件的復(fù)位操作。
本發(fā)明提供用于實現(xiàn)上述方法的I2C總線中主器件的復(fù)位裝置包括I2C總線監(jiān)控部分和復(fù)位控制部分,其中所述I2C總線監(jiān)控部分與I2C總線相連,用于監(jiān)控I2C總線的狀態(tài),并向復(fù)位控制部分提供當(dāng)前I2C總線的狀態(tài)指示;所述復(fù)位控制部分用于接收外界對所述主器件的復(fù)位信號,從所述監(jiān)控部分獲知I2C總線的當(dāng)前狀態(tài),在收到該復(fù)位信號時且I2C總線處于“空閑”狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。
進一步地,上述復(fù)位裝置還可具有以下特點所述I2C總線監(jiān)控部分實時監(jiān)控I2C總線上是否有操作周期,如果有,提供I2C總線“忙”的狀態(tài)指示,否則,提供I2C總線“空閑”的狀態(tài)指示。
進一步地,上述復(fù)位裝置還可具有以下特點該復(fù)位裝置由可編程邏輯器件內(nèi)部的邏輯電路所構(gòu)成。
進一步地,上述復(fù)位裝置還可具有以下特點該復(fù)位裝置用硬件描述語言Verilog或VHDL實現(xiàn)。
本發(fā)明提供可實現(xiàn)上述方法的采用I2C總線的通訊設(shè)備包括通過I2C總線相連的主器件和從器件,其特征在于,還包括一個用于所述主器件復(fù)位的裝置,該裝置獨立于所述主器件,用于實時監(jiān)測I2C總線的狀態(tài),在接收到外部對所述主器件的復(fù)位信號且I2C總線處于空閑狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。
由上可知,采用本發(fā)明完全可以避免I2C主器件(一般是CPU)在對I2C總線讀操作期間因被復(fù)位而由從器件造成總線的鎖定,提高了系統(tǒng)的適應(yīng)性、穩(wěn)定性和可靠性,且實現(xiàn)起來方便靈活,硬件成本低。
圖1是本發(fā)明實施例I2C總線中主器件的復(fù)位裝置的結(jié)構(gòu)框圖。
圖2是本發(fā)明實施例I2C總線中主器件的復(fù)位裝置工作狀態(tài)轉(zhuǎn)換圖具體實施方式
下面結(jié)合附圖對技術(shù)方案的實施作進一步的詳細描述
圖1所示是本實施例I2C總線中主器件的復(fù)位裝置的結(jié)構(gòu)框圖。如圖所述,該裝置包括I2C總線上的主器件101、主器件的復(fù)位裝置102和I2C總線的從器件103。本實施例中,主器件101為CPU處理器。I2C總線上一般有多個從器件103,圖中只示出了其中的一個。
復(fù)位裝置102在本實施例中由可編程邏輯器件(PLD)實現(xiàn),此裝置是用PLD內(nèi)部邏輯電路構(gòu)成的一個功能模塊。實際應(yīng)用中,為了形成模塊化并適應(yīng)多家廠商的PLD器件,此功能模塊一般由硬件描述語言Verilog或VHDL實現(xiàn),以提高模塊的可移植性。如圖所示,外界對主器件的復(fù)位信號RESET_cpu、連接到主器件101 RESET端的復(fù)位信號線、I2C總線上的時鐘線SCL和雙向數(shù)據(jù)線SDA同時引入PLD內(nèi)部的復(fù)位裝置102。
復(fù)位裝置102主要由I2C總線監(jiān)控部分和復(fù)位控制部分構(gòu)成。
I2C總線監(jiān)控部分與IC總線相連,負責(zé)監(jiān)控I2C總線的狀態(tài),并向復(fù)位控制部分提供當(dāng)前I2C總線的狀態(tài)輸出指示,比如,用電平‘0’表示I2C總線空閑,電平‘1’表示I2C總線上有操作周期。
復(fù)位控制部分負責(zé)監(jiān)測外界對主器件的復(fù)位信號,接收到外界對所述主器件的復(fù)位信號時,如果I2C總線空閑,則對主器件立刻進行復(fù)位,如果I2C總線上有I2C總線操作周期,則等到主器件的I2C總線操作周期結(jié)束,I2C總線監(jiān)控部分的狀態(tài)指示變?yōu)椤翱臻e”后,再對主器件進行復(fù)位。
為了主器件復(fù)位的實現(xiàn)方法進行更清楚地說明,請參照圖2示出的復(fù)位裝置102工作時的狀態(tài)轉(zhuǎn)換圖,其中每一個圓圈,代表著一種狀態(tài),箭頭表示出在不同條件下狀態(tài)的轉(zhuǎn)換。
I2C總線處于“空閑”狀態(tài)時,如果收到外界對I2C總線上主器件的復(fù)位信號,復(fù)位裝置立刻轉(zhuǎn)換到“主器件復(fù)位”狀態(tài),對主器件進行復(fù)位,復(fù)位結(jié)束后狀態(tài)切換回“空閑”狀態(tài);I2C總線處于“空閑”狀態(tài)時,如果I2C總線上出現(xiàn)起始信號,狀態(tài)轉(zhuǎn)換到“監(jiān)視I2C總線”狀態(tài),在該狀態(tài)下,如果I2C總線出現(xiàn)停止信號,表明一次I2C總線的操作周期完成,狀態(tài)轉(zhuǎn)換回“空閑”狀態(tài);I2C總線處于“監(jiān)視I2C總線”狀態(tài),即I2C總線上正在有讀寫操作周期時,如果收到外界對主器件的復(fù)位信號,工作狀態(tài)轉(zhuǎn)換到“等待I2C總線周期結(jié)束”狀態(tài);當(dāng)I2C總線上出現(xiàn)停止信號后,表明I2C總線上的操作周期已經(jīng)完成,復(fù)位裝置轉(zhuǎn)換到“主器件復(fù)位”狀態(tài),向主器件發(fā)送復(fù)位信號,復(fù)位結(jié)束后,切換回“空閑”狀態(tài)。
綜上所述,本發(fā)明把原本由外界直接給主器件的復(fù)位信號改由經(jīng)I2C總線中主器件的復(fù)位裝置供給主器件,避免在I2C主器件在對從器件讀操作期間被復(fù)位,從而防止從器件可能會對I2C總線造成的鎖定。并且不需要對主器件和從器件有特殊的設(shè)計,具有適應(yīng)性好、穩(wěn)定性和可靠性高,實現(xiàn)方便靈活,硬件成本低等優(yōu)點。
權(quán)利要求
1.一種I2C總線中主器件復(fù)位的實現(xiàn)方法,包括以下步驟實時檢測I2C總線狀態(tài),在接收到外界對所述主器件的復(fù)位信號時,先判斷當(dāng)前時刻I2C總線的狀態(tài),如果I2C總線空閑,立刻對主器件進行復(fù)位,如果I2C總線上正在有I2C總線操作周期,則在該操作周期結(jié)束后,再對所述主器件進行復(fù)位。
2.如權(quán)利要求1所述的實現(xiàn)方法,其特征在于,該方法是通過獨立于主器件的一個復(fù)位裝置來檢測I2C總線的狀態(tài),接收外界對所述主器件的復(fù)位信號,并完成狀態(tài)判斷和對主器件的復(fù)位操作。
3.一種I2C總線中主器件的復(fù)位裝置,其特征在于,包括I2C總線監(jiān)控部分和復(fù)位控制部分,其中所述I2C總線監(jiān)控部分與I2C總線相連,用于監(jiān)控I2C總線的狀態(tài),并向復(fù)位控制部分提供當(dāng)前I2C總線的狀態(tài)指示;所述復(fù)位控制部分用于接收外界對所述主器件的復(fù)位信號,從所述監(jiān)控部分獲知I2C總線的當(dāng)前狀態(tài),在收到該復(fù)位信號時且I2C總線處于“空閑”狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。
4.如權(quán)利要求3所述的復(fù)位裝置,其特征在于,所述I2C總線監(jiān)控部分實時監(jiān)控I2C總線上是否有操作周期,如果有,提供I2C總線“忙”的狀態(tài)指示,否則,提供I2C總線“空閑”的狀態(tài)指示。
5.如權(quán)利要求3所述的復(fù)位裝置,其特征在于,該復(fù)位裝置由可編程邏輯器件內(nèi)部的邏輯電路所構(gòu)成。
6.如權(quán)利要求3所述的復(fù)位裝置,其特征在于,該復(fù)位裝置用硬件描述語言Verilog或VHDL實現(xiàn)。
7.一種采用I2C總線的通訊設(shè)備,包括通過I2C總線相連的主器件和從器件,其特征在于,還包括一個用于所述主器件復(fù)位的裝置,該裝置獨立于所述主器件,用于實時監(jiān)測I2C總線的狀態(tài),在接收到外部對所述主器件的復(fù)位信號且I2C總線處于空閑狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。
8.如權(quán)利要求7所述的通訊設(shè)備,其特征在于,所述用于所述主器件復(fù)位的裝置進一步包括I2C總線監(jiān)控部分和復(fù)位控制部分,其中所述I2C總線監(jiān)控部分與I2C總線相連,用于監(jiān)控I2C總線的狀態(tài),并向復(fù)位控制部分提供當(dāng)前I2C總線的狀態(tài)指示;所述復(fù)位控制部分用于接收外界對所述主器件的復(fù)位信號,從所述監(jiān)控部分獲知I2C總線的當(dāng)前狀態(tài),在收到該復(fù)位信號時且I2C總線處于“空閑”狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。
9.如權(quán)利要求8所述的通訊設(shè)備,其特征在于,所述I2C總線監(jiān)控部分實時監(jiān)控I2C總線上是否有操作周期,如果有,提供I2C總線“忙”的狀態(tài)指示,否則,提供I2C總線“空閑”的狀態(tài)指示。
10.如權(quán)利要求8所述的通訊設(shè)備,其特征在于,所述用于所述主器件復(fù)位的裝置由可編程邏輯器件內(nèi)部的邏輯電路所構(gòu)成。
全文摘要
本發(fā)明公開了一種I2C總線中主器件復(fù)位的實現(xiàn)方法、復(fù)位裝置和相應(yīng)通訊設(shè)備,該方法包括步驟實時檢測I2C總線狀態(tài),收到外界對所述主器件的復(fù)位信號時,判斷當(dāng)前I2C總線狀態(tài),如果空閑,立刻對主器件復(fù)位,如果I2C總線上有I2C總線操作周期,則在該操作周期結(jié)束后再對主器件復(fù)位。所述復(fù)位裝置獨立于主器件,包括監(jiān)控部分,用于監(jiān)控I2C總線狀態(tài);以及復(fù)位控制部分,用于接收外界對主器件的復(fù)位信號,在收到該復(fù)位信號時且I2C總線處于空閑狀態(tài)時,向所述主器件發(fā)出復(fù)位信號。所述通訊設(shè)備包括通過I2C總線相連的主器件、從器件及上述復(fù)位裝置。本發(fā)明可以避免主器件復(fù)位時I2C總線被鎖定,且對主器件和從器件沒有特殊的設(shè)計要求。
文檔編號G06F13/42GK1740998SQ20051010269
公開日2006年3月1日 申請日期2005年9月13日 優(yōu)先權(quán)日2005年9月13日
發(fā)明者于克泳, 董強, 邵國, 劉嶸 申請人:中興通訊股份有限公司