專利名稱:一種內(nèi)部集成電路總線時序調(diào)節(jié)方法、相應裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子通信技術(shù)領(lǐng)域,具體涉及一種fc總線時序調(diào)節(jié)方法、相應裝置及
系統(tǒng)。
背景技術(shù):
內(nèi)部集成電路12<:總線(Inter-Integrated Circuit Bus)是由飛利浦PHILIPS公 司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。"C總線最初是為音頻和視頻 設(shè)備開發(fā)的,如今主要用于服務器管理中使用。采用"C總線可以實現(xiàn)多個設(shè)備之間的通 信,便于對設(shè)備的控制、訪問,因此,廣泛應用于電子通信技術(shù)領(lǐng)域。 12<:總線是由串行數(shù)據(jù)(SDA,Serial Data)總線和串行時鐘線(SCL, SerialData) 組成,設(shè)備之間傳輸?shù)臄?shù)據(jù)是承載在SDA上,I2C總線上傳輸?shù)牡男盘柕姆N類有三種,分別 是開始信號、結(jié)束信號和應答信號。其中,開始信號是指SCL為高電平時,SDA從高電平 跳變?yōu)榈碗娖?,此時,12C總線兩端的設(shè)備中其中一個設(shè)備向另一個設(shè)備傳輸數(shù)據(jù);結(jié)束信 號是指SCL為低電平時,SDA從低電平跳變?yōu)楦唠娖剑藭r,12(:總線兩端的設(shè)備中其中一 個設(shè)備結(jié)束向另一個設(shè)備傳輸數(shù)據(jù);應答信號是指I2C總線兩端的設(shè)備中其中一個設(shè)備接 收到8比特bit數(shù)據(jù)后,向另一個設(shè)備發(fā)出低電平脈沖,作為該設(shè)備接收到8bit數(shù)據(jù)的響 應通知給與之對應的設(shè)備。 在I2C協(xié)議中規(guī)定在SCL為高電平時,SDA有高低電平的跳變,則表示I2C總線兩 端的設(shè)備中, 一端向另一端發(fā)送讀/寫操作的開始/結(jié)束命令。在一次讀/寫操作的開始 和結(jié)束之間,SDA上的電平變化時,要求SCL上的電平為低電平,這是正確的I2C時序,如圖 l所示。否則,接收設(shè)備認為收到了錯誤的信號。通常I2C總線的時序錯誤發(fā)生在SCL的下 降沿,即SCL上的電平處于下降沿,而SDA上的電平也處于高低電平的跳變狀態(tài),此時,I2C 總線上的時序是錯誤的時序,如圖2所示。 為了減少fC總線上的時序發(fā)生錯誤,現(xiàn)有技術(shù)中的做法通常有兩種,一種是如圖 3所示,在設(shè)備A與設(shè)備B之間的I2C總線的SCL和SDA總線上,分別接有對地電容C1、C2, 通過調(diào)節(jié)SCL和SDA上接有的對地電容的容值,使得SDA的下降沿變緩和/或SCL的下降 沿變陡,增加I^時序裕度。需要說明的是時序裕度可以理解是SCL處于下降沿與SDA上的 電平開始跳變之間的時間間隔,時間間隔大,則出現(xiàn)錯誤時序的幾率小,反之,時間間隔小, 則I2C總線上的時序發(fā)生錯誤的幾率大。采用這種方法來實現(xiàn)對I2C總線的時序的調(diào)節(jié)的 缺點是調(diào)節(jié)的范圍小,通常不能達到完全避免I2C總線上的時序錯誤的目的。
另一種調(diào)節(jié)I2C總線上的時序的方法是在通信的兩個設(shè)備之間插入隔離器件,這 種隔離器件對"C總線上的時序調(diào)節(jié)的作用是相當有限的,即調(diào)節(jié)的范圍也非常小,使得調(diào) 節(jié)I2C總線上的時序錯誤效果不明顯。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種I2C總線時序調(diào)節(jié)方法、相應裝置及系統(tǒng),可以根據(jù)設(shè)計需要,選擇需要調(diào)節(jié)范圍,能夠有效的減少I2C總線上時序錯誤。 本發(fā)明實施例提供了一種內(nèi)部集成電路I2C總線時序調(diào)節(jié)方法,包括 接收串行時鐘SCL總線上的信號和串行數(shù)據(jù)SDA總線上的信號; 根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號
傳輸?shù)姆较颍?當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的 信號延遲時間T輸出; 根據(jù)所述判斷出的方向,將SCL總線上的信號輸出。
本發(fā)明實施例還提供了一種可編程邏輯裝置,包括 接收單元,用于接收串行時鐘SCL總線上的信號和串行數(shù)據(jù)SDA總線上的信號;
判斷單元,用于根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷 I2C總線上信號傳輸?shù)姆较颍?延遲單元,用于當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向, 將SDA總線上的信號延遲時間T ; 發(fā)送單元,用于根據(jù)所述判斷出的方向,將SDA總線上延遲時間T后的信號和SCL 總線上的信號輸出。 本發(fā)明實施例還提供了一種通信系統(tǒng),包括 第一設(shè)備,用于在串行時鐘SCL總線上發(fā)送信號,在串行數(shù)據(jù)SDA總線上發(fā)送信 號; 可編程邏輯裝置,用于接收所述第一設(shè)備在串行時鐘SCL總線上發(fā)送的信號,在 串行數(shù)據(jù)SDA總線上發(fā)送的信號,根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信 號,判斷I2C總線上信號傳輸?shù)姆较?,當SCL總線上的信號處于每個下降沿時,根據(jù)所述判 斷出的方向,將SDA總線上的信號延遲時間T,發(fā)送SDA總線上延遲時間T后的信號和SCL 總線上的信號給第二設(shè)備; 第二設(shè)備,用于接收所述可編程邏輯裝置發(fā)送的SDA總線上延遲時間T后的信號 和SCL總線上的信號。 本發(fā)明實施例采用可編程邏輯器件根據(jù)傳輸在其中的SCL信號和SDA信號,判斷 出信號傳輸?shù)姆较?,將SCL信號不做處理輸出,而在SCL信號處于下降沿時,延遲時間T將 SDA信號的輸出,從而保證了在SCL信號在跳變時,SDA信號上的輸出時不變的,因此,減少 了 It總線上的時序錯誤。保證了 fc總線上信號傳輸?shù)母咝А蚀_。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖僅僅是 本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還 可以根據(jù)這些附圖獲得其他的附圖。 圖1是通過I2C總線傳輸信號時正確的時序圖;
圖2是通過I2C總線傳輸信號時錯誤的時序圖;
圖3是現(xiàn)有技術(shù)中調(diào)節(jié)I2C總線上傳輸?shù)男盘枙r序的系統(tǒng)簡 圖4是本發(fā)明實施例一提供的 圖5是本發(fā)明實施例二提供的 圖6是本發(fā)明實施例三提供的 圖7是本發(fā)明實施例四提供的 圖8是本發(fā)明實施例五提供的
種I2C總線時序調(diào)節(jié)方法流程簡圖; 種I2C總線時序調(diào)節(jié)方法流程簡圖; 種可編程邏輯裝置的邏輯組成圖; 種可編程邏輯裝置的邏輯組成圖; 種通信系統(tǒng)的邏輯組成圖。
具體實施例方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。 本發(fā)明實施例提供一種I2C總線時序調(diào)節(jié)方法及可編程邏輯裝置,以下分別進行
詳細說明。 實施例一 本發(fā)明實施例提供一種I2C總線時序調(diào)節(jié)方法,為了便于理解本發(fā)明實施例提供 的方法,首先,對執(zhí)行該方法的系統(tǒng)中各設(shè)備做簡要說明,所述系統(tǒng)至少包括兩個通過I2C 總線進行通信的設(shè)備,由于i2c總線是一種串行總線,在同一時刻只有一個設(shè)備發(fā)送數(shù)據(jù)給 另一個設(shè)備,即在一個時刻SDA上傳輸?shù)臄?shù)據(jù)只有一個方向。為了能夠保證I2C總線上的 時序正確,在本發(fā)明實施例中在"C總線上增加一個可編程邏輯器件,該可編程邏輯器件控 制SDA輸出時序,達到減少l2C總線上時序錯誤的目的。為了便于以下文字的說明,將采用 I2C總線進行通信的至少兩個設(shè)備分別稱為A設(shè)備和B設(shè)備。 下面對該可編程邏輯器件執(zhí)行一種It總線時序調(diào)節(jié)方法做說明,參加圖4所示, 該方法包括 步驟1 :接收I2C總線上的信號,即接收SCL總線上的信號和SDA總線上的信號;
步驟2 :根據(jù)接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信 號傳輸?shù)姆较颍?其中,步驟2中判斷出fC總線上信號傳輸?shù)姆较蚓唧w可以是根據(jù)fC協(xié)議,分析 接收到的SCL總線上的信號和SDA總線上的信號,獲取I2C總線上信號傳輸?shù)姆较颉?
步驟3 :當SCL信號的每個下降沿時,根據(jù)判斷出的信號傳輸?shù)姆较?,將SDA上傳 輸?shù)男盘栄舆t時間T輸出; 其中,延遲時間T遠遠小于I2C總線周期,通常是幾十納秒(ns),設(shè)計者可以選擇 具體的T的大小。 步驟4 :將SCL總線上的信號輸出。 通過步驟1至步驟4的說明,該方法中可編程邏輯器件通過傳輸在其中的SCL信 號和SDA信號,判斷出信號傳輸?shù)姆较?,將SCL信號不做處理輸出,而在SCL信號處于下降 沿時,延遲時間T將SDA信號的輸出,從而保證了在SCL信號在跳變時,SDA信號上的輸出 是不變的,因此,減少了 I2C總線上的時序錯誤,保證了 I2C總線上信號傳輸?shù)母咝?、準確。
實施例二 本發(fā)明實施例提供一種I2C總線時序調(diào)節(jié)方法,包括
7
步驟A1 :接收SCL總線上的信號和SDA總線上的信號、輸出SCL信號; 其中,需要說明的是,執(zhí)行步驟A1的裝置可以是一個可編程邏輯器件,該可編程
邏輯器件此時相當于傳輸線,且不知道SDA和SCL上傳輸信號的方向。該邏輯器件對于SCL
總線上傳輸?shù)男盘栂喈斢谕?,除了檢測SCL上的信號,對SCL上的信號可以不做任何處理
直接輸出。 步驟A2 :判斷是否接收到12C開始信號,如果是,進入步驟A3 ; 其中,步驟A2中該邏輯器件的一個I2C總線接口與一個設(shè)備的I2C總線接口相連,
邏輯器件中的另一個I2C總線接口與另一個設(shè)備的I2C總線接口相連,即該可編程邏輯器件
位于兩個通過I2C總線通信的設(shè)備之間,用于調(diào)整I2C總線時序。該可編程邏輯器件分別
判斷兩個I2C總線接口上的SDA和SCL上傳輸?shù)碾娦盘柕年P(guān)系,判斷是否接收到開始信號,
即SCL為高電平,SDA由高電平向低電平跳變,此時表示一個設(shè)備向另一個設(shè)備開始傳輸數(shù)據(jù)。 還需要說明的是,步驟A2中邏輯器件執(zhí)行判斷是否接收到I2C開始信號的具體方 法是判斷在SDA為下降沿時,SCL上的電平是否為高電平,如果是,則判斷出該I2C總線接 口接收到I2C開始信號。 步驟A3 :根據(jù)接收到的I2C開始信號,獲取SCL和SDA上傳輸?shù)男盘柗较?,即信?是從接收到I2C開始信號的I2C總線接口輸入該邏輯器件,從另一個I2C總線接口輸出該邏 輯器件; 為了便于以后的說明,此處將輸出信號的設(shè)備稱為主機,將接收信號的設(shè)備稱為 從機。即此時SCL和SDA上傳輸?shù)男盘柕姆较蚴菑闹鳈C到從機。 步驟A4 :收到I2C開始信號之后,記錄SCL總線上的時鐘數(shù)目,具體可以是記錄的 上升沿數(shù)目和下降沿數(shù)目; 步驟A5 :SCL總線上前8個下降沿時,將SDA總線上從主機到從機的方向上接收到 的數(shù)據(jù)延遲時間T后輸出給從機; 事實上,也可以對SCL總線上的每個時鐘信號延遲時間T'后輸出,通常延遲時間 T'小于該裝置對SDA總線上的信號延遲的時間T,才可以達到較好的時序輸出。例如T'為 30ns, T為50ns,而T'和T都遠遠小于SCL上的時鐘周期。 其中,還需要說明的是,步驟A5中延遲的時間T、 T'通常是預先配置的,可以是對 該邏輯器件輸入預先寫好的代碼,該代碼中規(guī)定對數(shù)據(jù)的延遲時間為T、T', T和T'的單位
通常是納秒數(shù)量級。 步驟A6 :判斷SCL的上升沿數(shù)目是否為8,如果是,進入步驟A7,如果否,進入步驟 A4 ; 步驟A7 :獲取SCL在第8個上升沿時,SDA上的信號值; 其中,步驟A7中SDA上的信號為高或者地電平,通常高電平代表讀操作,低電平代 表寫操作。還需要說明的是,在I2C總線上信號是以字節(jié)的形式傳輸?shù)?,即SCL上的8個時 鐘周期可以傳輸一個字節(jié),通常傳輸?shù)牡谝粋€字節(jié)的前七位傳輸?shù)氖菑臋C的地址,兩個通 過lt總線進行傳輸信號的設(shè)備之間每次傳輸?shù)淖止?jié)數(shù)量是不受限制的,但是,每個字節(jié)后 都需要有一個響應信號ACK,主機根據(jù)接收到的ACK信號執(zhí)行相應的操作。還需要理解的 是,主機在發(fā)送完每個字節(jié)后,釋放SDA總線,從機發(fā)送ACK信號占用SDA總線。通常,從機
8發(fā)送ACK信號為低電平信號給主機,作為主機可以發(fā)送下一個字節(jié)的通知。 步驟A8 :根據(jù)SCL在第8個上升沿時SDA總線上的信號,獲取下一字節(jié)的傳輸方
向; 通常,步驟A8中獲取的傳輸方向包括如果步驟A7中獲取到的SDA為高電平,則 可編程邏輯器件判斷出該字節(jié)是主機要求對從機進行讀操作,則判斷SDA總線上下一個字 節(jié)的傳輸方向是由從機到主機;如果步驟A7中獲取的SDA為低電平,則可編程邏輯器件判 斷出該字節(jié)是主機要求對從機進行寫操作,則判斷SDA總線上下一個字節(jié)的傳輸方向是由 主機到從機。 還需要理解的是,在I2C總線上傳輸?shù)男盘?,在一次開始信號和一次結(jié)束信號之 間,SCL總線的傳輸方向是不變的,一直為根據(jù)開始信號而判斷出的方向,例如本實施例中, SCL的方向一直為主機到從機的方向,直到收到結(jié)束信號后,該可編程邏輯器件再重新判斷 SCL的方向。 步驟A9 :將SCL總線上第9個下降沿時,SDA總線上從從機到主機的方向上,接收 到的數(shù)據(jù)延遲時間T輸出給主機; 通過以上步驟A1至步驟A9的說明,該方法中可編程邏輯器件根據(jù)接收到的SDA 上信號和SCL上的信號,判斷出信號傳輸?shù)姆较颍瑢DA信號的跳變時間延遲到SCL的下降 沿之后,減少I2C總線上時序錯誤,可以實現(xiàn)主機給從機發(fā)送讀或?qū)懖僮髅顣r,接收端的 從機可以接收到正確的命令。
該方法還可以包括 步驟A10 :將記錄的SCL的時鐘數(shù)目清零,從1開始再記錄; 步驟All :根據(jù)步驟A8中獲取的下一個字節(jié)的傳輸方向,將重新記錄的SCL總線 上前8個下降沿時,SDA總線上接收到的數(shù)據(jù)延遲時間T后輸出; 步驟A12 :在重新記錄的SCL總線上第9個下降沿時,將SDA總線上傳輸方向與步 驟A8中獲取的傳輸方向相反的方向上的信號,延遲時間T輸出; 其中,需要說明的是,在步驟A11之后,即可編程邏輯器件根據(jù)判斷的下一個字節(jié) 的傳輸方向,將8個字節(jié)的數(shù)據(jù)傳輸完畢后,在第9個時鐘時,接收到字節(jié)的一端設(shè)備應該 發(fā)送ACK信號,因此,在第8個時鐘下降沿到第9個時鐘下降沿的這段時間,SDA總線上數(shù) 據(jù)的傳輸方向是與前8個時鐘的傳輸方向相反的。因此,在步驟A12中,在第9個時鐘下降 沿時,根據(jù)以上說明中的方向,獲取的SDA上的信號,將該信號延遲時間T后按照該方向輸 出。 步驟A13 :獲取重新記錄的SCL總線上第9個上升沿時,SDA的總線上傳輸方向與 步驟A8中獲取的傳輸方向相反的方向上的信號的值; 其中,步驟A12和步驟A13中,SCL總線上第9個時鐘周期時(第9個時鐘周期包 括第9個上升沿和第9個下降沿時刻)SDA上傳輸?shù)男盘枮锳CK信號,該ACK信號的傳輸方 向與步驟A8中判斷出的字節(jié)的傳輸方向相反。 步驟A14 :根據(jù)步驟A13中獲取SDA總線上信號的值,判斷是否繼續(xù)傳輸字節(jié),如 果是,進入步驟A10,如果否,進入步驟A15 ; 其中,需要說明的是,以上步驟A10至步驟A14是實現(xiàn)了主機與從機直接傳輸?shù)诙?個字節(jié)的數(shù)據(jù),由于在主機和從機之間,在一次開始信號和一次結(jié)束信號之間可以傳輸多個字節(jié),字節(jié)的數(shù)目不受限制。但是,由于12C協(xié)議規(guī)定,每次傳輸一個字節(jié)后,接收端要發(fā) 送ACK響應給發(fā)送字節(jié)的一端。因此,對于傳輸多個字節(jié)的情況,需要執(zhí)行步驟A10至步驟 A14的循環(huán)操作。 還需要理解的是,步驟A14中判斷是否繼續(xù)傳輸字節(jié)具體可以是根據(jù)步驟A13中 獲取SDA總線上信號的值,判斷是否繼續(xù)傳輸字節(jié),通常,ACK信號為低電平時,認為主機可 以繼續(xù)傳輸信號,即如果信號值為0,則進入步驟A10,如果信號值為1,則進入步驟A15。
步驟A15 :判斷是否接收到It結(jié)束信號,如果是,則可以認為該方法結(jié)束。
其中,步驟A15中判斷是否接收到It結(jié)束信號具體可以是判斷該可編程邏輯器 件在設(shè)置的時間內(nèi)是否接收到"C結(jié)束信號,如果是,直接結(jié)束操作,如果沒有在設(shè)置的時 間內(nèi)接收到i2c結(jié)束信號,則在超過設(shè)置的時間后也結(jié)束流程。 需要說明的是,在步驟A1至步驟A15中,可編程邏輯器件不對SCL總線上傳輸?shù)?信號做任何處理,即從該器件的一個端口接收到SCL總線上的信號,又從該器件的另一個 端口將該SCL總線上的信號傳輸出去,在一次I2C開始信號和一次I2C結(jié)束信號之間,SCL總 線上傳輸?shù)男盘柕姆较蚴遣蛔兊?。該可編程邏輯器件對SCL總線上的信號主要是做檢測, 根據(jù)SCL總線上的時鐘信號,作為判斷SDA總線上信號傳輸方向的判斷依據(jù),根據(jù)判斷出的 SDA總線上信號傳輸方向,對SDA總線上的信號做延遲,從而更智能,更高效的保證I2C總線 上的時序的正確性。 通過以上步驟A1至步驟A15的說明,可以得出該可編程邏輯器件根據(jù)接收到的 SCL和SDA總線上的信號,判斷出SCL和SDA總線上信號的傳輸方向,根據(jù)判斷出的SCL和 SDA總線上信號的傳輸方向,將SCL在下降沿時,SDA總線上傳輸?shù)男盘栄舆t時間T,從而達 到減少"C總線時序錯誤的目的。該可編程邏輯器件可以容易的到達設(shè)計要求所要延遲的 時間T。通常延遲的時間是納秒ns級。還需要說明的是,通常I2C總線的頻率是400KHz, 周期為2. 5us,而對可編程邏輯電路的要求是對SDA總線上的數(shù)據(jù)延遲時間為幾十納秒。
采用該方法的另一個優(yōu)點是,可編程邏輯器件對時序的調(diào)節(jié)靈活,只需要改變邏 輯代碼就可以調(diào)節(jié)延遲時間,且調(diào)節(jié)的范圍比較大,不用修改硬件。
實施例三 本發(fā)明實施例提供一種可編程邏輯裝置,參見圖6所示,該可編程邏輯裝置包括 接收單元11、判斷單元21、延遲單元31和發(fā)送單元41。 其中,接收單元11用于接收I2C總線上的信號,即接收SCL信號和SDA信號;
判斷單元21,用于根據(jù)接收到的SCL信號和SDA信號,判斷fC總線上信號傳輸?shù)?方向; 延遲單元31,用于當SCL信號處于每個下降沿時,根據(jù)判斷出的方向,將SDA上傳 輸?shù)男盘栄舆tT; 發(fā)送單元41,用于將SCL上的信號不做處理輸出,和將延遲時間T后的SDA總線上 的信號輸出。 通過以上對本發(fā)明實施例提供的一種可編程邏輯裝置的說明,該裝置通過傳輸在 其中的SCL信號和SDA信號,判斷出信號傳輸?shù)姆较颍瑢CL信號不做處理輸出,而在SCL 信號處于下降沿時,延遲時間T將SDA信號的輸出,從而保證了在SCL信號在跳變時,SDA信 號上的輸出時不變的,因此,減少了 It總線上的時序錯誤。保證了 It總線上信號傳輸?shù)?br>
10高效、準確。
實施例四 本發(fā)明實施例提供一種可編程邏輯裝置,該可編程邏輯裝置也包括接收單元 11、判斷單元21、延遲單元31和發(fā)送單元41。本發(fā)明實施例提供的一種可編程邏輯裝置與 實施三提供的裝置相似,但是,本發(fā)明實施例提供的可編程邏輯裝置的各邏輯單元還可以 包括多個功能單元,下面結(jié)合附圖7做詳細的說明。 其中,判斷單元21包括第一判斷單元201、第一獲取單元202、記錄時鐘單元 203 ;延遲單元31包括第一延遲單元301。需要說明的是,接收單元ll接收到SCL總線上 的信號和SDA總線上的信號。 第一判斷單元201判斷是否接收到I2C開始信號,如果是,通知第一獲取單元202 ;
第一獲取單元202根據(jù)接收到的I2C開始信號,獲取SCL和SDA上傳輸?shù)男盘柕?方向,即信號是從接收到i2c開始信號的I2C總線接口輸入該邏輯器件,從另一個I2C總線 接口輸出該邏輯器件; 記錄時鐘單元203收到I2C開始信號之后,記錄SCL的時鐘數(shù)目,具體可以是記錄 的上升沿數(shù)目和下降沿數(shù)目; 第一延遲單元301根據(jù)獲取SCL和SDA上傳輸?shù)男盘柕姆较颍瑢CL總線前8個 下降沿時,SDA總線上的信號延遲時間T ; 發(fā)送單元40根據(jù)獲取SCL和SDA上傳輸?shù)男盘柕姆较颍瑢⒀舆t后的SDA上的信號 輸出,將SCL上的信號輸出。 通過以上對該可編程邏輯器件的說明,該邏輯器件第一獲取單元202根據(jù)接收到 的I2C開始信號,獲取SCL和SDA上傳輸?shù)男盘柕姆较蚝?,將SDA上自I2C開始信號之后,第 一字節(jié)上的每個比特信號延遲時間T輸出,從而減少傳輸?shù)谝蛔止?jié)時發(fā)生I2C時序錯誤。
通常在I2C開始信號之后,SDA上傳輸?shù)牡谝蛔止?jié)是控制字節(jié),該控制字節(jié)通常包 括地址碼和控制量,即第一字節(jié)的高7位為地址碼,最低位為控制量(控制量通常包括讀或 者寫操作)。因此,該可編程邏輯裝置還應該實現(xiàn)減少除第一個字節(jié)外,其他字節(jié)傳輸時i2c 總線上的時序的錯誤的功能。參見如下詳細說明。 該可編程邏輯裝置中的延遲單元31還包括第二延遲單元302,用于根據(jù)第一獲取 單元202中獲取的SCL和SDA上傳輸?shù)男盘柕姆较?,將SCL總線上第9個下降沿時,SDA總 線上傳輸?shù)男盘栄舆t時間T輸出,該信號的方向與第一獲取單元202中獲取的SCL和SDA上 傳輸?shù)男盘柕姆较蛳喾础F渲?,需要說明的是,前8個時鐘與第9個時鐘中,傳輸在SDA總 線上的信號的方向相反。第9個時鐘,即從第8個時鐘的下降沿到第9個時鐘的下降沿的 時間中,SDA總線上傳輸?shù)男盘枮锳CK信號,ACK信號的方向與前8個時鐘傳輸?shù)淖止?jié)的方 向是相反的。因此,第二延遲單元302中,延遲的信號是根據(jù)已經(jīng)判斷出的傳輸方向的基礎(chǔ) 上,獲取SDA總線上的信號,再根據(jù)已經(jīng)判斷出的方向?qū)⑿盘栄舆t時間T輸出。
其中,需要說明的是,該第9個SCL時鐘時,SDA上傳輸?shù)氖墙邮昭b置接收到該字 節(jié)后的響應信號ACK,因此,方向是與第一獲取單元202中獲取的SCL和SDA上傳輸?shù)男盘?的方向相反。 該可編程邏輯裝置中的判斷單元21還可以包括第二判斷單元204、第二獲取單 元205、第三獲取單元206、清零單元207。
11
其中,第二判斷單元204,判斷SCL的上升沿數(shù)目是否為8、如果是,通知第二獲取 單元205, 第二獲取單元205獲取SCL在第8個上升沿時,SDA上的信號值;第三獲取單元 206,用于根據(jù)第二獲取單元205獲取的SDA上的信號值,獲取下一個字節(jié)的傳輸方向,SDA 上傳輸?shù)牡谝粋€字節(jié)的第8位上的值為1或0,代表不同的操作,可以將1代表讀,0代表寫, 因此可以獲知SDA總線上下一個字節(jié)的傳輸方向; 第三獲取單元206將獲取的下一個字節(jié)的傳輸方向發(fā)送給第一延遲單元301 ;當 記錄時鐘單元203中記錄的SCL時鐘數(shù)目為9后,清零單元207將記錄時鐘單元203清零, 從1再開始記錄SCL時鐘數(shù)目,即清零單元207在裝置接收到I2C開始信號之后,每次SCL 上的時鐘數(shù)目到達9后就清零,重新記錄。 第一延遲單元301還用于根據(jù)第三獲取單元206將獲取的下一個字節(jié)的傳輸方 向,將清零后的前8個SCL總線上的下降沿時,SDA上的數(shù)據(jù)延遲時間T,發(fā)送單元40將延 遲后的數(shù)據(jù)輸出。第二延遲單元302還用于在清零后第9個下降沿時,將SDA上的數(shù)據(jù)延 遲時間T,需要說明的是延遲的信號的方向是與前8個時鐘時,SDA上傳輸信號的方向相反。
通過以上說明,該可編程邏輯裝置可以實現(xiàn)保證I2C開始信號之后I2C總線上傳輸 時序的正確性。 還需要說明的是,該判斷單元21還可以包括第三判斷單元208和第四判斷單元 209。其中,第三判斷單元208用于根據(jù)接收到的SCL總線上第9個上升沿時,SDA的總線上 于前8個時鐘上傳輸方向相反的方向上的信號的值,判斷是否繼續(xù)傳輸字節(jié),如果是,通知 清零單元207,如果否,通知第四判斷單元209,第四判斷單元209用于判斷是否接收到I2C 結(jié)束信號。 其中,第三判斷單元208中可以具體判斷接收到的SCL總線上第9個上升沿時, SDA的總線上于前8個時鐘上傳輸方向相反的方向上的信號的值是1,還是0,如果是1則 通知第四判斷單元209,如果為0則為繼續(xù)傳輸字節(jié);第四判斷單元209具體執(zhí)行判斷可以 是判斷在預置的時間內(nèi)是否接收到"C結(jié)束信號,如果是,接收操作;如果在預置的時間 內(nèi)沒有接收到i2c結(jié)束信號,也結(jié)束操作。 需要理解的是,以上的說明全部是針對只調(diào)節(jié)SDA總線上的時序的做法,事實上, SCL總線上傳輸?shù)臅r鐘信號的時序也是可以調(diào)節(jié)的。則該可編程邏輯器件還可以包括第三 延遲單元,用于根據(jù)第一獲取單元202獲取SCL上傳輸?shù)男盘柕姆较颍瑢r鐘信號延遲時間 T',第一發(fā)送單元41將延遲后的時鐘信號輸出。通常延遲時間T'要小于時間T才可以達 到較好的時序輸出。 通過以上對本發(fā)明實施例提供的一種可編程邏輯裝置的說明,該可編程邏輯裝置 根據(jù)接收到的SCL和SDA總線上的信號,判斷出SCL和SDA總線上信號的傳輸方向,根據(jù)判 斷出的SCL和SDA總線上信號的傳輸方向,將SCL在下降沿時,SDA總線上傳輸?shù)男盘栄舆t 時間T,從而達到減少"C總線實現(xiàn)錯誤的目的。該可編程邏輯裝置可以容易的到達設(shè)計要 求所要延遲的時間T,且T的取值調(diào)節(jié)靈活,只需要改變邏輯代碼就可以調(diào)節(jié)延遲時間,且 調(diào)節(jié)的范圍比較大,不用修改硬件。 最后,需要說明的是,本發(fā)明實施例提供的一種可編程邏輯裝置可以是一個復雜 可編程邏輯器件(CPLD, Complex Programmable Logic Device)、或者可拭除式可編程邏輯器件(EPLD, Erasable Programmable Logic Device)等,與I2C總線相連的引腳可以是 CPLD或者EPLD上任意四個引腳。 [ono] 實施例五 本發(fā)明實施例提供了一種通信系統(tǒng),參見圖8所示,該通信系統(tǒng)包括第一設(shè)備 81、第二設(shè)置85和可編程邏輯裝置83。 其中,第一設(shè)備81,用于在串行時鐘SCL總線上發(fā)送信號給可編程邏輯裝置83,和 在串行數(shù)據(jù)SDA總線上發(fā)送信號給可編程邏輯裝置83 ; 可編程邏輯裝置83,用于接收所述第一設(shè)備81在串行時鐘SCL總線上發(fā)送的信 號,在串行數(shù)據(jù)SDA總線上發(fā)送的信號,根據(jù)所述接收到的SCL總線上的信號和SDA總線上 的信號,判斷I2C總線上信號傳輸?shù)姆较?,當SCL總線上的信號處于每個下降沿時,根據(jù)所 述判斷出的方向,將SDA總線上的信號延遲時間T,發(fā)送SDA總線上延遲時間T后的信號和 SCL總線上的信號給第二設(shè)備85 ; 第二設(shè)備85,用于接收所述可編程邏輯裝置83發(fā)送的SDA總線上延遲時間T后的 信號和SCL總線上的信號。 該通信系統(tǒng)中的可編程邏輯裝置83還可以用于根據(jù)判斷出的方向,將SCL總線上 的信號延遲時間T'發(fā)送給第二設(shè)備85,時間T'小于所述時間T。 為了更清楚的理解該通信系統(tǒng),還需要說明的是,第一設(shè)備81和第二設(shè)備85是通 過I2C總線進行通信的,而可編程邏輯裝置83在I2C總線上,用于調(diào)節(jié)I2C總線上的時序, 保證第一設(shè)備81和第二設(shè)備85之間傳輸?shù)男盘枩蚀_。因此,第一設(shè)備81用于通過可編程 邏輯裝置83與第二設(shè)備85進行通信。 還需要說明的是,本實施例中的可編程邏輯裝置85可以是實施例三或四中提供 的可編程邏輯裝置。具體說明可以參考實施例三、四的說明。 該通信系統(tǒng)中第一設(shè)備和第二設(shè)備之間傳輸?shù)腎2C總線信號通過可編程邏輯裝置 來調(diào)節(jié)fC總線時序,減少了 fC總線上的時序錯誤。保證了 fc總線上信號傳輸?shù)母咝А?準確。 本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可 以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲 介質(zhì)可以包括R0M、RAM、磁盤或光盤等。 以上對本發(fā)明實施例所提供的一種I2C總線時序調(diào)節(jié)方法、相應裝置及系統(tǒng)進行 了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例 的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員, 依據(jù)本發(fā)明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi) 容不應理解為對本發(fā)明的限制。
權(quán)利要求
一種內(nèi)部集成電路I2C總線時序調(diào)節(jié)方法,其特征在于,包括接收串行時鐘SCL總線上的信號和串行數(shù)據(jù)SDA總線上的信號;根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號傳輸?shù)姆较?;當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的信號延遲時間T輸出;根據(jù)所述判斷出的方向,將SCL總線上的信號輸出。
2. 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號傳輸?shù)姆较颍ㄅ袛嗍欠窠邮盏絀2C開始信號,如果是,根據(jù)接收到的I2C開始信號,獲取SCL和SDA總線上傳輸?shù)男盘柕姆较颉?br>
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的信號延遲時間T輸出,包括記錄SCL總線上的時鐘數(shù)目;在SCL總線上前8個下降沿時,根據(jù)所述獲取的SDA總線上傳輸?shù)男盘柕姆较?,將SDA總線上的信號延遲時間T輸出。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述方法還包括在SCL總線上第9個下降沿時,將SDA總線上的信號延遲時間T后,按照與前8下降沿傳輸?shù)男盘栂喾吹膫鬏敺较蜉敵觥?br>
5. 根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述方法還包括根據(jù)第8個上升沿時接收到的SDA總線上的信號值,獲取下一字節(jié)的傳輸方向,所述前8個時鐘周期中SDA傳輸了一個字節(jié);當記錄的SCL總線上的時鐘數(shù)目為9時,將所述記錄的SCL總線上的時鐘數(shù)目清零;再次記錄SCL總線上的時鐘數(shù)目;在所述再次記錄SCL總線上的時鐘數(shù)目的前8個下降沿時,根據(jù)所述獲取下一字節(jié)的傳輸方向,將SDA總線上的信號延遲時間T輸出。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法還包括在所述再次記錄SCL總線上的時鐘數(shù)目的第9個下降沿時,將SDA總線上的信號延遲時間T后,按照與前8個時鐘周期傳輸?shù)男盘栂喾吹膫鬏敺较蜉敵觥?br>
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述判斷出的方向,將SCL總線上的信號輸出,包括根據(jù)所述判斷出的方向,將SCL總線上的信號延遲時間T'輸出,所述時間T'小于所述時間T。
8. —種可編程邏輯裝置,其特征在于,包括接收單元,用于接收串行時鐘SCL總線上的信號和串行數(shù)據(jù)SDA總線上的信號;判斷單元,用于根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號傳輸?shù)姆较颍谎舆t單元,用于當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的信號延遲時間T ;發(fā)送單元,用于根據(jù)所述判斷出的方向,將SDA總線上延遲時間T后的信號和SCL總線上的信號輸出。
9. 根據(jù)權(quán)利要8所述的裝置,其特征在于,所述判斷單元包括第一判斷單元,用于判斷是否接收到I2C開始信號,如果是,通知第一獲取單元;第一獲取單元,用于根據(jù)接收到的I2C開始信號,獲取SCL和SDA總線上傳輸?shù)男盘柕姆较颍挥涗洉r鐘單元,用于記錄SCL總線上的時鐘數(shù)目,所述延遲單元根據(jù)所述記錄的時鐘數(shù)目,根據(jù)所述第一獲取單元獲取的SDA總線上傳輸?shù)男盘柕姆较颍瑢DA總線上的信號延遲時間T。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述延遲單元包括第一延遲單元,用于根據(jù)所述記錄時鐘單元記錄的時鐘數(shù)目,在SCL總線上前8個下降沿時,根據(jù)所述獲取的SDA總線上傳輸?shù)男盘柕姆较颍瑢DA總線上的信號延遲時間T輸出。
11. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述延遲單元還包括第二延遲單元,用于在SCL總線上第9個下降沿時,將SDA總線上的信號延遲時間T輸出,所述信號的傳輸方向與與前8下降沿傳輸?shù)男盘杺鬏敺较蛳喾础?br>
12. 根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述判斷單元還包括清零單元,用于當記錄的SCL總線上的時鐘數(shù)目為9時,將所述記錄的SCL總線上的時鐘數(shù)目清零;所述記錄時鐘單元在所述清零單元將記錄的SCL總線上的時鐘數(shù)目清零后,再次記錄SCL總線上的時鐘數(shù)目。
13. 根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述判斷單元還包括第二判斷單元,用于根據(jù)所述記錄時鐘單元記錄的時鐘數(shù)目判斷SCL的上升沿是否為第8個上升沿;第二獲取單元,用于當?shù)诙袛鄦卧袛酁槭堑慕Y(jié)果時,獲取SDA上傳輸?shù)男盘柕闹?;第三獲取單元,用于根據(jù)所述第8個上升沿時,獲取到的SDA總線上的信號值,獲取下一字節(jié)的傳輸方向,所述前8個時鐘周期中SDA傳輸了一個字節(jié);所述第一延遲單元,還用于在所述再次記錄SCL總線上的時鐘數(shù)目的前8個下降沿時,根據(jù)所述獲取下一字節(jié)的傳輸方向,將SDA總線上的信號延遲時間T輸出。
14. 根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第二延遲單元,還用于在所述再次記錄SCL總線上的時鐘數(shù)目的第9個下降沿時,將SDA總線上的信號延遲時間T輸出,所述SDA總線上的信號的傳輸方向與前8個時鐘周期時信號的傳輸方向相反。
15. —種通信系統(tǒng),其特征在于,包括第一設(shè)備,用于在串行時鐘SCL總線上發(fā)送信號,在串行數(shù)據(jù)SDA總線上發(fā)送信號;可編程邏輯裝置,用于接收所述第一設(shè)備在串行時鐘SCL總線上發(fā)送的信號,在串行數(shù)據(jù)SDA總線上發(fā)送的信號,根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號傳輸?shù)姆较?,當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的信號延遲時間T,發(fā)送SDA總線上延遲時間T后的信號和SCL總線上的信號給第二設(shè)備;第二設(shè)備,用于接收所述可編程邏輯裝置發(fā)送的SDA總線上延遲時間T后的信號和SCL 總線上的信號。
16.根據(jù)權(quán)利要求15所述的通信系統(tǒng),其特征在于,所述可編程邏輯裝置還用于根據(jù) 所述判斷出的方向,將SCL總線上的信號延遲時間T'發(fā)送給第二設(shè)備,所述時間T'小于所 述時間T。
全文摘要
本發(fā)明實施例公開了一種I2C總線時序調(diào)節(jié)方法,該方法包括接收串行時鐘SCL總線上的信號和串行數(shù)據(jù)SDA總線上的信號;根據(jù)所述接收到的SCL總線上的信號和SDA總線上的信號,判斷I2C總線上信號傳輸?shù)姆较?;當SCL總線上的信號處于每個下降沿時,根據(jù)所述判斷出的方向,將SDA總線上的信號延遲時間T輸出;根據(jù)所述判斷出的方向,將SCL總線上的信號輸出。本發(fā)明實施例還提供相應的裝置和系統(tǒng)。本發(fā)明技術(shù)方案根據(jù)傳輸在I2C總線上的信號,判斷出信號傳輸?shù)姆较?,在SCL信號處于下降沿時,延遲時間T將SDA信號的輸出,保證在SCL總線上的信號在跳變時,SDA總線上的輸出不變,減少了I2C總線上的時序錯誤。
文檔編號G06F13/42GK101770443SQ200910000390
公開日2010年7月7日 申請日期2009年1月7日 優(yōu)先權(quán)日2009年1月7日
發(fā)明者唐烽杰, 張洪崠 申請人:成都市華為賽門鐵克科技有限公司