本發明涉及電子技術領域,尤其涉及一種解除I2C總線死鎖的方法及裝置。
背景技術:
內部集成電路(Inter Integrated Circuit,I2C)總線是一種雙向串行總線,用于連接微控制器及其外圍設備,I2C總線有兩根信號線,一根是串行數據線(Serial Data Line,SDA),一根是串行時鐘線(Serial Clock Line,SCL),所有接到I2C總線上的設備的數據線都連接到I2C總線中的SDA,所有接到I2C總線上的設備的時鐘線均連接到I2C總線中的SCL。
為了對I2C總線進行擴展以便于在系統中部署更多的I2C從設備,目前一般采用I2C總線擴展器件對I2C總線進行擴展,具體來說,通過I2C總線擴展器件可以將I2C總線的SDA擴展為多個SDA,以及可以將I2C總線的SCL擴展為多個SCL,即可以將I2C總線的SDA和SCL擴展為多路SDA和SCL,以便可以在I2C總線上掛接更多的從設備,以I2C總線擴展器件是PCA9548A為例,請參見圖1,通過一個PCA9548A可以擴展出8路SDA和SCL。
在使用過程中,如果I2C總線擴展器件所連接的I2C從設備出現故障,I2C主機在通過I2C總線擴展器件訪問該出現故障的I2C從設備時將會導致I2C總線鎖死,處于死鎖狀態,從而導致系統的整個I2C模塊無法正常使用,并且由于I2C總線擴展器件自身也是作為I2C從設備掛接在I2C總線上,所以這時I2C主機也無法再與I2C總線擴展器件進行通信,無法實現I2C總線的擴展功能。
技術實現要素:
本發明實施例提供一種解除I2C總線死鎖的方法及裝置,用于解決由于I2C總線處于死鎖狀態而導致I2C模塊無法正常使用的技術問題。
一方面,提供一種解除I2C總線死鎖的方法,該方法應用主機,所述I2C總線連接有所述主機和I2C總線擴展器件,所述I2C總線擴展器件用于將所述I2C總線的串行數據線SDA和串行數據線SCL擴展成至少兩路SDA和SCL,所述方法包括:
若所述I2C總線擴展器件中的第一擴展通道開啟后收到關閉指示但未成功關閉,則確定所述I2C總線處于死鎖狀態;其中,所述第一擴展通道用于在所述第一擴展通道開啟時將所述至少兩路SDA和SCL中的第一路SDA和SCL提供給第一I2C從設備,以使所述第一I2C從設備通過所述I2C總線與所述主機通信;
通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號,或,控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號,以觸發所述I2C總線擴展器件進行復位;其中,通過所述I2C總線擴展器件的復位以解除所述I2C總線的所述死鎖狀態。
可選的,通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號,包括:
生成所述復位觸發信號;
通過所述主機的通用輸入輸出(General Purpose Input Output,GPIO)接口向所述I2C總線擴展器件發送所述復位觸發信號。
可選的,控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號,包括:
控制所述邏輯器件產生所述復位觸發信號;其中,所述邏輯器件分別與所述主機和所述I2C總線擴展器件連接;
指示所述邏輯器件將所述復位觸發信號發送給所述I2C總線擴展器件。
可選的,在通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號之前,或在控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號之前,所述方法還包括:
根據所述I2C總線擴展器件的器件類型,確定用于觸發所述I2C總線擴展器件進行有效復位的復位有效電平;
通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號,或,控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號,以觸發所述I2C總線擴展器件進行復位,包括:
通過所述預設接口向所述I2C總線擴展器件發送第一預設時長的所述復位有效電平,以使所述I2C總線擴展器件在第二預設時長后完成復位;或
控制所述邏輯器件向所述I2C總線擴展器件發送第一預設時長的所述復位有效電平,以使所述I2C總線擴展器件在第二預設時長后完成復位;
其中,所述第二預設時長小于等于所述第一預設時長。
可選的,在觸發所述I2C總線擴展器件進行復位之后,所述方法還包括:
確定所述I2C總線是否已經解除所述死鎖狀態;
若確定所述I2C總線已經解除所述死鎖狀態,則確定所述第一I2C從設備發生故障。
另一方面,提供一種裝置,該裝置通過I2C總線與I2C總線擴展器件連接,I2C總線擴展器件用于將I2C總線的串行數據線SDA和串行數據線SCL擴展成至少兩路SDA和SCL;該裝置包括:
第一確定模塊,用于若所述I2C總線擴展器件中的第一擴展通道開啟后收到關閉指示但未成功關閉,則確定所述I2C總線處于死鎖狀態;其中,所述第一擴展通道用于在所述第一擴展通道開啟時將所述至少兩路SDA和SCL中的第一路SDA和SCL提供給第一I2C從設備,以使所述第一I2C從設備通過所述I2C總線與所述裝置通信;
控制模塊,用于通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號,或,控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號,以觸發所述I2C總線擴展器件進行復位;其中,通過所述I2C總線擴展器件的復位以解除所述I2C總線的所述死鎖狀態。
可選的,所述控制模塊用于:
生成所述復位觸發信號;
通過所述主機的通用輸入輸出GPIO接口向所述I2C總線擴展器件發送所述復位觸發信號。
可選的,所述控制模塊用于:
控制所述邏輯器件產生所述復位觸發信號;其中,所述邏輯器件分別與所述主機和所述I2C總線擴展器件連接;
指示所述邏輯器件將所述復位觸發信號發送給所述I2C總線擴展器件。
可選的,所述裝置還包括:
第二確定模塊,用于在通過所述主機上的預設接口向所述I2C總線擴展器件發送復位觸發信號之前,或在控制邏輯器件向所述I2C總線擴展器件發送復位觸發信號之前,根據所述I2C總線擴展器件的器件類型,確定用于觸發所述I2C總線擴展器件進行有效復位的復位有效電平;
所述控制模塊用于:
通過所述預設接口向所述I2C總線擴展器件發送第一預設時長的所述復位有效電平,以使所述I2C總線擴展器件在第二預設時長后完成復位;或
控制所述邏輯器件向所述I2C總線擴展器件發送第一預設時長的所述復位有效電平,以使所述I2C總線擴展器件在第二預設時長后完成復位;
其中,所述第二預設時長小于等于所述第一預設時長。
可選的,所述裝置還包括:
第三確定模塊,用于在觸發所述I2C總線擴展器件進行復位之后,確定所述I2C總線是否已經解除所述死鎖狀態;
第四確定模塊,用于若確定所述I2C總線已經解除所述死鎖狀態,則確定所述第一I2C從設備發生故障。
本發明實施例提供的解除I2C總線死鎖的方法和裝置,在I2C總線擴展器件中的第一擴展通道開啟的過程中可以關閉第一擴展通道,由于第一擴展通道是用于將I2C總線的SDA和SCL提供給第一I2C從設備以便第一I2C從設備能夠與主機進行通信,所以當第一擴展通道無法關閉時則可以認為I2C總線的SDA一直處于拉低的狀態,這樣就會導致I2C總線處于死鎖狀態,即,在第一擴展通道開啟后又收到關閉指示但未成功關閉時,可以確定I2C總線處于死鎖狀態,此時向I2C總線擴展器件發送復位觸發信號就可以觸發I2C總線擴展器件進行復位,由于I2C總線擴展器件自身也是作為I2C總線的I2C從設備,通過I2C總線擴展器件的復位可以帶動I2C總線進行復位,進而解除I2C總線的死鎖狀態,也就是說,本發明實施例通過向I2C總線擴展器件發送復位觸發信號的方式可以快速解除I2C總線的死鎖狀態,這樣可以盡量減小甚至消除可能由于第一I2C從設備發生故障而導致I2C總線出現死鎖的負面影響,以保證其它I2C從設備與主機之間的正常通信,提高I2C總線的有效性,進而提高系統的可靠性。
在本發明實施例中,主機可以通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,即可以由主機自身直接向I2C總線擴展器件發送復位觸發信號,或者主機也可以控制邏輯器件向I2C總線擴展器件發送復位觸發信號。
當主機自身直接向I2C總線擴展器件發送復位觸發信號時,主機可以利用自身現有的接口資源即可控制I2C總線擴展器件進行復位以解除I2C總線的死鎖狀態,而無需增加額外的配置,通用性較高。
另外,由于邏輯器件是比較常規、通用的器件,且制作成本較低并且通用性也較高,目前的系統中一般已經具有現成的邏輯器件,所以采用控制邏輯器件向I2C總線擴展器件發送復位觸發信號的方式所花費的成本也較低,通用性也較高。并且通過邏輯器件發送復位觸發信號的方式還可以盡量減少對主機上的一些接口的占用,在主機的接口資源有限的情況下,可以便于I2C總線擴展器件通過邏輯器件能夠有效地進行復位,并且,邏輯器件的位置可以任意設置,例如設置在靠近I2C總線擴展器件的位置,這樣還可以盡量縮短復位觸發信號傳輸至I2C總線擴展器件的時間,以便于I2C總線擴展器件能夠快速地獲得復位觸發信號進而快速地執行復位操作,從而可以縮短解除I2C總線處于死鎖狀態而耗用的時間,提高I2C總線的解鎖效率。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
圖1為現有技術中通過PCA9548A對I2C總線進行擴展的示意圖;
圖2為本發明實施例中I2C主機與I2C總線擴展器件連接的示意圖;
圖3為本發明實施例中解除I2C總線死鎖的方法的流程圖;
圖4為本發明實施例中第一種發送復位觸發信號的方式的示意圖;
圖5為本發明實施例中第二種發送復位觸發信號的方式的示意圖;
圖6為本發明實施例中裝置的結構框圖;
圖7為本發明實施例中裝置的另一結構框圖;
圖8為本發明實施例中裝置的另一結構框圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚明白,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。在不沖突的情況下,本發明中的實施例及實施例中的特征可以相互任意組合。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執行所示出或描述的步驟。
另外,本文中術語“和/或”,僅僅是一種描述關聯對象的關聯關系,表示可以存在三種關系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本文中字符“/”,在不做特別說明的情況下,一般表示前后關聯對象是一種“或”的關系。
首先介紹本發明實施例的應用場景。
I2C總線上一般連接有至少一個I2C主機和至少一個I2C從設備,或者也可以將I2C主機稱為主設備,而將I2C從設備稱為從設備,只有I2C總線上的I2C主設備才能對I2C總線實現管理和檢測,即產生起始信號和停止信號,如圖1所示,可以將圖1中的PC9548A以及PC9548A下掛的其它設備看作是I2C主機的I2C從設備。為了簡化描述,后續將I2C主機簡稱為主機。
本發明實施例提供一種解除I2C總線死鎖的方法,該方法可以應用于前述的主機,即該方法中各步驟的執行主體可以是前述的主機,該主機與I2C總線擴展器件均連接在I2C總線上,通過I2C總線擴展器件可以將I2C總線的SDA和SCL擴展成多路SDA和SCL,而擴展的每一路SDA和SCL可以對應一個擴展通道,擴展通道具有類似開關的功能,當擴展通道被開啟時,與該擴展通道連接的I2C從設備可以通過所擴展出的SDA和SCL獲得SDA信號和SCL信號,當擴展通道被關閉時,與該擴展通道連接的I2C從設備則無法再獲得SDA信號和SCL信號,相當于是說,擴展通道的作用是將所擴展出的SDA和SCL提供給其下掛的I2C從設備,以使得其下掛的I2C從設備能夠通過該擴展通道連接到I2C總線上,進而通過I2C總線與主機進行通信。
一般來說,I2C總線擴展器件內部可以集成寄存器,主機可以通過控制I2C總線擴展器件內部的寄存器來實現對I2C總線擴展器件開啟或關閉的控制。
請參見圖2,圖2為本發明實施例中主機與I2C總線擴展器件連接的示意圖,在圖2是以I2C總線擴展器件擴展了3路SDA和SCL為例進行圖示說明,在擴展出的每一路SDA和SCL下可以掛接一個I2C從設備,即如圖2中的I2C從設備1-3。需要說明的是,由于I2C總線擴展器件也是掛接在I2C總線上,所以可以將I2C總線擴展器件也看作是主機的一個I2C從設備。
I2C總線擴展器件,或者也可以稱為I2C選通復用器。在具體實施過程中,I2C總線擴展器件可以包括不同類型或者不同規格的器件,例如可以為PCA9548、PCA9548A、74FST3251等器件,或者可以為其它可編程邏輯器件(Complex Programmable Logic Device,CPLD),本發明實施例對于I2C總線擴展器件具體為何種器件不做具體限制,只要其能將I2C總線的SDA和SCL擴展為至少兩路SDA和SCL的器件即可。
為了更好的理解上述技術方案,下面將結合說明書附圖以及具體的實施方式對上述技術方案進行詳細的說明。
請參見圖3,本發明實施例中的解除I2C總線死鎖的方法的流程描述如下。
步驟301:若I2C總線擴展器件中的第一擴展通道開啟后收到關閉指示但未關閉成功,則確定I2C總線處于死鎖狀態。
也就是說,在I2C總線擴展器件中的第一擴展通道開啟后,可以通過向I2C總線擴展器件發送關閉指示的方式以指示I2C總線擴展器件關閉第一擴展通道,即此處的關閉指示是用于指示I2C總線擴展器件關閉第一擴展通道。
其中,第一擴展通道可以指I2C總線擴展器件所包括的所有擴展通道中的任意一個擴展通道,如圖2所示,例如可以是指與I2C從設備1-3中任意一個I2C從設備所對應的擴展通道。以第一擴展通道是圖2所示的與I2C從設備1所對應的擴展通道為例,那么I2C從設備即為本發明實施例中的第一I2C從設備。當第一擴展通道開啟時,I2C從設備1通過第一擴展通道與I2C總線連接,此時I2C從設備1可以獲得I2C總線的SDA信號和SCL信號,即I2C從設備1此時與主機都掛接在I2C總線上,能夠與主機進行通信。
當主機需要訪問I2C從設備1時,可以控制第一擴展通道開啟,在第一擴展通道開啟之前或者在主機訪問I2C從設備1的過程中,I2C從設備1可能發生故障,那么I2C從設備1就無法對主機進行應答,但此時由于開啟第一擴展通道會將I2C總線的SDA拉低,但I2C從設備1卻無法進行應答,就會使得I2C總線的SDA一直處于拉低狀態,進而導致I2C總線處于死鎖狀態。
所以,在第一擴展通道開啟之后,例如在主機確定已經結束對I2C從設備1的訪問過程之后,主機可以對I2C總線擴展器件進行控制以關閉第一擴展通道,例如向I2C總線擴展器件發送前述的關閉指示以指示I2C總線擴展器件關閉第一擴展通道。進一步地,在發送關閉指示之后,主機可以判斷第一擴展通道是否已經成功關閉,例如可以在發送關閉指示一定時間間隔之后再判斷第一擴展通道是否已經成功關閉,等待一定時間間隔再執行判斷的目的是為了給I2C總線擴展器件預留足夠的時間以執行關閉第一擴展通道的操作。
若確定第一擴展通道并未成功關閉,此時則可以認為I2C總線被鎖死了,即處于死鎖狀態,并且,此時可以確定I2C從設備1可能已經發生故障,同時,可以輸出告警信息以告知用戶I2C從設備1可能發生故障了,以便用戶能夠及時查看或者進行相應處理,盡量降低由于設備故障而帶來的業務中斷或其它負面影響。
步驟302:通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,或,控制邏輯器件性I2C總線擴展器件發送復位觸發信號,已出發I2C總線擴展器件進行復位。
在確定I2C總線處于死鎖狀態之后,本發明實施例中,主機可以向I2C總線擴展器件發送復位觸發信號以觸發I2C總線擴展器件進行復位。由于I2C總線擴展器件自身也是作為I2C總線的一個I2C從設備,通過I2C總線擴展器件的復位可以帶動I2C總線進行復位,即將之前一直處于拉低狀態的SDA釋放進而解除I2C總線的死鎖狀態,也就是說,可以通過I2C總線擴展器件的復位來解決I2C總線的死鎖狀態。
因為當I2C總線處于死鎖狀態時,I2C總線上連接的所有I2C從設備均無法訪問主機,同時主機也無法訪問所有的I2C從設備,即,當I2C總線處于死鎖狀態時,主機與所有的I2C從設備之間均無法進行通信,相當于此時系統中的I2C模塊處于失效狀態,那么系統中基于I2C總線的所有通信業務均無法進行,所以,在I2C總線的死鎖狀態被解除后,可以方便其它I2C從設備與主機之間進行通信,以保證系統的正常運行,進而提高系統的可靠性。同時,在I2C總線的死鎖狀態被解除后,I2C總線擴展器件的擴展功能可以繼續使用,進而可以提高I2C總線的利用率和有效性。
也就是說,通過向I2C總線擴展器件發送復位觸發信號的方式可以快速解除I2C總線的死鎖狀態,這樣可以盡量減小甚至消除可能由于第一I2C從設備發生故障而導致I2C總線出現死鎖的負面影響,以保證其它I2C從設備與主機之間的正常通信,提高I2C總線的有效性,進而提高系統的可靠性。
為了便于本領域技術人員對本發明實施例中的方案進行理解,以下提供兩種實施方式用于說明主機是如何向I2C總線擴展器件發送復位觸發信號的,當然,本發明實施例包括但不限于以下兩種方式,凡是通過主機或者通過主機控制向I2C總線擴展器件發送復位觸發信號以觸發I2C總線擴展器件進行復位的方式均應在本發明的保護范圍之內。
第一種方式:
通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,以觸發I2C總線擴展器件進行復位。具體來說,在需要控制I2C總線擴展器件進行復位時,主機可以生成復位觸發信號,再通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號。
也就是說,在需要控制I2C總線擴展器件進行復位時,主機可以先生成復位觸發信號,再通過主機自身所配置的預設接口向I2C總線擴展器件發送該復位觸發信號。其中,主機中的預設接口可以是指能夠用于向I2C總線擴展器件傳輸復位觸發信號的接口,預設接口可以由用戶預先配置,或者可以由主機自主選擇,例如主機可以按照自身當前的接口資源的使用情況選擇出用于向I2C總線擴展器件發送復位觸發信號的接口,比如主機有4個預設接口,但是當前其中的三個都處于工作狀態而另外一個處于空閑狀態,為了能夠盡快將復位觸發信號發送給I2C總線擴展器件,此時主機可以選擇通過當前處于空閑狀態的接口向I2C總線擴展器件發送復位觸發信號,或者主機還可以根據其它因素來選擇當前用于向I2C總線擴展器件發送復位觸發信號的接口,本發明不做具體限制。
當主機自身直接向I2C總線擴展器件發送復位觸發信號時,主機可以利用自身現有的接口資源即可控制I2C總線擴展器件進行復位以解除I2C總線的死鎖狀態,而無需增加額外的配置,通用性較高。
在具體實施過程中,預設接口例如可以是主機中的GPIO接口,如圖4所示,主機通過GPIO接口向I2C總線擴展器件發送復位觸發信號,此時GPIO接口與I2C總線擴展器件之間可以具有電性連接關系。另外,由于器件的復位一般是通過復位引腳接收復位觸發信號,所以在圖4中示出了I2C總線擴展器件包括復位引腳的示例。
由于GPIO接口是一般設備中的通用接口,通過GPIO接口向I2C總線擴展器件發送復位觸發信號的方式,這樣利用通用的接口資源即實現對I2C總線死鎖狀態的快速解除。并且使用GPIO接口傳輸數據時所消耗的功耗也較低,這樣可以盡量降低系統的整體功耗,另外,由于GPIO內置I2C從機接口,主機即使在待機模式下也能夠全速工作,進而方便主機能夠在不同工作模式均能夠將復位觸發信號快速地發送給I2C總線擴展器件,以提高I2C總線擴展器件復位的效率。
第二種方式:
控制邏輯器件向I2C總線擴展器件發送復位觸發信號,以觸發I2C總線擴展器件進行復位。具體來說,主機可以先控制邏輯器件產生復位觸發信號,再指示邏輯器件將復位觸發信號發送給I2C總線擴展器件。
本發明實施例中,在主機與I2C總線擴展器件之間設置有邏輯器件,邏輯器件可以分別與主機和I2C總線擴展器件連接,例如圖5所示。邏輯器件例如可以包括復雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)或者現場可編程門陣列(Field-Programmable Gate Array,FPGA),等等。
由于邏輯器件是比較常規、通用的器件,且制作成本較低并且通用性也較高,目前的一些系統中已經具有現成的邏輯器件,所以通過邏輯器件向I2C總線擴展器件發送復位觸發信號的方式所花費的成本也較低,通用性較高。
同時,采用邏輯器件生成并發送復位觸發信號的方式還可以盡量減少對于主機自身資源(例如處理器資源和接口資源)的耗用,以便于主機能夠利用這些資源處理其它更多的業務,在主機接口資源有限的情況下,通過邏輯器件可以隨時向I2C總線擴展器件發送復位觸發信號,而無需等待主機的接口空閑,這樣可以便于I2C總線擴展器件能夠有效、快速地進行復位。
并且,邏輯器件的位置也可以隨意設置,例如設置在靠近I2C總線擴展器件的位置,這樣可以縮短復位觸發信號的傳輸時間,提高復位觸發信號的傳輸速率,以便于I2C總線擴展器件能夠快速獲得復位觸發信號而執行復位操作,進而縮短解除I2C總線處于死鎖狀態而耗用的時間,提高I2C總線的解鎖效率。
一般來說,器件在進行復位時一般是通過接收復位有效電平而進行復位,即前述的復位觸發信號可以是以電平的形態呈現。并且,不同的器件進行有效復位所需要的復位有效電平可能不同,這和器件的制作工藝以及具體性能有關,例如對于不同的I2C總線擴展器件來說,觸發其進行有效復位的有效復位電平可能是高電平,也可能是低電平。所以,在發送復位觸發信號之前,主機可以先根據I2C總線擴展器件的器件類型,確定用于觸發I2C總線擴展器件進行有效復位的復位有效電平,以I2C總線擴展器件是PCA9548A為例,觸發PCA9548A進行有效復位的有效復位電平即為低電平。
對于本發明實施例中的通過主機的預設接口或者控制邏輯器件向I2C總線擴展器件發送復位觸發信號的方式,則是指通過主機產生或者由主機控制邏輯器件產生能夠觸發I2C總線擴展器件進行有效復位的電平,繼續以I2C總線擴展器件是PCA9548A為例,為了觸發PCA9548A進行有效復位,主機或者邏輯器件可以產生低電平。
而且,器件完成復位操作一般需要一定的時長,根據器件類型的不同,完成復位所需時長一般不同,例如對于一種可能的I2C總線擴展器件來說,要完成復位的最短時長為500納秒(ns),所以在本發明實施中,在向I2C總線擴展器件發送復位有效電平時,可以持續發送第一預設時長,以使得I2C總線擴展器件在第二預設時長后完成復位。
第一預設時長可以是指器件完成復位操作所需的最短時長,例如一個器件完成復位操作所需的最短時長為500ns,此時則可以將第一預設時長設置為500ns,這樣可以確保器件能夠正常進行復位,器件則可以在500ns后完成復位,即此時第一預設時長和第二預設長相等。
或者,第一預設時長可以是指大于器件完成復位所需的最短時長,繼續前述例子,例如可以將第一預設時長設置為600ns,因為在有些情況下,為了避免器件在進行復位操作過程中可能發生的意外而導致時間的額外消耗,所以為了最大程度的確保復位成功,可以將第一預定時長設置為稍稍大于器件復位所需的最短時長,至于需要大于最短時長多久,可以根據I2C總線擴展器件的器件特性以及對于復位時間要求的高低程度而定,本發明實施例不做具體限制。
當將第一預設時長設置為大于器件完成復位所需的最短時長時,例如設置為600ns,由于器件復位所需的最短時長為500ns,所以器件在不發生意見的情況下則不會造成復位時間的額外消耗,即在500ns就完成啟動,此時第二預設時長為500ns,小于第一預設時長。或者,由于一些意外,器件可能在550ns或者在600ns時才完成啟動,此時第二預設時長也是小于或等于第一預設時長。
另外,在向I2C總線擴展器件發送復位觸發信號之后,主機還可以進一步判斷I2C總線的死鎖狀態是否已經成功解除,例如判斷之前被拉低的SDA是否被釋放,或者可以通過主機直接用于檢測I2C總線的狀態的檢測模塊來檢測并判斷I2C總線的死鎖狀態是否被解除。因為在復位觸發信號的傳輸過程中,或者在I2C總線擴展器件基于復位觸發信號進行復位操作的過程中,可能會出現一些導致復位失敗的因素,所以為了盡量確保死鎖狀態解除的準確性,主機在發送復位觸發信號或者在間隔發送復位觸發信號的一定時間之后,可以進行檢測。
若確定I2C總線的死鎖狀態沒有解除,主機可以再次發送復位觸發信號以再次觸發I2C總線擴展器件進行復位,以確保有效復位,或者可以輸出提示信息,以便用戶能夠及時獲知這一異常情況,再人工對設備進行檢測,等等。
若確定I2C總線的死鎖狀態已經解除,則可以確定第一I2C從設備發生了故障,進而再通過輸出提示信息的方式對用戶進行提示,以便用戶能夠從多個I2C從設備中確定出發生故障的I2C從和設備。在具體實施過程中,主機可以采用上述方法再對其它I2C從設備是否發生故障進行檢測,當I2C從設備的數量較多時,采用本發明實施例中的方法可以快速地從多個I2C從設備中確定發生故障的設備,以提高故障設備的定位效率,同時由于無需人工進行檢測,可以降低人力成本。
本發明實施例提供的解除I2C總線死鎖的方法,在I2C總線擴展器件中的第一擴展通道開啟的過程中可以關閉第一擴展通道,由于第一擴展通道是用于將I2C總線的SDA和SCL提供給第一I2C從設備以便第一I2C從設備能夠與主機進行通信,所以當第一擴展通道無法關閉時則可以認為I2C總線的SDA一直處于拉低的狀態,這樣就會導致I2C總線處于死鎖狀態,即,在第一擴展通道開啟后又收到關閉指示但未成功關閉時,可以確定I2C總線處于死鎖狀態,此時向I2C總線擴展器件發送復位觸發信號就可以觸發I2C總線擴展器件進行復位,由于I2C總線擴展器件自身也是作為I2C總線的I2C從設備,通過I2C總線擴展器件的復位可以帶動I2C總線進行復位,進而解除I2C總線的死鎖狀態,也就是說,本發明實施例通過向I2C總線擴展器件發送復位觸發信號的方式可以快速解除I2C總線的死鎖狀態,這樣可以盡量減小甚至消除可能由于第一I2C從設備發生故障而導致I2C總線出現死鎖的負面影響,以保證其它I2C從設備與主機之間的正常通信,提高I2C總線的有效性,進而提高系統的可靠性。
在本發明實施例中,主機可以通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,即可以由主機自身直接向I2C總線擴展器件發送復位觸發信號,或者主機也可以控制邏輯器件向I2C總線擴展器件發送復位觸發信號。
當主機自身直接向I2C總線擴展器件發送復位觸發信號時,主機可以利用自身現有的接口資源即可控制I2C總線擴展器件進行復位以解除I2C總線的死鎖狀態,而無需增加額外的配置,通用性較高。
另外,由于邏輯器件是比較常規、通用的器件,且制作成本較低并且通用性也較高,目前的系統中一般已經具有現成的邏輯器件,所以采用控制邏輯器件向I2C總線擴展器件發送復位觸發信號的方式所花費的成本也較低,通用性也較高。并且通過邏輯器件發送復位觸發信號的方式還可以盡量減少對主機上的一些接口的占用,在主機的接口資源有限的情況下,可以便于I2C總線擴展器件通過邏輯器件能夠有效地進行復位,并且,邏輯器件的位置可以任意設置,例如設置在靠近I2C總線擴展器件的位置,這樣還可以盡量縮短復位觸發信號傳輸至I2C總線擴展器件的時間,以便于I2C總線擴展器件能夠快速地獲得復位觸發信號進而快速地執行復位操作,從而可以縮短解除I2C總線處于死鎖狀態而耗用的時間,提高I2C總線的解鎖效率。
請參見圖6,基于同一發明構思,本發明實施例還提供一種裝置,該裝置通過I2C總線與I2C總線擴展器件連接,I2C總線擴展器件用于將I2C總線的SDA和SCL擴展成至少兩路SDA和SCL。該裝置包括第一確定模塊601和控制模塊602,而且本發明實施例中的第一確定模塊601和控制模塊602可以通過硬件處理器來實現相關功能單元。其中:
第一確定模塊601,用于若I2C總線擴展器件中的第一擴展通道開啟后收到關閉指示但未成功關閉,則確定I2C總線處于死鎖狀態;其中,第一擴展通道用于在第一擴展通道開啟時將至少兩路SDA和SCL中的第一路SDA和SCL提供給第一I2C從設備,以使第一I2C從設備通過I2C總線與裝置通信;
控制模塊602,用于通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,或,控制邏輯器件向I2C總線擴展器件發送復位觸發信號,以觸發I2C總線擴展器件進行復位;其中,通過I2C總線擴展器件的復位以解除I2C總線的死鎖狀態。
可選的,控制模塊602用于:
生成復位觸發信號;
通過主機的通用輸入輸出GPIO接口向I2C總線擴展器件發送復位觸發信號。
可選的,控制模塊602用于:
控制邏輯器件產生復位觸發信號;其中,邏輯器件分別與主機和I2C總線擴展器件連接;
指示邏輯器件將復位觸發信號發送給I2C總線擴展器件。
可選的,請參見圖7,本發明實施例中的裝置還包括:
第二確定模塊701,用于在通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號之前,或在控制邏輯器件向I2C總線擴展器件發送復位觸發信號之前,根據I2C總線擴展器件的器件類型,確定用于觸發I2C總線擴展器件進行有效復位的復位有效電平;
控制模塊602用于:
通過預設接口向I2C總線擴展器件發送第一預設時長的復位有效電平,以使I2C總線擴展器件在第二預設時長后完成復位;或
控制邏輯器件向I2C總線擴展器件發送第一預設時長的復位有效電平,以使I2C總線擴展器件在第二預設時長后完成復位;
其中,第二預設時長小于等于第一預設時長。
可選的,請參見圖8,本發明實施例中的裝置還包括:
第三確定模塊801,用于在觸發I2C總線擴展器件進行復位之后,確定I2C總線是否已經解除死鎖狀態;
第四確定模塊802,用于若確定I2C總線已經解除死鎖狀態,則確定第一I2C從設備發生故障。
由于本發明實施例中的裝置與上述解除I2C總線死鎖的方法解決問題的原理相似,因此本發明實施例中裝置的實施可以參見上述解除I2C總線死鎖的方法的實施,在此不再贅述。
本發明實施例中的裝置,在I2C總線擴展器件中的第一擴展通道開啟的過程中可以關閉第一擴展通道,由于第一擴展通道是用于將I2C總線的SDA和SCL提供給第一I2C從設備以便第一I2C從設備能夠與主機進行通信,所以當第一擴展通道無法關閉時則可以認為I2C總線的SDA一直處于拉低的狀態,這樣就會導致I2C總線處于死鎖狀態,即,在第一擴展通道開啟后又收到關閉指示但未成功關閉時,可以確定I2C總線處于死鎖狀態,此時向I2C總線擴展器件發送復位觸發信號就可以觸發I2C總線擴展器件進行復位,由于I2C總線擴展器件自身也是作為I2C總線的I2C從設備,通過I2C總線擴展器件的復位可以帶動I2C總線進行復位,進而解除I2C總線的死鎖狀態,也就是說,本發明實施例通過向I2C總線擴展器件發送復位觸發信號的方式可以快速解除I2C總線的死鎖狀態,這樣可以盡量減小甚至消除可能由于第一I2C從設備發生故障而導致I2C總線出現死鎖的負面影響,以保證其它I2C從設備與主機之間的正常通信,提高I2C總線的有效性,進而提高系統的可靠性。
在本發明實施例中,主機可以通過主機上的預設接口向I2C總線擴展器件發送復位觸發信號,即可以由主機自身直接向I2C總線擴展器件發送復位觸發信號,或者主機也可以控制邏輯器件向I2C總線擴展器件發送復位觸發信號。
當主機自身直接向I2C總線擴展器件發送復位觸發信號時,主機可以利用自身現有的接口資源即可控制I2C總線擴展器件進行復位以解除I2C總線的死鎖狀態,而無需增加額外的配置,通用性較高。
另外,由于邏輯器件是比較常規、通用的器件,且制作成本較低并且通用性也較高,目前的系統中一般已經具有現成的邏輯器件,所以采用控制邏輯器件向I2C總線擴展器件發送復位觸發信號的方式所花費的成本也較低,通用性也較高。并且通過邏輯器件發送復位觸發信號的方式還可以盡量減少對主機上的一些接口的占用,在主機的接口資源有限的情況下,可以便于I2C總線擴展器件通過邏輯器件能夠有效地進行復位,并且,邏輯器件的位置可以任意設置,例如設置在靠近I2C總線擴展器件的位置,這樣還可以盡量縮短復位觸發信號傳輸至I2C總線擴展器件的時間,以便于I2C總線擴展器件能夠快速地獲得復位觸發信號進而快速地執行復位操作,從而可以縮短解除I2C總線處于死鎖狀態而耗用的時間,提高I2C總線的解鎖效率。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能單元完成,即將裝置的內部結構劃分成不同的功能單元,以完成以上描述的全部或者部分功能。上述描述的系統,裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本發明所提供的幾個實施例中,應該理解到,所揭露的系統,裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。