I2C總線協議及其應用 一、I2C總線介紹: 由于大規模集成電路技術的發展,在單個芯片集成CPU以及組成一個單獨工作系統所必須的ROM、RAM、I/O端口、A/D、D/A等外圍電路和已經實現,這就是常說的單片機或微控制器。目前,世界上許多公司生產單片機,品種很多:包括各種字長的CPU,各種容量和品種的ROM、RAM,以及功能各異的I/O等等。但是,單片機品種規格有限,所以只能選用某種單片機再進行擴展。擴展的方法有兩種:一種是并行總線,另一種是串行總線。由于串行總線連線少,結構簡單,往往不用專用的母板和插座而直接用導線連接各個設備即可。因此,采用串行總線大大簡化了系統硬件設計。PHILIPS公司早在十幾年就前推出了I2C串行總線,它是具備多主機系統所需的包括裁決和高低速設備同步等功能的高性能串行總線。 1. I2C總線硬件結構和術語 I2C串行總線有兩根信號線:一根雙向的數據線SDA;另一根是時鐘線SCL。所有接到I2C總線上的設備的串行數據都接到總線的SDA線,各設備的時鐘線SCL接到總線的SCL。典型的I2C總線結構如圖1。 圖1:PC總線結構 為了避免總線信號的混亂,要求各設備連接到總線的輸出端必須是開漏輸出或集電極開路輸出的結構。設備與總線的接口電路如圖2所示。設備上的串行數據線SDA接口電路應該是雙向的,輸出電路用于向總線上發數據,輸入電路用于接收總線上的數據。串行時鐘線也應是雙向的,作為控制總線數據傳送的主機要通過SCL輸出電路發送時鐘信號,同時要檢測總線上SCL上的電平以決定什么時候發下一個時鐘脈沖電平;作為接受主機命令的從機,要按總線上的SCL的信號發出或接收SDA上的信號,也可以向SCL線發出低電平信號以延長總線時鐘信號周期。總線空閑時,因各設備都是開漏輸出,上拉電阻RP使ADA和SCL線都保持高電平。任一設備輸出的低電平都使相應的總線信號線變低,也就是說各設備的SDA是“與”關系,SCL也是“與”關系。 圖2:設備和PC總線接口電路 總線對設備接口電路的制造工藝和電平都沒有特殊的要求(NMOS、CMOS都可以兼容)。數據傳送率按I2C總線可高達每秒十萬位,高速方式可高達每秒四十萬位。總線上允許連接的設備數以總線上的電容量不超過400pF為限。 總線的運行(數據傳輸)由主機控制。所謂主機即啟動數據的傳送(發出啟動信號),發出時鐘信號,傳送結束時發出停止信號的設備,通常主機是微處理器。被主機尋訪的設備都稱為從機。為了進行通訊,每個接到I2C總線的設備都有一個唯一的地址,以便于主機尋訪。主機和從機的數據傳送,可以由主機發送數據到從機,也可以是從機發到主機。凡是發送數據到總線的設備稱為發送器,從總線上接收數據的設備被稱為接受器。 I2C總線上允許連接多個微處理器及各種外圍設備,如存儲器、LED及LCD驅動器、A/D及D/A轉換器等。為了保證數據可靠地傳送,任一時刻總線只能有由某一臺主機控制一個微處理器應該在總線空閑時發啟動數據,為了妥善解決多臺微處理器同時發啟數據傳送(總線控制權)的沖突,并決定由哪一臺微處理器控制總線。I2C總線允許連接不同傳送速率的設備,多臺設備之間時鐘信號的同步過程稱為同步化。 2. I2C數據傳輸 在I2C總線傳輸過程中,將兩種特定的情況定義為開始和停止條件(如圖3):當SCL保持“高”,SDA由“高”變為“低”時為開始條件;SCL保持“高”,SDA由“低”變為“高”是為停止條件。開始和停止條件由主控器產生。使用硬件接口可以很容易地檢測開始和停止條件,沒有這種接口的微機必須以每時鐘周期至少兩次對SDA取樣以使檢測這種變化。 圖3:總線開始/停止 SDA線上的數據在時鐘“高”期間必須是穩定的,只有當SCL線上的時鐘信號為低時,數據線上的“高”或“低”狀態才可以改變。輸出到SDA線上的每個字節必須是8位,每次傳輸的字節不受限制,每個字節必須有一個應答為ACK。如果一接收器件在完成其他功能(如一內部中斷)前不能接收另一數據的完整字節時,它可以保持時鐘線SCL為低,以促使發送器進入等待狀態,當接收器械準備好接受數據的其它字節并釋放時鐘SCL后,數據傳輸繼續進行。I2C數據總線傳送時序如圖4。 圖4:總線數據傳送順序 數據傳送具有應答是必須的。與應答對應的時鐘脈沖由主控器產生,發送器在應答期間必須下拉SDA線。當尋址的被控器件不能應答時,數據保持為高,接著主控器產生停止條件終止傳輸。在傳輸的過程中,當用到主控接收器的情況下,主控接收器必須發出一數據結束信號給被控發送器,被控發送器必須釋放數據線,以允許主控器產生停止條件。合法的數據傳輸格式如下:
I2C總線在開始條件后的首字節決定哪個被控器將被主控器選擇,例外的是“通用訪問”地址,它可以尋址所有期間。當主控器輸出一地址時,系統中的每一器件都將開始條件后的前七位地址和自己地址比較。如果相同,該器件認為自己被主控器尋址,而作為被控接收器或被控發送器則取決于R/W位。 二、I2C總線的應用 I2C總線是各種總線中使用信號線最少,并具有自動尋址,多主機時鐘同步和仲裁等功能很強的總線。因此,使用I2C設計計算機系統十分方便、靈活、體積也小,在各類實際應用中得到廣泛應用。下面舉兩個應用示例。 1. 伺服控制系統用I2C擴展LCD顯示 圖5是一個伺服系統的結構圖。用8XC752單片機的PWM輸出經放大后驅動電機,電機的轉速有測速機測取并直接送到8XC752片內A/D電路。處理后的有關信息經I2C總線送到LCD驅動芯片PCF8577以驅動六十四段LCD顯示板。 圖5:伺服系統結構框圖 2. 通用I/O端口作為I2C總線接口 目前,51、96系列的單片機應用很廣,但是它們都沒有I2C總線接口,限制了在這些系統中使用具有I2C總線接口的器件。但通過對I2C總線時序的分析知道可以用51單片機的兩根I/O線來實現I2C總線的功能。I2C總線規定SCL線和SDA線是各設備對應輸出狀態相“與”的結果,任一設備都可以用輸出低電平的方法延長SCL低電平時間,迫使高速設備進入等待狀態,實現不同速度設備間的時鐘同步。因此,即使時鐘脈沖的高、低電平時間長短不一,也能實現數據的可靠傳送,可以用軟件控制I/O口做I2C接口。下面就是用GMS97C2051DE的通用I/O口作為I2C總線接口由軟件控制實現數據傳送的例子,圖6為其連線圖。 圖6:GMS97C2051 擴展EEPROM接線圖 |