新聞中心

I2C總線深入淺出

作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
I2C總線深入淺出

IIC總線,是INTER-IC串行總線的縮寫。INTER-IC原文大意是用于相互作用的集成電路,這種集成電路主要由雙向串行時鐘線SCL和雙向串行數(shù)據(jù)線SDA兩條線路組成,由荷蘭菲利浦公司于80年代研制開發(fā)成功。

本文引用地址:http://butianyuan.cn/article/201612/330487.htm

  IIC總線在傳送數(shù)據(jù)時其速率可達100kbps,最高速率時可達400kbps,總線上允許連接的設(shè)備數(shù)主要決定于總線上的電容量,一般設(shè)定為400pF以下。I2C總線主要在微處理器的控制之下,因此通常稱微處理器是I2C總線的主機。習慣上總稱受控設(shè)備及功能電路為I2C總線的從機。這種主機與從機之間的連接通常是在總線的輸出端,而輸出端的電路結(jié)構(gòu)為IIC總線的從機。這種主機與從機之間的連接通常是在總線的輸出端,而輸出端的電路結(jié)構(gòu)又總是開漏輸出或集電極開路輸出。 通常數(shù)據(jù)傳送要由主機發(fā)出啟動信號和時鐘信號,向所控從機發(fā)出一個地址、一個讀寫位和一個應答位,其中地址位為7位數(shù)據(jù),在實際控制中,一般一次只能傳送一個8位數(shù)據(jù),并以一個停止位結(jié)束。

  在實際應用中,往往被傳送的數(shù)據(jù)位數(shù)會超過8位,也就是說總會有多字節(jié)傳送,這時必須在傳送數(shù)據(jù)地址結(jié)束后再傳送一個副地址。因此,被傳送的字節(jié)沒有限制,但每一個字節(jié)后面必須有一位應答位。應答位通常被設(shè)定在低電平,當應答位處于高電平時,指示被傳送的數(shù)據(jù)已結(jié)束。

  I2C總線在空閑狀態(tài)時,也就是不在進行任何操作控制時,數(shù)據(jù)線SDA和時鐘線SCL總是處于高電平輸出狀態(tài)。當操作控制系統(tǒng)時,I2C總線的主機將發(fā)出啟動信號,使數(shù)據(jù)線SDA由高電平變?yōu)榈碗娖剑瑫r時鐘線SCL也發(fā)出時鐘信號。

    I2C總線在傳送數(shù)據(jù)時,總是將最高位數(shù)碼放在前面作為其特有的傳送順序。在數(shù)據(jù)傳送過程中,如果從機在完成某一操作之前不能接收下一個字節(jié)數(shù)據(jù),即數(shù)據(jù)中斷,這時時鐘線SCL將被位至低電平,從而迫使發(fā)送器主機進入等待狀態(tài),當接收器從機準備好接收下一個字節(jié)時再釋放時鐘線SCL,繼續(xù)傳送數(shù)據(jù)。

  在I2C總線的控制系統(tǒng)中,有時從機也可以是多臺微處理器,在多臺微機同時工作時,它們對總線的控制也由相似于時鐘的同步方式進行仲裁,也就是說時鐘的同步與仲裁過程是同時進行的,不存在因是主機而有優(yōu)先權(quán)次序。不同速度的從機可以接在同一I2C總線上完成相互間數(shù)據(jù)的傳送。高速方式芯片和普通芯片可以混合于同一I2C總線上。

