一、 協議1.1   通信簡介

I2CInter-Integrated Circuit),中文應該叫集成電路總線,它是一種串行通信總線,使用多主從架構,是由飛利浦公司在1980年代初設計的,方便了主板、嵌入式系統或手機與周邊設備組件之間的通訊。由于其簡單性,它被廣泛用于微控制器與傳感器陣列,顯示器,IoT設備,EEPROM等之間的通信。 結合了SPIUART的最佳功能。使用 ,您可以將多個從機連接到單個主機(類似 SPI),另外,您可以讓多個主機控制單個或多個從機。當您希望多個微控制器將數據記錄到單個存儲卡或將文本顯示到單個 LCD 時,這個特性就非常有用了。與UART 通信一樣, 僅使用兩根電線在設備之間傳輸數據:

image.png


SDA (Serial Data) – 這條線為主機和從機提供數據發送和接收功能。

SCL (Serial Clock) – 這條線為時鐘信號線。

 SPI 一樣,I2C 是同步的,因此位的輸出通過主機和從機之間共享的時鐘信號同步到位的采樣。時鐘信號總是由主機控制。

  

使用線數

  

2

最大速度

標準模式(Standard  mode)   =100kbps

快速模式(Fast  mode)       =400kbps

高速模式(High  speed mode)=3.4Mbps

超快速模式(Ultra  fast mode)=5Mbps

同步/異步

同步

串行/并行

串行

最大主機數

不限制

最大從機數

1008


