- 圖11-1給出了一個由MCU作為主機,通過IIC總線帶3個從機的單主機IIC總線系統,這是最常用、最典型的IIC總線連接方式。
- 物理結構上,IIC系統由一條串行數據線SDA和一條串行時鐘總線SCL組成。主機按一定的通信協議向從機尋址和 進行信息傳輸。在數據傳輸時,由主機初始化一次數據傳輸,主機使數據在SDA上傳輸的同時還通過SCL線傳輸時鐘。信息傳輸的對象和方向以及信息傳輸的開始和終止均由主機決定。
1、總線上數據的有效性
IIC總線是以串行方式傳輸數據,從數據字節的最高位開始傳輸,每個數據位在SCL上都有一個時鐘脈沖相對應。在時鐘線高電平期間數據數據線上必須保持穩定的邏輯電平狀態。高電平為數據1,低電平為數據0。只有在時鐘線為低電平時,才允許數據線上的電平狀態變化。如圖11-2所示。
2、總線上的信號
IIC總線在傳送數據過程中有四種類型信號,它們分別是 :開始信號、停止信號、重新開始信號和應答信號。
開始信號(start): 如圖11-3所示,當SCL為高電平,SDA由高電平到低電平的跳變,產生開始信號。當總線空閑的時候,例如,沒有主設備在使用總線(SDA和SCL都處于高電平),主機通過發送開始(start)信號建立通信。
停止信號(stop): 如圖11-3所示,當SCL為高電平時,SDA由低電平向高電平跳變,產生停止信號。主機通過發送停止信號,結束數據通信。
重新開始信號(Repeated START): 在IIC總線上,由主機發送一個開始信號啟動一次通信后,在首次發送停止信號之前, 主機通過發送 重新開始信號,可以轉換與當前從機的通信模式或是切換與另一個從機通信。如圖11-3所示,當SCL為高電平時,SDA由高電平向低電平跳變,產生重新開始信號,它的本質就是一個開始信號。
應答信號(A):接收數據的IIC在接收到8位數據后,向發送數據的IIC發出的特定的低電平脈沖。每一個數據字節后面都要跟一位的應答信號,表示已收到數據。應答信號在第九個時鐘周期出現,這時發送器必須在這一時鐘位上釋放數據線,由接收設備拉低SDA電平來產生應答信號,這樣,主機方就認為此次數據傳輸失敗;如果是主機作為接收方,在從機發送器發送完一個字節數據后,發送了非應答信號,從機就認為數據傳輸結束,并釋放SDA線,不論是哪種情況,都會終止數據的傳輸,這時,主機或是產生停止信號釋放總線,或是產生重新開始信號,開始一次新的通信。開始信號、重新開始信號和停止信號都是由主控制器產生,應答信號由接收器產生,總線上帶有IIC總線接口的器件很容易檢測到這些信號。
3、總線上數據傳輸格式
(1)一般情況下,一個標準的IIC通信由四部分組成:開始信號、從機地址傳輸、數據傳輸、停止信號。
(2)由主機發送一個開始信號,啟動一次IIC通信;在主機對從機尋址后,再在總線上傳輸數據。IIC總線上傳送的每一個字節均為8位,首先發送的數據位最高位,每傳送一個字節后都必須跟隨一個應答位,每次通信的數據字節數沒有限制;在全部數據傳輸結束后,由主機發送停止信號,結束通信。
圖11-5所示,時鐘線為低電平時數據傳送將停止進行。這種情況可以用于當接收器接收到一個字節數據后要進行一些其他工作而無法立即接收下一個數據時,迫使總線進入 等待狀態,直到接收器準備好接收新數據時,接收器再釋放時鐘線使數據傳送得以繼續正常進行。例如,當接收器接收完 主控制器的一個字節數據后,產生中斷信號并進行中斷處理,中斷處理完畢才能接收下一個字節數據,這時接收器在中斷處理 時將牽住SCL為低電平,直到中斷處理完畢才釋放SCL。
4、IIC總線尋址約定
為了消除IIC總線系統中主控器與被控器的地址選擇線,最大限度地簡化總線連接線,IIC總線采用了了獨特的尋址約定,規定了開始信號后的第一個字節為尋址字節,用來尋址被控器件,并規定數據傳送 方向。
在IIC總線系統中,尋址字節由被控器的七位地址為(它占據了D7~D1位)和一位的方向位(為D0位)組成,方向位為 0 時表示主控器將數據寫入被控器,為 1 時表示主控器從被控器讀取數據。主控器發送開始信號后,立即發送尋址字節,這時,總線上的所有器件都將尋址中的7位地址與自己器件地址比較。如果兩者相同,則該器件認為被主控件尋址,并發送應答信號,被控器根據讀、寫位確定自身是作為發送器還是接收器。
主器件作為被控器時,其7位從地址在IIC總線地址寄存器中給定,為純軟件地址。而非單片機類型的外圍器件地址完全由器件類型與引腳電平給定。IIC總線系統中,沒有兩個從機地址是相同的。主控器件不應該傳輸一個和它本身的地址相同的地址。
5、主機向從機讀寫1個字節數據的過程
如圖11-6所示,主機要向從機寫1個字節的數據時,主機首先產生START信號,然后緊跟著發送一個從機地址,這個地址共有7位,緊接著的第8位是數據方向位(R/W),0表示主機發送數據(寫),1表示主機接收數據(讀),這時候主機等待從機的應答信號(A),當主機接收到應答信號時,發送要訪問的地址,繼續等待從機的應答信號,當主機收到應答信號后,發送一個字節的數據,繼續等待從機的應答信號,當主機收到應答信號后,產生停止信號,結束傳輸過程。
如圖11-7所示,主機要從從機讀1個字節數據時,主機首先產生START信號,然后緊跟著發送一個從機地址 ,注意此時該地址的第8位為0,表明是向從機寫命令,這時候主機等待從機的應答信號(A),當主機收到應答信號時,發送要訪問的地址,繼續等待從機的應答信號,當主機收到應答信號后,主機要改變通信模式(主機將由發送變為接收,從機將由接收變為發送)所以主機發送重新開始信號,然后緊跟著發送一個從機地址,注意此時該地址第8位為1,表明將主機設置成接收模式開始讀取數據,這時候主機等待從機的應答信號,當主機收到應答信號時,就可以接收一個字節的數據,當接收完成后,主機發送 非應答信號,表示不在接收數據,主機進而產生停止信號。結束傳送過程。