I2C總線的特點與特性

  I2C總線與傳統(tǒng)的PWM調(diào)寬脈沖相比較,其最大的特點是串行數(shù)據(jù)線和時鐘線都是雙向傳輸線。I2C總線在實際電路的應用中,兩根線各自通過一個上拉電阻連接到電源電壓的正極端,當總線空閑時,數(shù)據(jù)線SDA和時鐘線SCL必須保持高電平,同時各接口電路的輸出又必須是開路漏極或開路集電極,因此I2C總線的最大特性是在地址信息傳輸過程中,即可以是主控器也可以是被控器,或既可以是發(fā)射器又可以是接收器,從而為掛在總線上的各集成電路或功能模塊完成各自的功能提供了極大方便。

  如果I2C總線用作主控器電路即微處理電路,則在總線上將提供時鐘傳送及初始化的數(shù)據(jù)傳輸,而控制數(shù)據(jù)信息傳送的對象、方向及傳送的終止也由主控器來決定。在I2C總線上被主控器所尋址的集成電路或功能模塊,稱之為被控器。在I2C總線上,被控器每接收一個“數(shù)碼”后都要在數(shù)據(jù)線上給主控器發(fā)送一個識別應答信號,以示完成一個控制功能。因此,I2C總線具有十分靈活的運用性。并且還具有多重主控的能力,如多個作為主控器去控制占用總線的電路,都可以根據(jù)在I2C總線上進行數(shù)據(jù)傳送的工作狀態(tài),被分為主控發(fā)送器、主控接收器、被控發(fā)射器、被控接收器。在多重主控能力中,由于總線的仲裁過程,I2C總線的時鐘信號將是各試力占用總線的各主控器的時鐘信號的同步組合。所謂仲裁是在多個主控器試圖同時控制總線時一個裁決過程,它只允許其中的一個主控器繼續(xù)占用總線,并保證在整個過程中總線上的數(shù)據(jù)不會被丟失或出錯誤;所謂同步是將兩個或多個器件的時鐘信號進行處理。

  I2C總線上的時鐘信號是由主控器產(chǎn)生,每個主控器在占用總線傳送數(shù)據(jù)期間都有自已的時鐘,因此,在應用中,由一個主控器產(chǎn)生的I2C總線時鐘信號只可能被一個低速的被控器或另一個主控器改變。然而,一個低速的被控器可將串行時鐘線保持低電平,以延長總線時鐘信號的低電平周期,使高速的主控器和低速的被控器達到同步,因此,當總線上正在進行仲裁時,另一個主控器也能改變總線的時鐘周期。

I2C總線的控制技術(shù)

  由于在I2C總線中的多主控器的控制權(quán)總是相互競爭,并且在相互競爭中進行尋址和數(shù)據(jù)發(fā)送,因此總線上沒有中央微處理器,也沒有任何優(yōu)先級。在I2C總線上進行數(shù)據(jù)傳輸時,所有的主控器都會在串行時鐘線上產(chǎn)生自己的時鐘信號,而且只有當時鐘線上的信號處于高電平時,數(shù)據(jù)線上的數(shù)據(jù)才是有效的。因此,當各主控器向總線上輸出各不相同的時鐘頻率時,只有通過仲裁過程,才可使總線上有一個統(tǒng)一的時鐘信號。只有總線上的時鐘線上的一種“線與”連接和雙向傳輸特性來實現(xiàn)的。因此,I2C總線的控制基礎(chǔ)主要是仲裁過程和時鐘同步。

  在總線的仲裁過程中,一旦有一主控器輸出一個低電平時鐘信號,則串行時鐘線將由此變?yōu)榈碗娖?,直到該主控器時鐘信號的高電平狀態(tài)到來,數(shù)據(jù)信號才開始傳送。在總線上這個時鐘線的電平轉(zhuǎn)換,將影響所有主控器的時鐘信號低電平周期的計時。事實上,當一個主控器的時鐘信號由低電平向高電平轉(zhuǎn)換時,它可能并不會改變串行時鐘線的低電平狀態(tài),因為此時可能有另一個主控器仍然處于時鐘低電平周期。也就是說,在I2C總線控制中,時鐘線將由時鐘低電平周期最長的主要控器保持為低電平狀態(tài),而其他時鐘低電平周期較短的主控器則將相繼進入時鐘高電平等待狀態(tài)。只有當總線上的所有主控器都結(jié)束了時鐘低電平周期的計時后,時鐘線才被完全釋放,即時鐘線的狀態(tài)達到一致高電平狀態(tài)。

  當所有主控器時鐘信號都進入高電平狀態(tài)后,便開始了各自的時鐘信號高電平周期計時。當有一個主控器的時鐘高電平狀態(tài)計時結(jié)束時,這個主控器將再次使I2C總線上的時鐘線SCL處于低電平狀態(tài)。從而,在總線的仲裁過程中,使時鐘線通過各主控的時鐘輸出產(chǎn)生一個統(tǒng)一的時鐘同步信號成為現(xiàn)實。

  簡言之,在多重主控器的I2C總線上,時鐘線信號的低電平周期由時鐘信號低電平周期最長的主控器決定,而時鐘線信號的高電平周期則由時鐘信號高電平周期最短的主控器決定。

  在I2C總線中,具有主控能力的器件的數(shù)據(jù)傳輸和尋址也是在仲裁中進行的。當有多個主控器企圖同時占用總線傳輸數(shù)據(jù)時,根據(jù)I2C總線的規(guī)約它們之間會有一個促裁過程,以決定誰將占用總線。促裁是在時鐘線SCL為高電平時,根據(jù)數(shù)據(jù)線SDA的狀態(tài)進行的。因此,仲裁過程和時鐘電平、數(shù)據(jù)線狀態(tài)是相輔相成的。也正是這種相輔相成的機制,使在總線仲裁過程中,當有其他主控器在數(shù)據(jù)線上傳送低電平時,發(fā)送高電平的主控器將會發(fā)現(xiàn)此時數(shù)據(jù)線上的電平與其輸出電平不一致,從而被裁決失去總線的主控權(quán),并立即關(guān)閉其數(shù)據(jù)輸出。仲裁過程可以持續(xù)詐多位,以對多個主控器正在企圖尋址同一電路的事件進行判決。如果一個主控器在發(fā)送某一字節(jié)期間被裁決失去主控權(quán),則它的時鐘信號可繼續(xù)輸出,直到整個字節(jié)發(fā)送結(jié)束為止。如果主控器在其尋址階段被仲裁決定失去主控權(quán),則該主控器必須立刻進入被控接收器狀態(tài),以判決被仲裁決定獲得主控權(quán)的主控器是否正在對它進行尋址。產(chǎn)生數(shù)據(jù)的主控器一旦發(fā)現(xiàn)內(nèi)部數(shù)據(jù)電平與數(shù)據(jù)總線的實際電平之間有差異,則它的輸出將被立即關(guān)閉,隨即在總線上輸出一個高電平(釋放總線),這就不會影響獲得主控權(quán)的主控器所進行的數(shù)據(jù)傳輸,總線上的尋址和數(shù)據(jù)傳輸?shù)茸√幰膊粫G失。因此,I2C總線的仲裁過程使I2C總線上的數(shù)據(jù)傳輸?shù)靡皂樌M行,為多種控制功能的實施奠定了良好的基礎(chǔ)。

