專(zhuān)利名稱(chēng):一種實(shí)現(xiàn)i2c總線(xiàn)控制的系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及因特爾集成電路(I2C, Inter-Integrated Circuit)總線(xiàn)技術(shù),尤其涉 及一種利用復(fù)雜可編程邏輯器件(CPLD)實(shí)現(xiàn)I2C總線(xiàn)控制的系統(tǒng)及方法。
背景技術(shù):
I2C總線(xiàn)是一種由PHILIPS公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其 外圍設(shè)備。I2C總線(xiàn)產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開(kāi)發(fā),如今主要在服務(wù)器管理 中使用,其中包括單個(gè)組件狀態(tài)的通信。例如管理員可對(duì)各個(gè)組件進(jìn)行查詢(xún),以管理系統(tǒng)的 配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇??呻S時(shí)監(jiān)控內(nèi)存、硬盤(pán)、網(wǎng)絡(luò)、系統(tǒng)溫度等 多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。 在現(xiàn)有的以太網(wǎng)交換機(jī)、路由器等設(shè)備中,經(jīng)常會(huì)使用12C總線(xiàn)來(lái)控制整個(gè)系統(tǒng) 的溫度傳感器、電源管理模塊、電可擦可編程只讀存儲(chǔ)器(E2PR0M,Electrically Erasable Programmable Read-0nly Memory)等多個(gè)設(shè)備。這些設(shè)備將分布在整個(gè)系統(tǒng)中,統(tǒng)一管理 時(shí),由于走線(xiàn)太長(zhǎng)、設(shè)備太多等等原因,可能造成信號(hào)質(zhì)量太差,從而引起設(shè)備訪(fǎng)問(wèn)不正常。
現(xiàn)有一些專(zhuān)門(mén)的I2C總線(xiàn)驅(qū)動(dòng)芯片,比如緩沖器(buffer)或者集線(xiàn)器(hub)等可 以解決這個(gè)對(duì)12C總線(xiàn)控制的問(wèn)題,但是,由于12C總線(xiàn)驅(qū)動(dòng)芯片是一種硬件實(shí)現(xiàn),因此,采 用這種I2C總線(xiàn)驅(qū)動(dòng)芯片會(huì)額外增加制造成本;而且在一些高密度單板上,也沒(méi)有額外的 空間來(lái)放置這些I2C總線(xiàn)驅(qū)動(dòng)芯片,如果硬性要放置這些I2C總線(xiàn)驅(qū)動(dòng)芯片,則會(huì)增加單板 的設(shè)計(jì)復(fù)雜度。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種實(shí)現(xiàn)I2C總線(xiàn)控制的系統(tǒng)及方法,通 過(guò)CPLD來(lái)實(shí)現(xiàn)I2C總線(xiàn)控制,能降低成本和單板的設(shè)計(jì)復(fù)雜度。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的 —種實(shí)現(xiàn)I2C總線(xiàn)控制的系統(tǒng),該系統(tǒng)包括復(fù)雜可編程邏輯器件(CPLD),用于將 采集自主設(shè)備的因特爾集成電路(I2C)總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總 線(xiàn)上;在采集自主設(shè)備的12C總線(xiàn)的SDA信號(hào)與從設(shè)備的12C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng) 前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。 其中,所述CPLD進(jìn)一步包括信號(hào)采集模塊、時(shí)鐘分發(fā)模塊和方向控制模塊;其 中, 信號(hào)采集模塊,用于采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和 SDA信號(hào); 時(shí)鐘分發(fā)模塊,用于將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展到下級(jí)多路從設(shè)備的I2C 總線(xiàn)的SCL信號(hào)上; 方向控制模塊,用于通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的I2C總線(xiàn)上的當(dāng)前數(shù)據(jù) 狀態(tài),確定出當(dāng)前SDA信號(hào)的方向。
其中,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 0時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由主設(shè)備到從設(shè)備的方向; 或者,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 1時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由從設(shè)備到主設(shè)備的方向。 其中,所述CPLD進(jìn)一步包括數(shù)據(jù)控制模塊,用于根據(jù)方向控制模塊的信號(hào),選擇SDA信號(hào)的方向。 其中,所述CPLD進(jìn)一步包括防掛死模塊,用于在系統(tǒng)啟動(dòng)或者復(fù)位過(guò)程中向各個(gè)下級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。
—種實(shí)現(xiàn)I2C總線(xiàn)控制的方法,該方法包括 將采集自主設(shè)備的I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;
在采集自主設(shè)備的12C總線(xiàn)的SDA信號(hào)與從設(shè)備的12C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。 其中,所述采集具體包括信號(hào)采集模塊采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào)。 其中,將所述SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的12C總線(xiàn)上具體包括時(shí)鐘分發(fā)模塊將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展到下級(jí)多路從設(shè)備的I2C總線(xiàn)的SCL信號(hào)上。
其中,在所述SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向具體包括方向控制模塊通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的I2C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定出當(dāng)前SDA信號(hào)的方向;其中, 所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 0時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由主設(shè)備到從設(shè)備的方向;或者,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 1時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由從設(shè)備到主設(shè)備的方向。 其中,該方法還包括防掛死模塊在系統(tǒng)啟動(dòng)或者復(fù)位過(guò)程中向各個(gè)下級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。 本發(fā)明的CPLD用于將采集自主設(shè)備的I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。 由于本發(fā)明的CPLD是一種軟件實(shí)現(xiàn),因此,區(qū)別于現(xiàn)有技術(shù)采用I2C總線(xiàn)驅(qū)動(dòng)芯片的硬件實(shí)現(xiàn),采用本發(fā)明,無(wú)需額外增加制造成本,能降低成本和單板的設(shè)計(jì)復(fù)雜度。并且,由于分發(fā)出的12C設(shè)備是一一對(duì)應(yīng)的,信號(hào)質(zhì)量也會(huì)有很大的提高。
圖1為本發(fā)明系統(tǒng)實(shí)施例的組成結(jié)構(gòu)示意 圖2為本發(fā)明I2C總線(xiàn)開(kāi)始、停止?fàn)顟B(tài)示意 圖3為本發(fā)明I2C總線(xiàn)完整的時(shí)序圖。
具體實(shí)施例方式
本發(fā)明的基本思想是通過(guò)CPLD實(shí)現(xiàn)對(duì)I2C總線(xiàn)的控制,并將采集自主設(shè)備的I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備 I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信 號(hào)的方向。 下面結(jié)合附圖對(duì)技術(shù)方案的實(shí)施作進(jìn)一步的詳細(xì)描述。 —種實(shí)現(xiàn)12C總線(xiàn)控制的系統(tǒng),該系統(tǒng)包括CPLD, CPLD用于將采集自主設(shè)備的 I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn) 的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信 號(hào)的方向。 這里,CPLD進(jìn)一步包括信號(hào)采集模塊、時(shí)鐘分發(fā)模塊和方向控制模塊。其中,信 號(hào)采集模塊,用于采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào)。時(shí) 鐘分發(fā)模塊,用于將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展到下級(jí)多路從設(shè)備的I2C總線(xiàn)的SCL 信號(hào)上。方向控制模塊,用于通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的I2C總線(xiàn)上的當(dāng)前數(shù)據(jù) 狀態(tài),確定出當(dāng)前SDA信號(hào)的方向。 這里,當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 0時(shí),當(dāng)前SDA信號(hào)的方向具體為由主設(shè)備到 從設(shè)備的方向;或者,當(dāng)前數(shù)據(jù)狀態(tài)為SDA—DIR二1時(shí),當(dāng)前SDA信號(hào)的方向具體為由從設(shè) 備到主設(shè)備的方向。 這里,CPLD進(jìn)一步包括數(shù)據(jù)控制模塊,用于根據(jù)方向控制模塊的信號(hào),選擇SDA 信號(hào)的方向。 這里,CPLD進(jìn)一步包括防掛死模塊,用于在系統(tǒng)啟動(dòng)或者復(fù)位過(guò)程中向各個(gè)下 級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。 綜上所述,本發(fā)明用CPLD實(shí)現(xiàn)I2C總線(xiàn)控制,是一樣軟件實(shí)現(xiàn),相對(duì)于現(xiàn)有技術(shù)的 硬件實(shí)現(xiàn)而言,這種CPLD實(shí)現(xiàn)的I2C總線(xiàn)控制也可以理解為通過(guò)CPLD實(shí)現(xiàn)I2C透明橋, CPLD也可以稱(chēng)為12C透明橋。針對(duì)12C透明橋而言,由于在使用的時(shí)候和直接連接到主設(shè) 備一樣,就使用者來(lái)說(shuō),相當(dāng)于沒(méi)有這個(gè)CPLD,因此,可以理解為CPLD為I2C透明橋。
采用本發(fā)明,可以節(jié)約I2C總線(xiàn)驅(qū)動(dòng)芯片,降低制造成本,提供單板的密度,降低 單板的設(shè)計(jì)復(fù)雜度,并且采用CPLD這種軟件實(shí)現(xiàn)的控制,相比于現(xiàn)有技術(shù)采用硬件實(shí)現(xiàn)的 控制,能大大提高對(duì)I2C總線(xiàn)控制的可靠性。 本發(fā)明的方案主要是利用I2C時(shí)序的變化規(guī)律,在CPLD中通過(guò)邏輯組合電路來(lái)
判斷SDA的方向,從而實(shí)現(xiàn)I2C的透明橋功能。此外,還提供I2C的防掛死功能。 具體來(lái)說(shuō),本發(fā)明主要包括以下內(nèi)容 通過(guò)CPLD實(shí)現(xiàn)的I2C透明橋,包含下列模塊 信號(hào)采集模塊,利用一個(gè)高頻率的時(shí)鐘信號(hào)采集I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào)。 其中,高頻率的時(shí)鐘信號(hào)采用的頻率是相對(duì)于I2C總線(xiàn)SCL信號(hào)的頻率而言的。
時(shí)鐘分發(fā)模塊,將I2C總線(xiàn)上主設(shè)備(master)的SCL信號(hào)擴(kuò)展到下級(jí)各路I2C的 SCL信號(hào)上。其中,master的SCL信號(hào)指上級(jí)I2C總線(xiàn)的SCL信號(hào)。 方向控制模塊,通過(guò)判斷上、下級(jí)12C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定SDA信號(hào)的方 向。也就是說(shuō),判斷SDA信號(hào)的方向是上級(jí)讀下級(jí)I2C設(shè)備的方向,還是上級(jí)寫(xiě)下級(jí)I2C設(shè) 備的方向。 數(shù)據(jù)控制模i央,根據(jù)方向控制模塊的信號(hào),即SDA DIR,來(lái)選擇SDA信號(hào)的方向。這 里,所選擇的SDA信號(hào)的方向是指數(shù)據(jù)線(xiàn)上的方向,因?yàn)樵谶B接到CPLD的SDA信號(hào)都是雙向的,但是在某一個(gè)特定時(shí)間點(diǎn)上,對(duì)CPLD來(lái)說(shuō),它的方向只能是固定的,所以CPLD要確定 此時(shí)的SDA信號(hào)到底是輸入方向還是輸出方向。 防掛死模塊,在復(fù)位系統(tǒng)的過(guò)程中,向各個(gè)下級(jí)12C設(shè)備分發(fā)時(shí)鐘,從而使其釋放 12C總線(xiàn),達(dá)到防止I2C總線(xiàn)掛死的目的。也就是說(shuō),防掛死模塊主要起復(fù)位作用。針對(duì)復(fù) 位作用而言,在單板初始化或者復(fù)位操作的時(shí)候,CPLD會(huì)對(duì)從設(shè)備的SCL上分發(fā)時(shí)鐘信號(hào), 以便釋放到各個(gè)從設(shè)備對(duì)I2C總線(xiàn)的占用。
以下對(duì)本發(fā)明進(jìn)行舉例闡述。
系統(tǒng)實(shí)施例 如圖1所示為本發(fā)明系統(tǒng)實(shí)施例的組成結(jié)構(gòu)示意圖,也可以理解為CPLD實(shí)現(xiàn)I2C 透明橋的組成結(jié)構(gòu)示意圖。圖1中,主設(shè)備發(fā)出的12C總線(xiàn)(SCL M, SDA M)經(jīng)過(guò)CPLD的 12C透明橋處理后,可以分發(fā)多路I2C總線(xiàn)(SCL S l,SDA S 1 ;SCL S 2, SDA S 2 ;SCL S N, SDA S N),在這里可以根據(jù)實(shí)際需要選擇I2C的路數(shù)。 圖1中,CPLD主要包括信號(hào)采集模塊、時(shí)鐘分發(fā)模塊、方向控制模塊、數(shù)據(jù)控制模 塊和防掛死模塊,下面分別說(shuō)明各個(gè)模塊的具體功能。 信號(hào)采集模塊,利用一個(gè)高頻率的時(shí)鐘信號(hào),即相對(duì)于I2C總線(xiàn)SCL信號(hào)的頻率的 時(shí)鐘信號(hào),采集I2C總線(xiàn)的SCL和SDA。利用高頻信號(hào)采集低頻信號(hào),可以通過(guò)判斷兩個(gè)采 樣點(diǎn)是否電平一樣,采集到SCL和SDA線(xiàn)上的上升邊沿和下降邊沿。 時(shí)鐘分發(fā)模塊,將I2C總線(xiàn)上master的SCL信號(hào),即上級(jí)I2C總線(xiàn)的SCL信號(hào)擴(kuò) 展到下級(jí)各路I2C的SCL上。由于SCL信號(hào)是由主設(shè)備發(fā)送至所有從設(shè)備的單向信號(hào),因 此,在12C總線(xiàn)正常響應(yīng)的時(shí)候,只要將主設(shè)備的SCL M信號(hào)擴(kuò)展為多路,然后分發(fā)給各個(gè) 從設(shè)備的SCL S即可。 方向控制模塊,通過(guò)判斷上下級(jí)12C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定SDA信號(hào)的方 向,是上級(jí)讀下級(jí)I2C設(shè)備的方向,還是上級(jí)寫(xiě)下級(jí)I2C設(shè)備的方向。這里,12C總線(xiàn)的狀 態(tài)包括開(kāi)始(START)、結(jié)束(ST0P)、讀操作(READ)、寫(xiě)操作(WRITE)和應(yīng)答(ACK)等狀態(tài)。 其中,SDA信號(hào)的方向可以用參數(shù)SDA—DIR表示,SDA_DIR為0時(shí),即主設(shè)備要寫(xiě)從設(shè)備時(shí), 表示主設(shè)備到從設(shè)備的方向;SDA—DIR為1時(shí),即主設(shè)備要讀從設(shè)備時(shí),表示從設(shè)備到主設(shè) 備的方向。 數(shù)據(jù)控制模塊,根據(jù)方向控制模塊的信號(hào)SDA—DIR,來(lái)選擇SDA信號(hào)的方向。例如, 當(dāng)主設(shè)備SDA_M要寫(xiě)從設(shè)備的SDA_S_1時(shí),此時(shí)SDA_DIR = 0,則SDA信號(hào)的方向?yàn)? :SDA_ M為輸出,即CPLD I/O管腳方向,SDA—SJ為輸入,即CPLD I/O管腳方向。當(dāng)主設(shè)備SDA_M 要讀從設(shè)備的SDA_S_1時(shí),此時(shí)SDA_DIR = l,則SDA信號(hào)的方向?yàn)镾DA—M為輸入,即CPLD 1/0管腳方向,SDA_S_1為輸出,即CPLD 1/0管腳方向。 防掛死模塊,在復(fù)位系統(tǒng)的過(guò)程中,向各個(gè)下級(jí)12C設(shè)備分發(fā)時(shí)鐘,從而使其釋放 12C總線(xiàn),達(dá)到防止I2C總線(xiàn)掛死的目的。在主設(shè)備重啟等異常操作時(shí),通過(guò)系統(tǒng)產(chǎn)生一個(gè) 時(shí)鐘,分發(fā)給各個(gè)從設(shè)備的SCL—S,從而可以使各個(gè)從設(shè)備的I2C時(shí)序完成,釋放I2C總線(xiàn)。 這樣,當(dāng)主設(shè)備起來(lái)以后,也不會(huì)因?yàn)閽呙鐸2C設(shè)備,得到錯(cuò)誤的應(yīng)答而引起I2C設(shè)備掛死。
對(duì)I2C總線(xiàn)的控制中,由于SCL信號(hào)都是由主設(shè)備發(fā)往從設(shè)備,僅僅涉及將主設(shè)備 發(fā)來(lái)的SCL信號(hào)分成多路SCL信號(hào)的問(wèn)題;而SDA信號(hào)則不然,可能由主設(shè)備發(fā)往從設(shè)備, 也可能由從設(shè)備發(fā)往主設(shè)備,因此,對(duì)于SDA信號(hào)還需要判斷SDA信號(hào)的方向。I2C總線(xiàn)的
6開(kāi)始、停止?fàn)顟B(tài)如圖2所示;I2C總線(xiàn)完整的時(shí)序如圖3所示;I2C總線(xiàn)的讀寫(xiě)操作格式如以下表1、表2所示。 以下表1為I2C總線(xiàn)寫(xiě)操作的格式,表2為I2C總線(xiàn)讀操作的格式。
Write Byte FormatSADDRESSWRACKCOMMANDACKDATAACKP
7 bits8 bits8 bits
Slave Address: equivalent to chip-select line of a 3-wire interfaceCommand Byte: selects which register you are writing toData Byte: data goes into the register set by the command byte (to set thresholds, configuration asks, and sampling rate) 表1
Read Byte FormatSADDRESSWRACKCOMMANDACKSADDRESSRDACKDATA八CK〃/P
7 bits8 bits7 bits8 bits
Slave Address: equivalent to chip-select lineCommand Byte: selects which register you are reading fromSlave Address: repeated due to change in dataflow directionData Byte: reads from the register set by the command byte 表2 利用CPLD的軟件實(shí)現(xiàn),將主設(shè)備的SCL信號(hào)分成多路SCL信號(hào)比較易于實(shí)現(xiàn),而判斷SDA信號(hào)的方向相對(duì)復(fù)雜些,因此,這里僅對(duì)本發(fā)明用于判斷SDA信號(hào)的方向的方向控制模塊進(jìn)行具體闡述,下面詳細(xì)介紹該方向控制模塊內(nèi)部的具體實(shí)現(xiàn)流程,包括以下步驟 第一步,設(shè)置默認(rèn)狀態(tài)SDA_DIR為0。 第二步,當(dāng)I2C總線(xiàn)開(kāi)始信號(hào)(START)后,設(shè)置一個(gè)計(jì)數(shù)器C0,開(kāi)始對(duì)SCL信號(hào)的上升沿觸發(fā)計(jì)數(shù),在計(jì)數(shù)到8時(shí),如果當(dāng)前SDA信號(hào)的值為0,則判斷I2C總線(xiàn)處于寫(xiě)操作過(guò)程中;如果當(dāng)前SDA信號(hào)的值為l,則判斷I2C總線(xiàn)處于讀操作過(guò)程中。
第三步,如果I2C總線(xiàn)處于寫(xiě)操作過(guò)程中,則當(dāng)CO計(jì)數(shù)到9時(shí),將SDA—DIR設(shè)置為1,表示SDA方向?yàn)閺脑O(shè)備到到設(shè)備,并保持一個(gè)SCL時(shí)鐘周期,接受從設(shè)備發(fā)送端ACK信號(hào),然后恢復(fù)SDA_DIR = 0, CO = 1。 第四步,如果12C總線(xiàn)處于讀操作過(guò)程中,則當(dāng)再次檢測(cè)到12C總線(xiàn)開(kāi)始信號(hào)(START)后,設(shè)置SDA_DIR = 1,設(shè)置一個(gè)計(jì)數(shù)器Cl,開(kāi)始對(duì)SCL信號(hào)的上升沿觸發(fā)計(jì)數(shù),當(dāng)CI計(jì)數(shù)到9時(shí),將SDA_DIR設(shè)置為O,表示SDA方向?yàn)橹髟O(shè)備到從設(shè)備,并保持一個(gè)SCL時(shí)鐘周期,接受主設(shè)備發(fā)送端ACK信號(hào),然后恢復(fù)SDA—DIR二 1, Cl = 1。
第五步,當(dāng)檢測(cè)到I2C總線(xiàn)結(jié)束信號(hào)(STOP)時(shí),設(shè)置默認(rèn)狀態(tài)SDA_DIR為0,清計(jì)數(shù)器C0、C1為0。 —種實(shí)現(xiàn)I2C總線(xiàn)控制的方法,該方法包括以下步驟 步驟101、將采集自主設(shè)備的12C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C 總線(xiàn)上。 步驟102、在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào) 之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。 針對(duì)以上由步驟101 102所構(gòu)成的技術(shù)方案而言,采集具體包括信號(hào)采集模塊 采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào)。
步驟101的具體處理過(guò)程為時(shí)鐘分發(fā)模塊將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展 到下級(jí)多路從設(shè)備的I2C總線(xiàn)的SCL信號(hào)上。 步驟102的具體處理過(guò)程為方向控制模塊通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的 I2C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定出當(dāng)前SDA信號(hào)的方向。 其中,當(dāng)前數(shù)據(jù)狀態(tài)為SDA—DIR二 O時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由主設(shè) 備到從設(shè)備的方向;或者,當(dāng)前數(shù)據(jù)狀態(tài)為SDA—DIR二1時(shí),當(dāng)前SDA信號(hào)的方向具體為由 從設(shè)備到主設(shè)備的方向。 這里,該方法除了步驟101和步驟102,還包括防掛死模塊在系統(tǒng)啟動(dòng)或者復(fù)位
過(guò)程中向各個(gè)下級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。 以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
8
權(quán)利要求
一種實(shí)現(xiàn)I2C總線(xiàn)控制的系統(tǒng),其特征在于,該系統(tǒng)包括復(fù)雜可編程邏輯器件(CPLD),用于將采集自主設(shè)備的因特爾集成電路(I2C)總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。
2. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述CPLD進(jìn)一步包括信號(hào)采集模塊、時(shí)鐘分發(fā)模塊和方向控制模塊;其中,信號(hào)采集模塊,用于采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào);時(shí)鐘分發(fā)模塊,用于將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展到下級(jí)多路從設(shè)備的I2C總線(xiàn)的SCL信號(hào)上;方向控制模塊,用于通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的I2C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定出當(dāng)前SDA信號(hào)的方向。
3. 根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 0時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由主設(shè)備到從設(shè)備的方向;或者,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR= 1時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由從設(shè)備到主設(shè)備的方向。
4. 根據(jù)權(quán)利要求2或3所述的系統(tǒng),其特征在于,所述CPLD進(jìn)一步包括數(shù)據(jù)控制模塊,用于根據(jù)方向控制模塊的信號(hào),選擇SDA信號(hào)的方向。
5. 根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述CPLD進(jìn)一步包括防掛死模塊,用于在系統(tǒng)啟動(dòng)或者復(fù)位過(guò)程中向各個(gè)下級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。
6. —種實(shí)現(xiàn)I2C總線(xiàn)控制的方法,其特征在于,該方法包括將采集自主設(shè)備的I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述采集具體包括信號(hào)采集模塊采用高頻率的時(shí)鐘信號(hào)采集主設(shè)備的I2C總線(xiàn)的SCL信號(hào)和SDA信號(hào)。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,將所述SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上具體包括時(shí)鐘分發(fā)模塊將主設(shè)備的I2C總線(xiàn)的SCL信號(hào)擴(kuò)展到下級(jí)多路從設(shè)備的I2C總線(xiàn)的SCL信號(hào)上。
9. 根據(jù)權(quán)利要求8所述的方法,其特征在于,在所述SDA信號(hào)與從設(shè)備的12C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向具體包括方向控制模塊通過(guò)判斷主設(shè)備與下級(jí)多路從設(shè)備的I2C總線(xiàn)上的當(dāng)前數(shù)據(jù)狀態(tài),確定出當(dāng)前SDA信號(hào)的方向;其中,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA_DIR = 0時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由主設(shè)備到從設(shè)備的方向;或者,所述當(dāng)前數(shù)據(jù)狀態(tài)為SDA—DIR二 1時(shí),所述當(dāng)前SDA信號(hào)的方向具體為由從設(shè)備到主設(shè)備的方向。
10. 根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的方法,其特征在于,該方法還包括防掛死模塊在系統(tǒng)啟動(dòng)或者復(fù)位過(guò)程中向各個(gè)下級(jí)從設(shè)備分發(fā)時(shí)鐘,使各個(gè)下級(jí)從設(shè)備釋放I2C總線(xiàn)。
全文摘要
本發(fā)明公開(kāi)了一種實(shí)現(xiàn)I2C總線(xiàn)控制的系統(tǒng),該系統(tǒng)中,復(fù)雜可編程邏輯器件(CPLD)用于將采集自主設(shè)備的因特爾集成電路(I2C)總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在采集自主設(shè)備的I2C總線(xiàn)的SDA信號(hào)與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。本發(fā)明還公開(kāi)了一種實(shí)現(xiàn)I2C總線(xiàn)控制的方法,該方法包括將采集自主設(shè)備的I2C總線(xiàn)的SCL信號(hào)分成多路并擴(kuò)展到從設(shè)備的I2C總線(xiàn)上;在主設(shè)備與從設(shè)備的I2C總線(xiàn)的SDA信號(hào)之間,判斷當(dāng)前數(shù)據(jù)狀態(tài)并確定出當(dāng)前SDA信號(hào)的方向。采用本發(fā)明的方法及系統(tǒng),能降低成本和單板的設(shè)計(jì)復(fù)雜度。
文檔編號(hào)G06F13/38GK101763331SQ20101003425
公開(kāi)日2010年6月30日 申請(qǐng)日期2010年1月18日 優(yōu)先權(quán)日2010年1月18日
發(fā)明者高洪 申請(qǐng)人:中興通訊股份有限公司