專利名稱:恢復(fù)i的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及I2C主器件和I2C從器件,尤其涉及一種恢復(fù)I2C主器件和I2C從器件通訊的方法。
背景技術(shù):
I2C(Inter-Integrated Circuit,相互作用的集成電路)總線是一種用于集成芯片之間連接的二線制總線,是一種由SDA(串行數(shù)據(jù)線)和SCL(串行時(shí)鐘線)構(gòu)成的串行總線,它通過(guò)SDA及SCL在連到總線上的器件之間傳送信息,最高傳送速率為3.4Mbps。目前,I2C總線已成為一個(gè)國(guó)際標(biāo)準(zhǔn),在通訊、工控等領(lǐng)域里得到廣泛應(yīng)用。
當(dāng)某個(gè)I2C總線接口器件向總線發(fā)送信息時(shí),它就是I2C主器件,而當(dāng)其從總線上接收信息時(shí),又成為I2C從器件,I2C主器件和I2C從器件都可以工作于接收和發(fā)送狀態(tài)。在I2C總線工作過(guò)程中,在其空閑狀態(tài),SDA和SCL均保持為高電平。
I2C總線上的控制信號(hào)有三種類型,分別是開(kāi)始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào),其具體概念如下開(kāi)始信號(hào)SCL為高電平時(shí),SDA由高電平向低電平跳變,開(kāi)始傳送數(shù)據(jù);結(jié)束信號(hào)SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù);應(yīng)答信號(hào)I2C從器件處于接收狀態(tài)時(shí),I2C從器件在SCL的每個(gè)上升沿接收數(shù)據(jù),當(dāng)接收到8bit數(shù)據(jù)后,在SCL的第9個(gè)上升沿向I2C主器件發(fā)出低電平脈沖的ACK應(yīng)答位,表示已正確收到數(shù)據(jù)。
I2C總線必須由I2C主器件控制,I2C主器件發(fā)出的SCL信號(hào)用于控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來(lái)表示起始和停止條件。
傳統(tǒng)上,I2C主器件和I2C從器件的復(fù)位都是設(shè)計(jì)成獨(dú)立的,或者某些I2C器件就沒(méi)有外部復(fù)位輸入功能,只有接通電源產(chǎn)生的上電復(fù)位。在這種設(shè)計(jì)下,I2C主從器件之間一般都能正常通訊,不會(huì)出現(xiàn)I2C讀寫失敗的問(wèn)題。但是,在某些特殊情況下,主從器件在讀寫通訊過(guò)程中,可能會(huì)出現(xiàn)I2C主器件復(fù)位了,而I2C從器件并沒(méi)有復(fù)位的情況,例如當(dāng)I2C從器件處于發(fā)送狀態(tài),即I2C主器件正在對(duì)I2C從器件進(jìn)行讀操作時(shí),通訊異常中斷,I2C從器件在通訊中斷時(shí)所送出的數(shù)據(jù)為“0”,SDA線一直保持低電平,I2C從器件一直處于等待讀的狀態(tài),不能釋放I2C總線。這樣即使在I2C主器件正常復(fù)位后,也無(wú)法與I2C從器件進(jìn)行正常的通訊。在這種情況下,如果沒(méi)有采取必要的措施,I2C主器件對(duì)I2C從器件的讀操作將一直失敗。
常用的I2C器件有兩種,分別為自身有復(fù)位功能的和自身無(wú)復(fù)位功能的。對(duì)于自身無(wú)復(fù)位功能的I2C器件(如內(nèi)存條SDRAM上的E2PROM芯片,沒(méi)有單獨(dú)提供復(fù)位接口),采用對(duì)I2C器件進(jìn)行下電后重新上電的操作來(lái)解決上述問(wèn)題。在重新上電后,I2C器件會(huì)自動(dòng)進(jìn)行初始化,從而恢復(fù)了I2C器件可讀寫的正常狀態(tài)。這種方法需要人工干預(yù)來(lái)恢復(fù)I2C器件的正常狀態(tài),自愈性較差,當(dāng)I2C器件的通訊故障率比較高的情況下,其維護(hù)成本較高;并且多數(shù)情況下所有設(shè)備的電源是統(tǒng)一的,很難對(duì)單獨(dú)的I2C器件進(jìn)行上下電操作。
對(duì)于自身有復(fù)位功能的I2C器件,采用單獨(dú)控制方式恢復(fù)其復(fù)位功能,在出現(xiàn)故障時(shí),對(duì)故障器件專門復(fù)位,通過(guò)復(fù)位操作重新初始化I2C器件來(lái)排除故障。采用這種方式進(jìn)行復(fù)位時(shí),主從I2C器件的復(fù)位先后關(guān)系復(fù)雜,對(duì)故障器件復(fù)位之前需要經(jīng)過(guò)復(fù)雜的判斷,而且需要設(shè)計(jì)相應(yīng)的外部電路來(lái)提供復(fù)位通道,從而大大增加了系統(tǒng)的耦合性;另外有復(fù)位功能的I2C器件雖然提供了復(fù)位接口,但是復(fù)位會(huì)對(duì)整個(gè)器件進(jìn)行了初始化,而不是僅僅初始化I2C接口,由此造成了比較大范圍的影響。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種恢復(fù)I2C主器件和I2C從器件通訊的方法,以解決現(xiàn)有技術(shù)中因I2C總線通訊中斷而導(dǎo)致的I2C主器件復(fù)位后無(wú)法繼續(xù)對(duì)I2C從器件進(jìn)行讀操作的問(wèn)題。
為解決上述問(wèn)題,本發(fā)明提供以下技術(shù)方案一種恢復(fù)I2C主器件和I2C從器件通訊的方法,所述I2C主器件和I2C從器件通過(guò)串行數(shù)據(jù)線和串行時(shí)鐘線進(jìn)行通訊;當(dāng)所述I2C主器件和I2C從器件通訊中斷后進(jìn)行下述步驟A、復(fù)位I2C主器件;B、I2C主器件檢測(cè)串行數(shù)據(jù)線,并在檢測(cè)到串行數(shù)據(jù)線處于被占用狀態(tài)時(shí)通過(guò)串行時(shí)鐘線向I2C從器件輸入時(shí)鐘信號(hào),使I2C從器件恢復(fù)正常。
所述串行數(shù)據(jù)線處于被占用狀態(tài)是指串行數(shù)據(jù)線處于低電平狀態(tài)。
在所述步驟B中,I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入至少9個(gè)周期的時(shí)鐘信號(hào)使I2C從器件將通訊中斷時(shí)正在發(fā)送的字節(jié)繼續(xù)發(fā)送完畢。
所述步驟B包括步驟b1、I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入n個(gè)周期的時(shí)鐘信號(hào)后,I2C主器件檢測(cè)串行數(shù)據(jù)線是否處于被占用狀態(tài),其中n為大于等于1小于等于8的整數(shù);b2、若是則重復(fù)步驟b1,若否則I2C從器件恢復(fù)到正??勺x寫狀態(tài)。
I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入時(shí)鐘信號(hào)的優(yōu)選值為9個(gè)周期。
由于本發(fā)明采用了以上技術(shù)方案,故具有以下有益效果本發(fā)明在I2C主器件和I2C從器件通訊異常中斷時(shí),由I2C主器件強(qiáng)制給I2C從器件輸入SCL時(shí)鐘信號(hào),使I2C從器件釋放SDA數(shù)據(jù)線,從而使I2C總線恢復(fù)到正常的可讀寫狀態(tài)。本發(fā)明用軟件的方法彌補(bǔ)了I2C協(xié)議上的不足,提高了不同I2C器件通訊過(guò)程中的抗干擾性,降低了故障恢復(fù)的成本,增加了系統(tǒng)的可靠性。
圖1為解決I2C總線通訊故障方法一的流程圖;圖2為I2C從器件釋放I2C總線的時(shí)序示意圖;圖3為解決I2C總線通訊故障方法二的流程圖;圖4為本發(fā)明的具體實(shí)施例的示意圖。
具體實(shí)施例方式
I2C主器件和I2C從器件利用I2C總線進(jìn)行通訊的過(guò)程中,若I2C主器件正在對(duì)I2C從器件進(jìn)行讀操作時(shí),通訊異常中斷,I2C從器件在通訊中斷時(shí)所送出的數(shù)據(jù)為“0”,這樣在I2C主器件上電復(fù)位后,SDA線一直保持低電平,I2C從器件一直處于等待讀的狀態(tài),于是I2C主器件無(wú)法與I2C從器件進(jìn)行正常的通訊。
如果I2C從器件在通訊中斷時(shí)所送出的數(shù)據(jù)為“1”,則SDA線為高電平,這樣在I2C主器件上電復(fù)位后,I2C從器件可以釋放總線,I2C主器件可以訪問(wèn)I2C從器件,可以對(duì)I2C從器件發(fā)起新的通訊。但是,由于在I2C總線通訊中斷的時(shí)機(jī)點(diǎn)很難控制I2C從器件的輸出狀態(tài),輸出“0”和輸出“1”的比例大致是各50%,所以有必要提供一種在I2C總線通訊異常中斷時(shí)恢復(fù)I2C主器件和I2C從器件通訊的方法。
如圖1所示,在I2C總線通訊發(fā)生異常中斷時(shí),若I2C主器件在正常復(fù)位后檢測(cè)到SDA線一直保持低電平,即I2C從器件無(wú)法恢復(fù)的情況,在這種情況下,如圖2所示,I2C主器件強(qiáng)制給I2C從器件輸入一段至少9個(gè)周期的SCL時(shí)鐘信號(hào),I2C從器件在此時(shí)鐘驅(qū)動(dòng)下將通訊中斷時(shí)正在發(fā)送的字節(jié)中剩下的幾位(1~8位)送出后,SDA線變?yōu)楦唠娖?,I2C從器件釋放SDA線,I2C從器件恢復(fù)到正??勺x寫狀態(tài)。
由于I2C從器件通訊中斷的時(shí)機(jī)點(diǎn)有可能在一個(gè)字節(jié)8位當(dāng)中的任何一位,因此I2C主器件強(qiáng)制給I2C從器件輸入一段9個(gè)時(shí)鐘周期以上的SCL時(shí)鐘信號(hào)可以使I2C從器件充分釋放SDA線,保證I2C主器件對(duì)I2C從器件的再通訊。
在I2C總線通訊發(fā)生異常中斷時(shí),若I2C主器件在正常復(fù)位后檢測(cè)到SDA線一直保持低電平的情況也可以采用以下方法來(lái)解決如圖3所示,首先I2C主器件通過(guò)SCL線給I2C從器件輸入n個(gè)周期的時(shí)鐘信號(hào),n為大于等于1小于等于8的整數(shù);然后I2C主器件檢測(cè)SDA線的狀態(tài),若SDA線為高電平則I2C從器件恢復(fù)到正??勺x寫狀態(tài);若SDA線為低電平則I2C主器件繼續(xù)通過(guò)SCL線給I2C從器件輸入n個(gè)周期的時(shí)鐘信號(hào),直到SDA線變?yōu)楦唠娖胶?,I2C從器件恢復(fù)到正??勺x寫狀態(tài)。
圖4所示為本發(fā)明的一個(gè)具體實(shí)施例,其中MPC8260是I2C主器件,內(nèi)存條上的E2PROM(Electrically-Erasable Programmable Read-Only Memory,電可擦除只讀存儲(chǔ)器)是I2C從器件,PD14/PD15是MPC8260的IO(Input Output,輸入輸出)管腳;MPC8260通過(guò)SCL和SDA讀取存貯在內(nèi)存條的E2PROM上的信息,該信息包括內(nèi)存條的行數(shù)、列數(shù)、BANK數(shù)、時(shí)延等信息。
在I2C通訊過(guò)程中,MPC8260正在對(duì)內(nèi)存條進(jìn)行讀操作時(shí),通訊異常中斷,內(nèi)存條在通訊中斷時(shí)所送出的數(shù)據(jù)為“0”,若MPC8260復(fù)位了,而內(nèi)存條上的E2PROM并沒(méi)有恢復(fù),SDA線一直保持低電平,仍然處于等待讀的狀態(tài),不能釋放I2C總線,于是,I2C主器件MPC8260無(wú)法與內(nèi)存條上的E2PROM進(jìn)行正常的I2C通訊。MPC8260檢測(cè)到SDA數(shù)據(jù)線被拉低后,通過(guò)SCL線向I2C從器件發(fā)送9個(gè)周期的時(shí)鐘信號(hào),使內(nèi)存條上的E2PROM在此時(shí)鐘驅(qū)動(dòng)下將通訊中斷時(shí)正在發(fā)送的字節(jié)繼續(xù)發(fā)送完畢,SDA線變?yōu)楦唠娖?,?nèi)存條上的E2PROM恢復(fù)到正??勺x寫狀態(tài),MPC8260就可以繼續(xù)對(duì)內(nèi)存條上的E2PROM發(fā)起新的讀寫操作。
在上述實(shí)施例中,MPC8260檢測(cè)到SDA數(shù)據(jù)線被拉低后,也可以給內(nèi)存條上的E2PROM輸入n個(gè)周期的時(shí)鐘信號(hào),n為大于等于1小于等于8的整數(shù);然后MPC8260檢測(cè)SDA線的狀態(tài),若SDA線為高電平內(nèi)存條上的E2PROM恢復(fù)到正常可讀寫狀態(tài);若SDA線為低電平則MPC8260繼續(xù)通過(guò)SCL線給內(nèi)存條上的E2PROM輸入n個(gè)周期的時(shí)鐘信號(hào),直到SDA線變?yōu)楦唠娖?,?nèi)存條上的E2PROM恢復(fù)到正??勺x寫狀態(tài)為止。
以上僅以較佳實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種恢復(fù)I2C主器件和I2C從器件通訊的方法,所述I2C主器件和I2C從器件通過(guò)串行數(shù)據(jù)線和串行時(shí)鐘線進(jìn)行通訊;其特征在于當(dāng)所述I2C主器件和I2C從器件通訊中斷后進(jìn)行下述步驟A、復(fù)位I2C主器件;B、I2C主器件檢測(cè)串行數(shù)據(jù)線,并在檢測(cè)到串行數(shù)據(jù)線處于被占用狀態(tài)時(shí)通過(guò)串行時(shí)鐘線向I2C從器件輸入時(shí)鐘信號(hào),使I2C從器件恢復(fù)正常。
2.根據(jù)權(quán)利要求1所述的恢復(fù)I2C主器件和I2C從器件通訊的方法,其特征在于所述串行數(shù)據(jù)線處于被占用狀態(tài)是指串行數(shù)據(jù)線處于低電平狀態(tài)。
3.根據(jù)權(quán)利要求1所述的恢復(fù)I2C主器件和I2C從器件通訊的方法,其特征在于在所述步驟B中,I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入至少9個(gè)周期的時(shí)鐘信號(hào)使I2C從器件將通訊中斷時(shí)正在發(fā)送的字節(jié)繼續(xù)發(fā)送完畢。
4.根據(jù)權(quán)利要求1所述的恢復(fù)I2C主器件和I2C從器件通訊的方法,其特征在于所述步驟B包括步驟b1、I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入n個(gè)周期的時(shí)鐘信號(hào)后,I2C主器件檢測(cè)串行數(shù)據(jù)線是否處于被占用狀態(tài),其中n為大于等于1小于等于8的整數(shù);b2、若是則重復(fù)步驟b1,若否則I2C從器件恢復(fù)到正??勺x寫狀態(tài)。
5.根據(jù)權(quán)利要求3所述的恢復(fù)I2C主器件和I2C從器件通訊的方法,其特征在于I2C主器件通過(guò)串行時(shí)鐘線給I2C從器件輸入時(shí)鐘信號(hào)的優(yōu)選值為9個(gè)周期。
全文摘要
本發(fā)明公開(kāi)了一種恢復(fù)I
文檔編號(hào)G06F13/42GK1831801SQ200510053458
公開(kāi)日2006年9月13日 申請(qǐng)日期2005年3月10日 優(yōu)先權(quán)日2005年3月10日
發(fā)明者葉榮標(biāo), 邱錦, 陳祺, 柳精偉 申請(qǐng)人:華為技術(shù)有限公司