專利名稱:一種i2c總線的通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式通信技術(shù)領(lǐng)域,尤其是一種I2C總線的“讀”通信方法。
背景技術(shù):
I2C (Inter-Integrated Circuit)總線是一種由PHLIPS公司開發(fā)的兩線式總線, 用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于80年代,最初為音頻和視頻設(shè)備開發(fā), 如今主要在服務(wù)器管理中使用,其中包括單個組件狀態(tài)的通信。它的主要優(yōu)點是其簡單性 和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空 間和芯片管腳的數(shù)量,降低了互聯(lián)成本。他的另一個優(yōu)點是,它支持多主控,其中任何能夠 進行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。如 今,I2C通訊方式在嵌入式系統(tǒng)技術(shù)領(lǐng)域應(yīng)用越來越多,越來越廣。I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU 與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。圖1是現(xiàn)有技術(shù)中按 I2C通訊操作的時序示意圖。通信時序有如下幾個步驟
1、主機向所要訪問的設(shè)備發(fā)送一個起始信號,標(biāo)志著I2C通信開始,同時主機把設(shè)備 地址和“寫”操作命令發(fā)出,若操作成功,設(shè)備會發(fā)送一個應(yīng)答信號。2、在隨機“寫”操作的時候,一般發(fā)送的第一個數(shù)據(jù)作為偏移地址。在偏移地址發(fā) 送成功后,設(shè)備會送發(fā)一個應(yīng)答信號。同時產(chǎn)生一個中斷,中斷處理程序把剛得到的偏移地 址保存起來。3、主機向所要訪問的設(shè)備再次發(fā)送一個起始信號,同時主機把設(shè)備地址和“讀”操 作命令發(fā)出,此時設(shè)備產(chǎn)生一個中斷,中斷處理程序把剛剛保存起來的偏移地址尋址,把需 要發(fā)送的數(shù)據(jù)得到。操作成功后,發(fā)送一個應(yīng)答信號,標(biāo)志著準(zhǔn)備發(fā)送數(shù)據(jù)給上位機。4、在設(shè)備發(fā)送一個應(yīng)答信號之后,產(chǎn)生一個中斷信號,把剛剛準(zhǔn)備好發(fā)送數(shù)據(jù)發(fā) 送出去o5、結(jié)束I2C通訊之前,主機想所要訪問的設(shè)備發(fā)送一個非答應(yīng)信號和一個停止信 號,同時產(chǎn)生一個中斷,相應(yīng)的中斷處理相應(yīng)的結(jié)束操作。在“讀”操作時,一般速率最高為100kbps。因為在發(fā)送數(shù)據(jù)前要先去尋址把相應(yīng) 的數(shù)據(jù)得到,在這之前只有一個應(yīng)答信號時間,而尋址操作的時間花費特別長,如果要把速 率再提高,就會出現(xiàn)I2C操作死機的現(xiàn)象。針對這一問題,提出了本發(fā)明采用的方法。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種I2C總線的通信方法,運用的尋址操作是在產(chǎn)生的中斷 處理程序中得到偏移地址后立即執(zhí)行的,從而為發(fā)送數(shù)據(jù)準(zhǔn)備節(jié)約了時間,達到提速的目 的。本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的 一種I2C總線的通信方法,其方法包括主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“寫”操作指令步驟,若操作成功,設(shè)備會產(chǎn)生 一個應(yīng)答信號;
主機向所要訪問的設(shè)備下發(fā)訪問數(shù)據(jù)偏移地址的步驟,設(shè)備接收到數(shù)據(jù)產(chǎn)生一個應(yīng)答
信號;
設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并保存偏移地址,并根據(jù)偏移地址的尋址到相應(yīng)數(shù)據(jù)的步 驟,尋址得到的數(shù)據(jù)為根據(jù)當(dāng)前偏移地址尋址得到的一個數(shù)據(jù),或者是根據(jù)當(dāng)前偏移地址 和下一個偏移地址尋址得到的兩個數(shù)據(jù);
主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“讀”操作指令的步驟,若操作成功,設(shè)備會產(chǎn) 生一個應(yīng)答信號;
設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并下發(fā)數(shù)據(jù)后再尋址得到下發(fā)的下一個數(shù)據(jù)的步驟。主機向所要訪問的設(shè)備發(fā)送“停止”信號的步驟。采用本發(fā)明的技術(shù)方案,可以達到的有益效果本發(fā)明所運用的尋址操作是在產(chǎn) 生的中斷處理程序中得到偏移地址后立即執(zhí)行的,從而為發(fā)送數(shù)據(jù)準(zhǔn)備節(jié)約了時間,達到 提速的目的。本發(fā)明實現(xiàn)簡單、可靠,特別適用于處理器性能不高,存儲器資源緊張的嵌入 式系統(tǒng)領(lǐng)域。
本發(fā)明將通過例子并參照附圖的方式說明,其中 圖1現(xiàn)有技術(shù)的I2C總線通信流程圖。圖2是本發(fā)明的I2C總線通信流程圖。
具體實施例方式本說明書中公開的所有特征,或公開的所有方法或過程中的步驟,除了互相排斥 的特征和/或步驟以外,均可以以任何方式組合。本說明書(包括任何附加權(quán)利要求、摘要和附圖)中公開的任一特征,除非特別敘 述,均可被其他等效或具有類似目的的替代特征加以替換。即,除非特別敘述,每個特征只 是一系列等效或類似特征中的一個例子而已。本發(fā)明采用的技術(shù)思路是尋址操作是在得到偏移地址后立即執(zhí)行的,而不是在 “讀”命令操作之后,是在產(chǎn)生的中斷處理程序中執(zhí)行的,從而為發(fā)送數(shù)據(jù)準(zhǔn)備節(jié)約了時間, 達到提速的目的。如圖2所示,是本發(fā)明I2C總線通信的流程圖,一種I2C總線的通信方法,適用于 所有I2C通訊的設(shè)備,其通信方法包括
主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“寫”操作指令步驟,若操作成功,設(shè)備會產(chǎn)生 一個應(yīng)答信號;
主機向所要訪問的設(shè)備下發(fā)訪問數(shù)據(jù)偏移地址的步驟,設(shè)備接收到數(shù)據(jù)產(chǎn)生一個應(yīng)答
信號;
設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并保存偏移地址,并根據(jù)偏移地址的尋址到相應(yīng)數(shù)據(jù)的步 驟,所述尋址得到的數(shù)據(jù)為根據(jù)當(dāng)前偏移地址尋址得到的一個數(shù)據(jù),或者是根據(jù)當(dāng)前偏移 地址和下一個偏移地址尋址得到的兩個數(shù)據(jù),根據(jù)緩存的大小不同而決定采用哪種方式;主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“讀”操作指令的步驟,若操作成功,設(shè)備會產(chǎn) 生一個應(yīng)答信號;
設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并下發(fā)數(shù)據(jù)后再尋址得到下發(fā)的下一個數(shù)據(jù)的步驟,這樣 可以連續(xù)讀取數(shù)據(jù);
主機向所要訪問的設(shè)備下發(fā)“停止”操作指令,若操作成功,設(shè)備會產(chǎn)生一個中斷,處理 相應(yīng)的結(jié)束操作。下面通過一個具體的實施例予以說明
本實施例采用ADuc7020微控制器(MCU),它具有I2C兼容接口,有兩個引腳用于I2C串 口的數(shù)據(jù)傳送SDA和SCL。它具有I2C中斷處理服務(wù)程序,可以根據(jù)I2C狀態(tài)寄存器,來判 斷處理相應(yīng)的I2C中斷操作。它還具有一個二級的緩存,用于存放數(shù)據(jù)。同時具有緩存的 狀態(tài)寄存器,用于觀察緩存的當(dāng)前狀態(tài)。首先把ADuc7020的I2C中斷處理程序配置好,在中斷處理程序執(zhí)行相應(yīng)的操作。 主機首先發(fā)送一個開始信號,接著發(fā)送ADuc7020的設(shè)備地址和“寫”命令。ADuc7020在接 收成功后會自動產(chǎn)生一個答應(yīng)信號。接著主機發(fā)送偏移地址,ADuc7020產(chǎn)生一個答應(yīng)信號, 這時,會產(chǎn)生一個I2C中斷,進入中斷處理程序。中斷處理程序先判斷是否產(chǎn)生了 I2C中斷, 如果是就先把I2C的狀態(tài)寄存器值和收到的數(shù)據(jù)值保存下來。接著判斷I2C狀態(tài)寄存器的值,若此時是以0x4008,表示接收到了起始信號,以及 有一個數(shù)據(jù)發(fā)送過來。然后判斷二級緩存狀態(tài),看Rx FIFO中是否只有一個值;如果是把 接收到的數(shù)據(jù)作為偏移地址保存起來,根據(jù)這個偏移地址馬上執(zhí)行尋址操作。把尋址得到 的數(shù)據(jù)放入到I2C的從機發(fā)送數(shù)據(jù)寄存器中,準(zhǔn)備發(fā)送。由于是二級緩存,再往I2C的從機 發(fā)送數(shù)據(jù)寄存器發(fā)送一個空數(shù)據(jù)。得到數(shù)據(jù)后,把偏移地址向后移一位。最后把I2C的TX FIFO中斷申請使能。接下來主機再發(fā)送一個起始信號,ADuc7020的設(shè)備地址和“讀”命令。由于TX FIFO 已經(jīng)被填滿,雖然TX FIFO中斷申請已經(jīng)使能,但不會在此產(chǎn)生一個I2C中斷。此時會少一 個中斷。接著ADuc7020自動產(chǎn)生一個應(yīng)答信號,由于此時的命令是“讀”。ADuc7020在產(chǎn) 生了應(yīng)答信號會產(chǎn)生一個中斷,準(zhǔn)備發(fā)送數(shù)據(jù)出去。進入中斷處理程序,I2C狀態(tài)寄存器的值被保存下來。接著判斷I2C寄存器的值 是否是0x4004,表示數(shù)據(jù)已經(jīng)發(fā)送出去了。然后把TX FIFO清空,再去尋址把下一個數(shù)據(jù)得 到放到TX FIFO中,再把一個空值放入,使TX FIFO填滿。得到數(shù)據(jù)后,把偏移地址向后移 一位。最后把I2C的TX FIFO中斷申請使能。如果是連續(xù)“讀”操作,主機在收到數(shù)據(jù)發(fā)送 一個答應(yīng),ADuc7020再次會產(chǎn)生一個中斷,重復(fù)一次上一個中斷的處理程序即可。最后主機發(fā)送一個非答應(yīng)信號和一個停止信號。表示停止。隨之產(chǎn)生一個中斷, 進入中斷處理程序后,先判斷I2C狀態(tài)寄存器是否是0x0400。接著把TX FIFO清空,因為 TX FIFO中一直保存著當(dāng)前傳送數(shù)據(jù)的下一個數(shù)據(jù),同時也把地址指向當(dāng)前位。最后,把TX FIFO中斷申請關(guān)掉,把首字節(jié)傳送標(biāo)志設(shè)置上。本發(fā)明并不局限于前述的具體實施方式
。本發(fā)明擴展到任何在本說明書中披露的 新特征或任何新的組合,以及披露的任一新的方法或過程的步驟或任何新的組合。
權(quán)利要求
一種I2C總線的通信方法,其方法包括主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“寫”操作指令的步驟;主機向所要訪問的設(shè)備下發(fā)訪問數(shù)據(jù)偏移地址的步驟;設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并保存偏移地址的步驟;主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“讀”操作指令的步驟;設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并下發(fā)數(shù)據(jù)的步驟;主機向所要訪問的設(shè)備發(fā)送“停止”信號的步驟;其特征在于,設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并保存偏移地址的步驟還包括根據(jù)偏移地址的尋址到相應(yīng)數(shù)據(jù)的步驟。
2.根據(jù)權(quán)利要求1所述的I2C總線的通信方法,其特片在于,所述尋址操作是在偏移地 址得到后,立即執(zhí)行,得到所需的數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的I2C總線的通信方法,其特征在于,所述尋址得到的數(shù)據(jù)為根 據(jù)當(dāng)前偏移地址尋址得到的一個數(shù)據(jù),或者是根據(jù)當(dāng)前偏移地址和下一個偏移地址尋址得 到的兩個數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的I2C總線的通信方法,其特征在于,所述設(shè)備接收到數(shù)據(jù)后產(chǎn) 生中斷并下發(fā)數(shù)據(jù)后再尋址得到下發(fā)的下一個數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的I2C總線的通信方法,其特征在于,所述設(shè)備接收到數(shù)據(jù)后產(chǎn) 生中斷并下發(fā)數(shù)據(jù)后再尋址得到下發(fā)的下一個數(shù)據(jù)的步驟重復(fù)執(zhí)行,連續(xù)讀取數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種I2C總線的通信方法,屬于嵌入式通信技術(shù)領(lǐng)域,應(yīng)用于I2C總線“讀”通信方式。一種I2C總線的通信方法,其方法包括主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“寫”操作指令步驟;主機向所要訪問的設(shè)備下發(fā)訪問數(shù)據(jù)偏移地址的步驟;設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并保存偏移地址,根據(jù)偏移地址立即尋址到相應(yīng)數(shù)據(jù)的步驟;主機向所要訪問的設(shè)備下發(fā)設(shè)備地址和“讀”操作指令的步驟;設(shè)備接收到數(shù)據(jù)后產(chǎn)生中斷并下發(fā)數(shù)據(jù)的步驟;主機向所要訪問的設(shè)備下發(fā)“停止”命令的步驟。本發(fā)明運用的尋址操作是在產(chǎn)生的中斷處理程序中得到偏移地址后立即執(zhí)行的,從而為發(fā)送數(shù)據(jù)準(zhǔn)備節(jié)約了時間,達到提速的有益效果。
文檔編號G06F13/38GK101937413SQ20101051464
公開日2011年1月5日 申請日期2010年10月21日 優(yōu)先權(quán)日2010年10月21日
發(fā)明者劉海 申請人:成都優(yōu)博創(chuàng)技術(shù)有限公司