1.2 的工作原理(HOW WORKS

使用 ,數據在消息中傳輸。消息被分解成數據幀。每條消息都有一個地址幀,其中包含從機的二進制地址,以及一個或多個包含正在傳輸數據的數據幀。該消息還包括每個數據幀之間的啟動和停止條件、讀/寫位以及ACK/NACK位:

image.png

啟動條件(StartCondition):SDA 線在SCL線從高到低切換之前從高電位切換到低電位。

停止條件(StopCondition):SDA 線在SCL線從低到高切換之后從低電位切換到高電位。

地址幀(AddressFrame):每個從機都有唯一的7位或10位數列,主機可以通過該序列識別從機,主機如果需要向從機發送/接收數據,首先要發送對應從機的地址,然后會匹配總線上掛載的從機的地址。

/寫位(Read/Write Bit):指定主機是向從機發送數據(低電位)還是請求從機發送數據(高電位)的1個位。

ACK/NACK位(ACK/NACK Bit):在一條消息中,每一幀后都跟隨1個確認應答(ACK)/非確認應答(NACK)位。如果一個地址幀或數據幀是被成功接收,一個確認應答位(ACK bit)將從接收設備返回給發送設備。

1.3  尋址(ADDRESSING

沒有像SPI這樣的從機片選接口線,所以它需要另一種方式讓從機知道數據被發送到它,而不是另一個從機。它需要通過尋址來實現。地址幀始終是新消息中開始位后的第一幀。

主機將它想要與之溝通的從機的地址發送給與之相連的每一個從機。然后,每個從機將從主機發送的地址與自己的地址進行比較。如果地址匹配,它會向主發送低電壓ACK位。如果地址不匹配,從機什么都不做,SDA線仍然很高。

1.4  /寫位(READ/WRITE BIT

在地址幀的末尾包含一個單獨的位,用于通知從機,主機是否想向它寫數據還是想從它接收數據。如果主機要將數據發送給從機,讀/寫位是低電位;如果主機請求來自從機的數據,則該位為高電位1

1.5  數據幀(THE DATA FRAME

在主機檢測到從機發出的ACK位后,第一個數據幀已準備好發送。

數據幀始終為8位長,并且首先發送最重要的位。每個數據幀后面都立即有ACK/NACK 位,以驗證幀是否已成功接收。在發送下一個數據幀之前,主機或從機(取決于誰發送數據)必須接收ACK位。

在發送完所有數據幀后,主機可以向從機發送停止條件以停止傳輸。停止條件是在SCL線路上從低到高過渡后,SDA線的電壓從低到高過渡,SCL線保持高位。

1.6 數據傳輸的步驟(STEPS OF I2C DATATRANSMISSION

1. 主機發送啟動條件給每一個連接的從機,在SCL線從高到低切換之前,主機將SDA線從高切換到低電平即可觸發啟動條件,即在SCL高電平時候給SDA一個下降沿,如下圖所示,注意箭頭的時序方向:

image.png

2. 主機發送它想與之溝通的7位或10位從機地址,以及讀/寫位:

image.png

image.png

image.png


3. 每個從機將從主機發送的地址與自己的地址進行比較。如果地址匹配,則從機通過將SDA 線拉低1個位來返回ACK位。如果主機的地址與從機自己的地址不匹配,則從機會將SDA線留在高電位(通過上拉電阻)。地址匹配的從機返回ACK位如下圖所示:

image.png


image.png

image.png


4.主機發送或接收數據幀:

image.png

image.png



5. 傳輸每個數據幀后,接收設備會將另一個ACK 位返回給發件人,以確認成功接收幀:

image.png

image.png


6. 為了停止數據傳輸,主機發送一個停止條件給從機,通過在SDA拉高之前先拉高SCL,即在SCL高電平時候給SDA一個上升沿,如下圖所示,注意箭頭表示的傳輸順序:

image.png

image.png



1.7 單主機與多從機(SINGLE MASTER WITH MULTIPLE SLAVES

由于 使用尋址,因此可以實現單個主機控多個從機。使用7位地址理論上可提供 1282^7)個唯一地址。使用10位地址并不常見,但理論上可提供10242^10)個唯一地址。要將多個從機連接到單個主機,請像下面這樣將它們連接起來,并用4.7K Ohm上拉式電阻器將SDASCL線連接到Vcc



1.8  多主機與多從機(MULTIPLE MASTERS WITH MULTIPLE SLAVES

多個主機可以連接到一個單一的從機或多個從機。在多主機系統總,當兩個主機嘗試同時通過SDA線發送或接收數據時,問題就出現了。為了解決這個問題,每個主機在傳輸消息之前需要檢測SDA線是低電平還是高電平。如果SDA線為低電平,則意味著另一個主機正控制著總線,該主機應等待發送消息。如果SDA線被拉高,則傳輸消息是安全的。

要將多個主機連接到多個從機,請按下圖連接,并使用4.7K Ohm上拉式電阻器將SDA SCL線連接到Vcc



1.9 的優缺點(ADVANTAGES AND DISADVANTAGES OF 

優勢

僅使用兩根電線

支持多個主和多個奴隸

ACK/NACK 位確認每個幀都成功傳輸

硬件不如UART復雜

眾所周知和廣泛使用的協議

缺點

數據傳輸速率低于SPI

數據框架的大小限制為8位

實現所需的硬件比SPI更復雜

1.10 總結

總線由9bit的塊構成。開始條件:當SCL是高電平時候SDA從高到底跳變的下降沿,作為開始條件。在總線上的所有從機都要開始注意了:

image.png


地址位為緊跟開始條件的7bit數據,主機想要與該地址從機溝通:

image.png


讀寫位為緊跟7bit地址后的第8位作為讀寫選擇位:該位用于表示主機是想讀從機的數據還是想往從機里寫數據:為1表示讀;為0表示寫。

image.png


主機和從機之間的同步位:0表示ACK1表示NACK0:我在或數據已接收。1:沒有我或數據未接收。

image.png


數據字節:在地址字節后的8位是來自主機或從機的數據字節。至于來自誰,要看讀寫位。當寫周期,主機發送數據;當讀周期,從機發送數據:

image.png


停止條件:當SCL是高電平時,數據線SDA從低電平跳變到高電平產生的上升沿作為停止條件。主機通知從機本次溝通結束。

image.png


完整的 總線協議時序如下圖所示:

image.png


丝瓜视频色板_丝瓜视频色板app_丝瓜视频色版_丝瓜视频下载app视频污版在线观看