I2C總線的傳輸

  I2C總線的傳輸是一個比較復雜的數(shù)碼傳輸,它主要是以8bit的字節(jié)進行數(shù)據(jù)傳輸,而傳輸時又總有一個時鐘脈沖相對應,因此,I2C總線的數(shù)據(jù)傳送實質(zhì)上是個脈沖串的傳輸,其傳輸格式如圖1-14所示。圖中1為字節(jié)傳送完成接收器內(nèi)產(chǎn)生中斷信號,2為當處理中斷服務(wù)時時鐘線保持低電平。

  在I2C總線上,每一個數(shù)據(jù)中,邏輯“0”和邏輯“1”的信號電平取決于相應的正端電壓。I2C總線在進行傳送時,在時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。這就保持了數(shù)據(jù)傳輸?shù)挠行浴?/p>

  在時鐘線保持高電平期間,由于數(shù)據(jù)線由高電平向低電平的變化是一種穩(wěn)定的狀態(tài),所以就將其狀態(tài)規(guī)定為起始條件;而當時鐘線保持高電平期間,數(shù)據(jù)線是由低電平向高電平變化,則規(guī)定為停止條件。只有I2C總線中主控器產(chǎn)生起始條件和停止條件兩個信號時,總線才會被認為處于“忙”態(tài)或“閑”態(tài),從而準確控制了比特位的傳送。

  在I2C總線上,比特位傳送字節(jié)的后面都必須跟隨一位確認位,或稱跟隨一位應答位。并且數(shù)據(jù)是以最高有效位首先發(fā)出。但是,當正在進行數(shù)據(jù)傳輸?shù)慕邮掌魇盏酵暾囊粋€數(shù)據(jù)字節(jié)后,有可能還要完成一些其他的工和,如處理一個內(nèi)部中斷服務(wù)等。在這種情況下就有可能無法立刻接收另一字節(jié)的數(shù)據(jù),因而,此時接收器可以通過總線上的時鐘保持為低電平,從而使發(fā)送器進入等待狀態(tài),直到接收器準備好接收新的數(shù)據(jù),而接收器通過釋放時鐘線使數(shù)據(jù)傳輸繼續(xù)進行,正是I2C總線能允許其他總線的數(shù)據(jù)格式進行傳輸,才有一個特殊尋址開始的信息傳輸,以及通過對總線產(chǎn)生一個停止信號進行停止。

  當一個字節(jié)的數(shù)據(jù)能夠被總線上的一個已被尋址的接收器接收后,總線上的一般要產(chǎn)生一個確認信號,并在這一位時鐘信號的整個高電平期間,使數(shù)據(jù)保持穩(wěn)定的低電平狀態(tài),從而完成應答確認信號的輸出。確認信號通常是指起始信號和停止信號,如果這個信息是一個起始字節(jié),或是總線尋址,則總線上不允許有應答信號產(chǎn)生。如果因某種特殊情況,被控器不對應的被控尋址進行確認回答,則必須將數(shù)據(jù)線置于高電平,然后主控器可以通過產(chǎn)一個停止信號來結(jié)束總線的數(shù)據(jù)傳輸。如果被控接收器對被控尋址做出了確認應答,但在數(shù)據(jù)傳輸?shù)囊欢螘r間以后,又無法繼續(xù)接收更多的數(shù)據(jù),則主控器也將停止數(shù)據(jù)的繼續(xù)傳送。因此,被控接收器可以通過對無法接收的第一個數(shù)據(jù)字節(jié)不產(chǎn)生確認應答信號來通知主控器,即在相應的應答信號時鐘位上將數(shù)據(jù)線置于高電平,主控器則在總線上產(chǎn)生停止信號,從而結(jié)束數(shù)據(jù)的傳送。

  注:1-7 為地址位;8為讀/寫位;9為應答位

  在I2C總線上,它的數(shù)據(jù)傳輸總有一些規(guī)約要求,例如,起始信號的后面總有一個被控器的地址。被控器的地址一般規(guī)定為7bit的數(shù)據(jù),數(shù)碼中的第8比特是數(shù)據(jù)的傳輸方向位,即讀/寫位。一個完整的I2C總線傳輸格式如圖1-15所示。 

  在讀/寫位中,如果是“0”,則表示主控器發(fā)送數(shù)據(jù),也就是執(zhí)行“寫”的功能;如果是“1”,則表示主控器接收數(shù)據(jù),也就是執(zhí)行“讀”的功能。而數(shù)據(jù)的每次傳輸總是隨主控器產(chǎn)生的停止信號而結(jié)束。而I2C總線中,有時主控器希望總占用總線,并不斷進行數(shù)據(jù)傳輸,因此,在設(shè)定規(guī)約時,可以在不首先產(chǎn)生信號的情況下,再次發(fā)出起始信號對另一被控器進行尋址。為解決這一問題,可以采用多種讀/寫組合形式來進行總線的一次數(shù)據(jù)傳輸。在多種讀/寫組合形式中,主要有三種措施,其中:

1.主控發(fā)送器向被接收器發(fā)送數(shù)據(jù),數(shù)據(jù)傳輸方向在整個傳輸過程中不變。

2.主控器在第一個字節(jié)后立即從被控制器讀數(shù)據(jù),在首位確認應答信號產(chǎn)生后,主控發(fā)送器變成主控接收器,而被接收器變成被控發(fā)送器,同時首位應答信號仍由被控器產(chǎn)生,使停止信號總是由主控器產(chǎn)生。

3.數(shù)據(jù)傳輸過程中的復合格式需要改變傳送方向時,起始信號和被控器地址都會被重復產(chǎn)生一次,但兩次的讀/寫方向正好反相。

  總之在I2C總線上,通過接口電路收到起始信號后,必須復位它們的總線邏輯,以使被控制器地址的傳輸?shù)靡灶A處理,從而完成對各不相同功能電路的控制



關(guān)鍵詞: I2C總線串行總線集成電

評論


技術(shù)專區(qū)

關(guān)閉