日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[I2C]I2C总线协议图解

發(fā)布時間:2025/5/22 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [I2C]I2C总线协议图解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://blog.csdn.net/w89436838/article/details/38660631

1? I2C總線物理拓?fù)浣Y(jié)構(gòu)

?
????I2C 總線在物理連接上非常簡單,分別由SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線)及上拉電阻組成。通信原理是通過對SCL和SDA線高低電平時序的控制,來產(chǎn)生I2C總線協(xié)議所需要的信號進(jìn)行數(shù)據(jù)的傳遞。在總線空閑狀態(tài)時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平

I2C通信方式為半雙工,只有一根SDA線,同一時間只可以單向通信,485也為半雙工,SPI和uart為雙工。

2? I2C總線特征

??? I2C總線上的每一個設(shè)備都可以作為主設(shè)備或者從設(shè)備,而且每一個設(shè)備都會對應(yīng)一個唯一的地址(地址通過物理接地或者拉高,可以從I2C器件的數(shù)據(jù)手冊得知,如TVP5158芯片,7位地址依次bit6~bit0:x101 1xxx, 最低三位可配,如果全部物理接地,則該設(shè)備地址為0x58, 而之所以7bit因?yàn)?個bit要代表方向,主向從和從向主),主從設(shè)備之間就通過這個地址來確定與哪個器件進(jìn)行通信,在通常的應(yīng)用中,我們把CPU帶I2C總線接口的模塊作為主設(shè)備,把掛接在總線上的其他設(shè)備都作為從設(shè)備。
??? I2C總線上可掛接的設(shè)備數(shù)量受總線的最大電容400pF 限制,如果所掛接的是相同型號的器件,則還受器件地址位的限制。
??? I2C總線數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。一般通過I2C總線接口可編程時鐘來實(shí)現(xiàn)傳輸速率的調(diào)整,同時也跟所接的上拉電阻的阻值有關(guān)。
??? I2C總線上的主設(shè)備與從設(shè)備之間以字節(jié)(8位)為單位進(jìn)行雙向的數(shù)據(jù)傳輸。

3? I2C總線協(xié)議

??? I2C協(xié)議規(guī)定,總線上數(shù)據(jù)的傳輸必須一個起始信號作為開始條件,以一個結(jié)束信號作為傳輸?shù)耐V箺l件。起始和結(jié)束信號總是由主設(shè)備產(chǎn)生(意味著從設(shè)備不可以主動通信?所有的通信都是主設(shè)備發(fā)起的,主可以發(fā)出詢問的command,然后等待從設(shè)備的通信)

起始和結(jié)束信號產(chǎn)生條件:總線在空閑狀態(tài)時,SCL和SDA都保持著高電平,當(dāng)SCL為高電平而SDA由高到低的跳變,表示產(chǎn)生一個起始條件;當(dāng)SCL為高而SDA由低到高的跳變,表示產(chǎn)生一個停止條件。

在起始條件產(chǎn)生后,總線處于忙狀態(tài),由本次數(shù)據(jù)傳輸?shù)闹鲝脑O(shè)備獨(dú)占,其他I2C器件無法訪問總線;而在停止條件產(chǎn)生后,本次數(shù)據(jù)傳輸?shù)闹鲝脑O(shè)備將釋放總線,總線再次處于空閑狀態(tài)。起始和結(jié)束如圖所示

??? 在了解起始條件和停止條件后,我們再來看看在這個過程中數(shù)據(jù)的傳輸是如何進(jìn)行的。前面我們已經(jīng)提到過,數(shù)據(jù)傳輸以字節(jié)為單位。主設(shè)備在SCL線上產(chǎn)生每個時鐘脈沖的過程中將在SDA線上傳輸一個數(shù)據(jù)位,當(dāng)一個字節(jié)按數(shù)據(jù)位從高位到低位的順序傳輸完后,緊接著從設(shè)備將拉低SDA線,回傳給主設(shè)備一個應(yīng)答位, 此時才認(rèn)為一個字節(jié)真正的被傳輸完成。當(dāng)然,并不是所有的字節(jié)傳輸都必須有一個應(yīng)答位,比如:當(dāng)從設(shè)備不能再接收主設(shè)備發(fā)送的數(shù)據(jù)時,從設(shè)備將回傳一個否 定應(yīng)答位。數(shù)據(jù)傳輸?shù)倪^程如圖所示:
?
??? 在前面我們還提到過,I2C總線上的每一個設(shè)備都對應(yīng)一個唯一的地址,主從設(shè)備之間的數(shù)據(jù)傳輸是建立在地址的基礎(chǔ)上,也就是說,主設(shè)備在傳輸有效數(shù)據(jù)之前要先指定從設(shè)備的地址,地址指定的過程和上面數(shù)據(jù)傳輸?shù)倪^程一樣,只不過大多數(shù)從設(shè)備的地址是7位的,然后協(xié)議規(guī)定再給地址添加一個最低位用來表示接下來數(shù)據(jù)傳輸?shù)姆较?#xff0c;0表示主設(shè)備向從設(shè)備寫數(shù)據(jù),1表示主設(shè)備向從設(shè)備讀數(shù)據(jù)。向指定設(shè)備發(fā)送數(shù)據(jù)的格式如圖所示:(每一最小包數(shù)據(jù)由9bit組成,8bit內(nèi)容+1bit ACK, 如果是地址數(shù)據(jù),則8bit包含1bit方向)
?

下圖是完整的一幀I2C數(shù)據(jù)

?

4? I2C總線操作

??? 對I2C總線的操作實(shí)際就是主從設(shè)備之間的讀寫操作。大致可分為以下三種操作情況

  • ? ? 主設(shè)備往從設(shè)備中寫數(shù)據(jù)。數(shù)據(jù)傳輸格式如下:

?

  • ? ? 主設(shè)備從從設(shè)備中讀數(shù)據(jù)。數(shù)據(jù)傳輸格式如下:

  • ? ? 主設(shè)備往從設(shè)備中寫數(shù)據(jù),然后重啟起始條件,緊接著從從設(shè)備中讀取數(shù)據(jù);或者是主設(shè)備從從設(shè)備中讀數(shù)據(jù),然后重啟起始條件,緊接著主設(shè)備往從設(shè)備中寫數(shù)據(jù)。數(shù)據(jù)傳輸格式如下:

??? 第三種操作在單個主設(shè)備系統(tǒng)中,重復(fù)的開啟起始條件機(jī)制要比用STOP終止傳輸后又再次開啟總線更有效率。

總結(jié)

以上是生活随笔為你收集整理的[I2C]I2C总线协议图解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。