I2C總線協議及其應用
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接線圖
評論