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

英創(chuàng)信息技術JAVA操作英創(chuàng)主板I2C接口簡介

英創(chuàng)信息技術工控主板接口與應用需求對應表

什么是I2C協(xié)議
什么是I2C協(xié)議?

評論