I2C總線介紹
I2C(Inter-Integrated Circuit)總線是由Philips公司開發(fā)的一種雙向二線制同步串行總線,它只需要兩條線(SDA,SCL)即可在連接于總線上的器件之間傳送信息。I2C總線的工作速率有100k、400k和4M三種,支持多機(jī)通訊,支持多主控模塊但同一時(shí)刻只允許有一個(gè)主控端。
SCL(Serial Clock):邊沿觸發(fā)方式,上升沿將數(shù)據(jù)輸入到EEPROM,下降沿驅(qū)動EEPROM輸出數(shù)據(jù)。
SDA(Serial Data Line):雙向數(shù)據(jù)線,OD門,每次傳輸8bit。
成都英創(chuàng)ETA202 I2C矩陣鍵盤擴(kuò)展模塊
I2C總線中主要定義如下:
發(fā)送機(jī)(Transmitter):向總線傳輸數(shù)據(jù)的設(shè)備。
接收機(jī)(Receiver):從總線接收數(shù)據(jù)的設(shè)備。
主機(jī)(Master):產(chǎn)生時(shí)鐘、啟動發(fā)送、發(fā)送I2C命令、停止發(fā)送的設(shè)備。
從機(jī)(Slave):監(jiān)聽總線并且被主機(jī)尋址的設(shè)備。
多主控(Multi-master):總線上可以有多個(gè)主機(jī),每一個(gè)都可以發(fā)送命令。
仲裁(Arbitration):在有多個(gè)主機(jī)同時(shí)嘗試控制總線時(shí),只允許其中一個(gè)控制總線并使報(bào)文不被破壞的過程。
同步():兩個(gè)或多個(gè)設(shè)備同步時(shí)鐘信號的過程。
SCL和SDA信號都是雙向的,他們通過電阻連接到電源上,總線空閑時(shí)兩條線都處于高電平狀態(tài)。I2C總線上的設(shè)備都必須有集電極開路或者漏極開路管腳,激活總線意味著拉低其電平。單個(gè)總線上的設(shè)備數(shù)量幾乎是無限的,唯一的要求是總線電容不超過400pF。由于邏輯1取決于電源電壓的大小,因此沒有標(biāo)準(zhǔn)的總線電壓。
I2C總線掛載設(shè)備示意圖
I2C時(shí)序分析
總線空閑
SDA和SCL兩條信號線都處于高電平,即總線上所有的器件都釋放總線,兩條信號線的上拉電阻把電平拉高。
啟動信號START
時(shí)鐘信號SCL保持高電平,數(shù)據(jù)信號SDA的電平被拉低。啟動信號必須是跳變信號,而且在建立該信號前必須保證總線處于空閑狀態(tài)。
停止信號STOP
時(shí)鐘信號SCL保持高電平,數(shù)據(jù)線被釋放,使SDA返回高電平,停止信號也必須是跳變信號。
I2C啟動信號START與停止信號STOP
應(yīng)答信號ACK
發(fā)送器每發(fā)送一個(gè)字節(jié)之后,在時(shí)鐘的第9個(gè)脈沖期間釋放數(shù)據(jù)總線,由接收器發(fā)送一個(gè)應(yīng)答信號ACK(將SDA的電平拉低)來表示數(shù)據(jù)成功接收。
無應(yīng)答信號NACK
在時(shí)鐘的第9個(gè)脈沖期間發(fā)送器釋放數(shù)據(jù)總線,而接收器不拉SDA電平,則表示一個(gè)無應(yīng)答信號NACK,NACK有兩種用途:
(1)一般表示接收器未成功接收數(shù)據(jù)字節(jié)。
(2)當(dāng)接收器是主機(jī)時(shí),它收到最后一個(gè)字節(jié)后,應(yīng)發(fā)送一個(gè)NACK信號,以通知從機(jī)結(jié)束數(shù)據(jù)發(fā)送,并釋放總線,以便主機(jī)發(fā)送停止信號STOP。
數(shù)據(jù)傳輸
每個(gè)時(shí)鐘脈沖傳輸1比特?cái)?shù)據(jù)。SDA信號只在SCL處于低電平時(shí)變化,SCL處于高電平期間,SDA電平必須保持穩(wěn)定。
I2C數(shù)據(jù)傳輸時(shí)SDA與SCL電平變化情況
I2C數(shù)據(jù)傳輸流程
I2C總線協(xié)議
基本工作原理
主設(shè)備以啟動信號START來掌管總線,以停止信號STOP來釋放總線。主設(shè)備啟動的每一個(gè)I2C命令均以START開始,以STOP結(jié)束。
啟動信號START后緊接著發(fā)送一個(gè)地址字節(jié),其中7位為被控器件的地址碼,一位為讀/寫控制位R/W。R/W為0表示主機(jī)向從機(jī)寫數(shù)據(jù),R/W為1表示主機(jī)從從機(jī)讀取數(shù)據(jù)。當(dāng)從機(jī)檢測到收到的地址與自己的地址相同時(shí),在第9個(gè)時(shí)鐘期間反饋應(yīng)答信號。每個(gè)數(shù)據(jù)字節(jié)在傳送時(shí)都是高位(MSB)在前。
I2C基本工作流程
寫數(shù)據(jù)過程
1、主機(jī)檢測到總線空閑之后,發(fā)送啟動信號START信號掌管總線。
2、主機(jī)發(fā)送一個(gè)地址字節(jié)(包括7位地址碼和1位R/W)。
3、當(dāng)從機(jī)檢測到主機(jī)發(fā)送的地址與自己的地址相同以后,發(fā)送應(yīng)答信號(ACK)。
4、主機(jī)收到應(yīng)答信號ACK后,開始發(fā)送第一個(gè)數(shù)據(jù)字節(jié)。
5、從機(jī)收到數(shù)據(jù)字節(jié)后,發(fā)送應(yīng)答信號ACK表示繼續(xù)傳送數(shù)據(jù),發(fā)送NACK表示數(shù)據(jù)傳送結(jié)束。
6、主機(jī)發(fā)送完全部數(shù)據(jù)后,發(fā)送停止信號STOP,結(jié)束通訊并釋放總線。
讀通訊過程
1、主機(jī)檢測到總線空閑之后,發(fā)送啟動START信號掌管總線。
2、主機(jī)發(fā)送一個(gè)地址字節(jié)(包括7位地址碼和1位R/W)。
3、當(dāng)從機(jī)檢測到主機(jī)發(fā)送的地址與自己的地址相同以后,發(fā)送應(yīng)答信號ACK。
4、主機(jī)收到應(yīng)答信號ACK后釋放數(shù)據(jù)總線,開始接收第一個(gè)數(shù)據(jù)字節(jié)。
5、主機(jī)收到數(shù)據(jù)字節(jié)后,發(fā)送應(yīng)答信號ACK表示繼續(xù)傳送數(shù)據(jù),發(fā)送NACK表示數(shù)據(jù)傳送結(jié)束。
6、主機(jī)完成接收以后,發(fā)送停止信號STOP,結(jié)束通訊并釋放總線。
同步
每個(gè)主機(jī)必須生成自己的時(shí)鐘信號,只有當(dāng)時(shí)鐘信號電平為低時(shí),數(shù)據(jù)才能改變。執(zhí)行總線仲裁必須有同步時(shí)鐘。當(dāng)某個(gè)主機(jī)拉低時(shí)鐘電平時(shí),時(shí)鐘會并保持低電平,直到所有主機(jī)均將時(shí)鐘拉至高電平。同樣,時(shí)鐘會處于高電平狀態(tài),直到第一個(gè)主機(jī)將其拉低。這樣,通過觀察SCL信號,主設(shè)備可以同步它們的時(shí)鐘。
仲裁
對于I2C總線上的正常數(shù)據(jù)傳輸過程而言,只允許一個(gè)主機(jī)進(jìn)行控制。如果出于某種原因,兩個(gè)主機(jī)同時(shí)啟動I2C命令,則仲裁過程決定哪個(gè)主機(jī)獲得控制權(quán)并且可以繼續(xù)執(zhí)行命令。仲裁是通過SDA信號執(zhí)行的,此時(shí)SCL信號處于高電平。每個(gè)主機(jī)檢查總線上的SDA信號是否對應(yīng)于自己生成的SDA信號。如果總線上的SDA信號應(yīng)該是高電平但它卻處于低電平,那么這個(gè)主機(jī)就在仲裁過程中失敗。仲裁失敗的I2C主設(shè)備可以產(chǎn)生SCL脈沖直到字節(jié)結(jié)束,然后必須釋放總線并進(jìn)入從設(shè)備模式。仲裁過程可以持續(xù)到所有數(shù)據(jù)傳輸完畢以后。這意味著在多主機(jī)系統(tǒng)中,每個(gè)I2C主機(jī)必須監(jiān)控I2C總線并執(zhí)行相關(guān)操作。
I2C總線典型電路
現(xiàn)在的ARM CPU芯片普遍直接支持I2C總線,直接從CPU中將相應(yīng)管腳引出,即可以外接I2C功能模塊或者芯片,然后通過軟件進(jìn)行控制操作。
下圖為一個(gè)典型的I2C應(yīng)用擴(kuò)展(成都英創(chuàng)ETA202 I2C矩陣鍵盤擴(kuò)展模塊部分電路),使用TCA8418芯片擴(kuò)展出8x8矩陣鍵盤。直接將SDA、SCL、鍵盤中斷信號KEY_INT#和復(fù)位信號RST#接入芯片,并接上電源和地,即可以控制8x8矩陣鍵盤。
I2C總線在英創(chuàng)主板平臺上的應(yīng)用
支持I2C接口的芯片都可以直接和英創(chuàng)主板連接,并執(zhí)行相應(yīng)的功能。歷年來,大量用戶使用英創(chuàng)主板進(jìn)行I2C應(yīng)用和數(shù)據(jù)處理,英創(chuàng)也累積了豐富的工程經(jīng)驗(yàn)。下面整理出了英創(chuàng)網(wǎng)站發(fā)表的相關(guān)技術(shù)文檔供用戶參考。雖然有一些方案文檔中提到的英創(chuàng)主板是較老的型號,用戶在新產(chǎn)品開發(fā)的時(shí)候未必會使用這些老主板產(chǎn)品,但是文中的軟硬件使用技巧、編程技巧和方法等技術(shù)細(xì)節(jié),是值得用戶參考或者直接使用的。
使用方法與技巧
英創(chuàng)工業(yè)主板EM9160的GPIO應(yīng)用于I2C通訊嵌入式Linux工控板EM9160的I2C功能及其應(yīng)用
EM9170工控主板I2C總線使用方法JAVA操作英創(chuàng)主板I2C接口簡介
-
Linux
+關(guān)注
關(guān)注
87文章
11314瀏覽量
209807 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35427
發(fā)布評論請先 登錄
相關(guān)推薦
評論