91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

物聯(lián)網(wǎng)嵌入式軟件中的I2C總線設(shè)計詳解

jf_94171069 ? 來源:jf_94171069 ? 作者:jf_94171069 ? 2024-09-29 16:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

I2C(Inter-Integrated Circuit)通信總線,作為嵌入式系統(tǒng)設(shè)計中的一個關(guān)鍵組成部分,其靈活性和高效率使其在高級應(yīng)用中備受青睞。本文旨在提供關(guān)于I2C通信總線的深度解析,包括其基本概念、特點、通信協(xié)議,以及在不同場景下的高級應(yīng)用和最佳實踐。I2C接口只有2根信號線,總線上可以連接多個設(shè)備,硬件實現(xiàn)簡單,可擴展性強。I2C通信協(xié)議可以用普通GPIO引腳進行軟件模擬。I2C接口主要用于通訊速率要求不高,以及多個器件之間通信的應(yīng)用場景。

01

I2C總線歷史

I2C(Inter-Integrated Circuit)總線是一種重要的串行通信協(xié)議,它的歷史可以追溯到上世紀80年代初期。以下是對I2C總線歷史的詳細介紹:

起源:

I2C總線技術(shù)由荷蘭的飛利浦半導(dǎo)體(現(xiàn)在的恩智浦半導(dǎo)體)在1982年開發(fā)。最初,這項技術(shù)是為了在電視機內(nèi)部實現(xiàn)簡單、高效、低成本的通信而設(shè)計的。

設(shè)計目標:

設(shè)計I2C的初衷是減少電視機等復(fù)雜電子系統(tǒng)內(nèi)部的布線數(shù)量,同時也降低制造成本。通過使用只有兩根線的通信總線,它有效地減少了器件間連接的復(fù)雜性。

技術(shù)發(fā)展:

隨著技術(shù)的成熟和普及,I2C協(xié)議得到了廣泛的應(yīng)用和擴展。從最初的標準模式(100kHz),發(fā)展到快速模式(400kHz)和高速模式(3.4MHz)。

標準化和開放:

雖然最初由飛利浦半導(dǎo)體開發(fā),但I2C協(xié)議后來被標準化并廣泛應(yīng)用于多種設(shè)備中。飛利浦半導(dǎo)體放棄了對這項技術(shù)的專利權(quán),使其成為開放標準。

廣泛應(yīng)用:

I2C技術(shù)由于其簡單性和有效性,已成為嵌入式系統(tǒng)設(shè)計中不可或缺的一部分。

wKgaomb5DeCAG8XQAAufMwzzlhc100.jpg

02

I2C通信總線基本概念

I2C是一種多主機、兩線制、低速串行通信總線,廣泛用于微控制器和各種外圍設(shè)備之間的通信。它使用兩條線路:串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)進行雙向傳輸。

特點

兩線制總線:I2C僅使用兩條線——串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)進行通信,有效降低了連接復(fù)雜性。

多主多從設(shè)備支持:I2C支持多個主設(shè)備和多個從設(shè)備連接到同一總線上。每個設(shè)備都有唯一的地址。

可變的時鐘速率:I2C總線支持不同的速率模式,如標準模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。

同步通信:I2C是一種同步通信協(xié)議,數(shù)據(jù)傳輸由時鐘信號(SCL)來控制。

簡單的連接:I2C通信對硬件的要求比較低,很容易在微控制器和外圍設(shè)備間實現(xiàn)連接。

地址分配:每個I2C設(shè)備都通過一個7位或10位的地址來識別,這使得總線上可以連接多個設(shè)備。

阻塞傳輸:I2C支持阻塞傳輸機制,即主設(shè)備可以在傳輸過程中控制總線,防止其他設(shè)備發(fā)送數(shù)據(jù)。

應(yīng)用廣泛:由于其簡單和靈活性,I2C被廣泛應(yīng)用于各種電子產(chǎn)品中,如傳感器、LCD顯示器、EEPROM等。

總線仲裁和沖突檢測:在多主模式下,I2C能夠處理多個主設(shè)備同時嘗試控制總線的情況。

低功耗:I2C總線的設(shè)計使其成為低功耗的通信方式,適用于電池供電的設(shè)備。

基本特征

總線結(jié)構(gòu):

兩線制:使用兩條線進行通信,分別是串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)。

多主多從結(jié)構(gòu):支持多個主設(shè)備和多個從設(shè)備連接到同一總線上。

通信方式:

同步串行:數(shù)據(jù)傳輸同步于時鐘信號。

字節(jié)格式:每個字節(jié)由8位數(shù)據(jù)構(gòu)成,加上開始和停止條件以及可選的應(yīng)答位。

時鐘速率:

支持多種速率,包括標準模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。

工作原理

總線控制:

開始和停止條件:通信由主設(shè)備通過在SDA線上生成特定的信號模式來開始和結(jié)束。

地址幀:每次通信開始時,主設(shè)備發(fā)送一個地址幀來指定與之通信的從設(shè)備。

數(shù)據(jù)傳輸:

主從通信:主設(shè)備控制時鐘信號,向從設(shè)備發(fā)送或接收數(shù)據(jù)。

應(yīng)答位:每個字節(jié)后,接收方

發(fā)送一個應(yīng)答位(ACK)或非應(yīng)答位(NACK),以告知發(fā)送方數(shù)據(jù)是否被成功接收。

地址和仲裁

設(shè)備地址:

7位或10位地址:每個I2C設(shè)備都有一個唯一的地址,允許在同一總線上連接多個設(shè)備。

總線仲裁:

在多主模式下,當(dāng)兩個主設(shè)備同時嘗試控制總線時,I2C協(xié)議包含仲裁機制以決定哪個設(shè)備獲得控制權(quán)。

03

I2C數(shù)據(jù)傳輸流程

數(shù)據(jù)信號以8位的序列傳輸。所以在特殊的開始條件發(fā)生后,就會出現(xiàn)第一個8位序列,它指示了數(shù)據(jù)被發(fā)送到哪個從設(shè)備的地址。每個8位序列之后都會跟隨一個稱為確認的位。

wKgZomb5DeGAKvC7AATZnh_IHnA866.jpg

在大多數(shù)情況下,第一個確認位之后會跟著另一個尋址序列,但這次是針對從設(shè)備的內(nèi)部寄存器。在尋址序列之后是數(shù)據(jù)序列,直到數(shù)據(jù)完全傳輸完畢,并以一個特殊的停止條件結(jié)束。

開始條件發(fā)生在數(shù)據(jù)線在時鐘線仍然高電平的時候變低。之后,時鐘開始,并且在每個時鐘脈沖期間傳輸每一位數(shù)據(jù)。設(shè)備尋址序列從最重要的位開始,以最不重要的位結(jié)束,實際上是由7位組成的,因為第8位用于指示主設(shè)備是向從設(shè)備寫入(邏輯低)還是從中讀取(邏輯高)。

下一個確認位由從設(shè)備用來指示它是否成功接收了前一個位序列。所以這次主設(shè)備將SDA線的控制權(quán)交給從設(shè)備,如果從設(shè)備成功接收了前一個序列,它將把SDA線拉低到所謂的確認狀態(tài)。

如果從設(shè)備沒有把SDA線拉低,這種狀態(tài)被稱為不確認,意味著它沒有成功接收前一個序列,這可能由多種原因造成。例如,從設(shè)備可能正忙,可能不理解接收到的數(shù)據(jù),或者不能再接收任何數(shù)據(jù)等等。 在這種情況下,主設(shè)備決定如何繼續(xù)操作。

wKgaomb5DeKAcLnrAAcK3UXOOB0479.jpg

接下來是內(nèi)部寄存器的尋址。內(nèi)部寄存器是從設(shè)備內(nèi)存中包含各種信息或數(shù)據(jù)的位置。

wKgZomb5DeOAWjovAAemV71nqtc234.jpg

例如,ADXL345加速度計有一個獨特的設(shè)備地址和額外的內(nèi)部寄存器地址,用于X、Y和Z軸。 因此,如果我們首先想讀取x軸的數(shù)據(jù),我們需要發(fā)送設(shè)備地址,然后發(fā)送x軸的特定內(nèi)部寄存器地址。這些地址可以從傳感器的數(shù)據(jù)手冊中找到。

wKgaomb5DeSAKO5wAAsERgtaV9E820.jpg

在尋址之后,數(shù)據(jù)傳輸序列開始,要么來自主設(shè)備,要么來自從設(shè)備,這取決于在讀/寫位選擇的模式。

wKgZomb5DeWACSQZAAhMuoshZGU419.jpg

在數(shù)據(jù)完全發(fā)送之后,傳輸將以停止條件結(jié)束,當(dāng)SDA線在SCL線高電平時從低變高。這就是I2C通信協(xié)議的工作原理。

wKgaomb5DeaAGAbOAAh5nlVnJnw388.jpg

上述內(nèi)容出現(xiàn)了很多特定概念,我們下面來分別解釋他們:

SDA和SCL信號

SDA和SCL都是雙向線路,通過電流源或上拉電阻連接到正電源電壓(見圖3)。 當(dāng)總線空閑時,兩條線路都是HIGH。連接到總線的設(shè)備的輸出級必須具有開漏極或開集電極來執(zhí)行有線與功能。I2C總線上的數(shù)據(jù)可以在標準模式下以高達100 kbit/s的速度傳輸,在快速模式下可達400 kbit/s,在快速模式+中可達1 Mbit/s,或在高速模式下可達3.4 Mbit/s。總線電容限制了連接到總線的接口數(shù)量。

對于單個主應(yīng)用程序,如果總線上沒有設(shè)備會拉伸時鐘,主SCL輸出可以是推挽驅(qū)動器設(shè)計。

wKgZomb5DeeAP0UvAACJAob7qN8096.jpg

wKgaomb5DeeAbG58AAIxQd9ADZY084.jpg

數(shù)據(jù)有效性

SDA線上的數(shù)據(jù)必須在時鐘HIGH期間保持穩(wěn)定。只有當(dāng)SCL線上的時鐘信號為LOW時,數(shù)據(jù)線的HIGH或LOW狀態(tài)才能改變(見圖4)。傳輸?shù)拿總€數(shù)據(jù)位都會產(chǎn)生一個時鐘脈沖。

wKgZomb5DeuADFMGAAA2iypPYDU885.jpg

START和STOP條件

所有事務(wù)都以START(S)開始,并由STOP§終止(參見圖5)。 SDA線上SCL為HIGH時,HIGH到LOW的轉(zhuǎn)換定義了一個START條件。 SDA線上SCL為HIGH時,LOW到HIGH的轉(zhuǎn)換定義了一個STOP條件。

wKgaomb5DeyAMNSoAAA-AtuxEKk285.jpg

START和STOP條件總是由主設(shè)備產(chǎn)生。在START條件之后,總線被認為是忙碌的。在STOP條件之后的某個時間,總線被認為是空閑的。

如果產(chǎn)生了重復(fù)的START(Sr)而不是STOP條件,總線保持忙碌。在這方面,START(S)和重復(fù)的START(Sr)條件在功能上是相同的。

因此,對于本文檔的其余部分,S符號被用作代表START和重復(fù)的START條件的通用術(shù)語,除非Sr是特別相關(guān)的。

如果連接到總線的設(shè)備合并了必要的接口硬件,則檢測START和STOP條件是容易的。然而,沒有這種接口的微控制器必須在每個時鐘周期內(nèi)對SDA線采樣至少兩次,以感知轉(zhuǎn)換。

字節(jié)格式

每一個放在SDA線上的字節(jié)必須是8位長。每次傳輸可以傳輸?shù)淖止?jié)數(shù)是沒有限制的。每一個字節(jié)后面必須跟一個確認位。數(shù)據(jù)以最有效位(MSB)為首進行傳輸(見圖6)。如果一個從機在執(zhí)行其他一些功能之前不能接收或傳輸另一個完整的字節(jié)數(shù)據(jù),例如處理一個內(nèi)部中斷,它可以保持時鐘線SCL LOW,迫使主機進入等待狀態(tài)。當(dāng)從機準備好接收另一個字節(jié)數(shù)據(jù)并釋放時鐘線SCL時,數(shù)據(jù)傳輸繼續(xù)進行。

wKgaomb5De6ARO-pAAEP6dzmnmM606.jpg

Acknowledge(ACK)和Not Acknowledge(NACK)

確認發(fā)生在每個字節(jié)之后。確認位允許接收端向發(fā)送端發(fā)出信號,表示字節(jié)被成功接收,可以發(fā)送另一個字節(jié)。主設(shè)備產(chǎn)生所有的時鐘脈沖,包括確認的第九個時鐘脈沖。

確認信號定義如下:發(fā)送端在確認時鐘脈沖期間釋放SDA線,這樣接收端就可以拉SDA線LOW,并且在該時鐘脈沖的HIGH期間保持穩(wěn)定的LOW(參見圖4)。設(shè)

當(dāng)SDA在第九個時鐘脈沖期間保持HIGH時,這被定義為不確認信號。主設(shè)備然后可以產(chǎn)生一個STOP條件來中止傳輸,或者重復(fù)的START條件來啟動一個新的傳輸。有五個條件導(dǎo)致NACK的產(chǎn)生:

沒有接收器在總線上傳輸?shù)刂罚詻]有設(shè)備響應(yīng)確認。

接收器無法接收或發(fā)送,因為它正在執(zhí)行一些實時功能,并且還沒有準備好與主服務(wù)器進行通信。

在傳輸過程中,接收方收到了它無法理解的數(shù)據(jù)或命令。

在傳輸過程中,接收方不能接收到任何更多的數(shù)據(jù)字節(jié)。

主接收機必須向從發(fā)送機發(fā)出傳輸結(jié)束的信號。

時鐘同步

兩個主控器可以同時在一個空閑總線上開始傳輸,必須有一種方法來決定哪個主控器控制總線并完成傳輸。這是通過時鐘同步和仲裁來實現(xiàn)的。在單主控器系統(tǒng)中,時鐘同步和仲裁是不需要的。

時鐘同步是通過I2C接口到SCL線的有線與連接來實現(xiàn)的。這意味著SCL線上的HIGH到LOW轉(zhuǎn)換會導(dǎo)致相關(guān)的主控器開始計數(shù)他們的LOW周期,一旦主控器時鐘變?yōu)長OW,它會保持SCL線處于該狀態(tài),直到時鐘達到HIGH狀態(tài)(見圖7)。然而,如果另一個時鐘仍然在它的LOW周期內(nèi),這個時鐘的LOW到HIGH轉(zhuǎn)換可能不會改變SCL線的狀態(tài)。因此,SCL線被具有最長LOW周期的主控器保持為LOW。具有較短LOW周期的主控器在這段時間內(nèi)進入HIGH等待狀態(tài)。

wKgZomb5De-AAPnuAACd2ldX9HE503.jpg

當(dāng)所有主控機都結(jié)束了低周期時,SCL線釋放并變?yōu)楦唠娖健4藭r主控機時鐘與SCL線的狀態(tài)沒有區(qū)別,所有主控機開始計算它們的高周期。第一個完成高周期的主控機再次拉低SCL線。

這樣,一個同步SCL時鐘就產(chǎn)生了,它的低周期由低周期最長的主控機決定,而它的高周期由高周期最短的主控機決定。

仲裁

仲裁,像同步一樣,是指只有在系統(tǒng)中使用多個主設(shè)備時才需要的協(xié)議部分。從設(shè)備不參與仲裁過程。只有總線空閑時,主設(shè)備才可以開始傳輸。兩個主設(shè)備可以在最小保持時間(tHD; STA)內(nèi)產(chǎn)生一個START條件,這會導(dǎo)致總線上產(chǎn)生一個有效的START條件。然后需要仲裁來決定哪個主設(shè)備將完成它的傳輸。

仲裁逐位進行。在每個位期間,當(dāng)SCL為HIGH時,每個主設(shè)備檢查SDA電平是否與它所發(fā)送的相匹配。這個過程可能需要許多位。兩個主設(shè)備實際上可以無誤地完成整個事務(wù),只要傳輸是相同的。第一次一個主設(shè)備試圖發(fā)送HIGH,但檢測到SDA電平為LOW,主設(shè)備知道它已經(jīng)失去了仲裁并關(guān)閉SDA輸出驅(qū)動器。另一個主設(shè)備繼續(xù)完成它的事務(wù)。

在仲裁過程中沒有信息丟失。一個失去仲裁的主設(shè)備可以產(chǎn)生時鐘脈沖,直到它失去仲裁的字節(jié)結(jié)束,并繼續(xù)產(chǎn)生時鐘脈沖。必須在總線空閑時重新開始它的事務(wù)。

如果一個主設(shè)備也包含一個從設(shè)備功能,并且它在尋址階段失去仲裁,有可能是獲勝的主設(shè)備試圖尋址它。因此,失敗的主設(shè)備必須立即切換到它的從設(shè)備模式。

圖8顯示了兩個主設(shè)備的仲裁過程。可能涉及更多內(nèi)容,這取決于總線連接了多少主設(shè)備。當(dāng)產(chǎn)生DATA1的主設(shè)備的內(nèi)部數(shù)據(jù)電平與SDA線上的實際電平之間存在差異時,DATA1輸出被關(guān)閉。這不影響由獲勝的主設(shè)備發(fā)起的數(shù)據(jù)傳輸。

wKgaomb5DfCAfGKGAACloyCGyK0330.jpg

由于I2C總線的控制完全由競爭主設(shè)備發(fā)送的地址和數(shù)據(jù)決定,所以沒有中心主設(shè)備,總線上也沒有任何優(yōu)先順序。

如果仲裁程序仍在進行,當(dāng)一個主設(shè)備發(fā)送重復(fù)的START或STOP條件,而另一個主設(shè)備仍在發(fā)送數(shù)據(jù)時,則存在一個未定義的條件。換句話說,以下組合會導(dǎo)致一個未定義的條件:

主設(shè)備1發(fā)送重復(fù)的START條件,主設(shè)備2發(fā)送一個數(shù)據(jù)位。

主設(shè)備1發(fā)送STOP條件,主設(shè)備2發(fā)送一個數(shù)據(jù)位。

主設(shè)備1發(fā)送重復(fù)的START條件,主設(shè)備2發(fā)送一個STOP條件。

時鐘拉伸

時鐘拉伸通過保持SCL線LOW暫停事務(wù)。事務(wù)無法繼續(xù),直到該線再次釋放為HIGH。時鐘拉伸是可選的,事實上,大多數(shù)從設(shè)備不包括SCL驅(qū)動程序,因此它們無法拉伸時鐘。

在字節(jié)級,設(shè)備可能能夠以較快的速度接收字節(jié)數(shù)據(jù),但需要更多的時間來存儲接收到的字節(jié)或準備傳輸另一個字節(jié)。從設(shè)備可以在接收和確認一個字節(jié)后保持SCL線LOW,以迫使主設(shè)備進入等待狀態(tài),直到從設(shè)備準備好在一種握手過程類型中進行下一個字節(jié)傳輸(見圖7)。

在位級,設(shè)備如微控制器,具有或不具有I2C總線有限的硬件,可以通過延長每個時鐘LOW周期來減慢總線時鐘。任何主設(shè)備的速度都適應(yīng)于該設(shè)備的內(nèi)部運行速率。

從地址和R/W位

數(shù)據(jù)傳輸遵循圖9所示的格式。在START條件(S)之后,發(fā)送一個從地址。這個地址是7位長,后面跟著第八位,這是一個數(shù)據(jù)方向位(R/W)——“0”表示傳輸(WRITE),“1”表示數(shù)據(jù)請求(READ)(參見圖10)。數(shù)據(jù)傳輸總是由master生成的STOP條件§終止。然而,如果master仍然希望在總線上通信,它可以生成一個重復(fù)的START條件(Sr)并在沒有首先生成STOP條件的情況下尋址另一個從設(shè)備。在這樣的傳輸中,各種讀/寫格式的組合是可能的。

wKgZomb5DfCAeXIPAAC1ak5pDCE120.jpg

wKgaomb5DfGATYHXAABDmXWHKTE671.jpg

10位尋址

10位尋址擴展了可能的地址數(shù)。具有7位和10位地址的設(shè)備可以連接到同一個I2C總線,并且7位和10位尋址都可以在所有總線速度模式下使用。目前,10位尋址還沒有被廣泛使用。 10位從屬地址是由一個START條件(S)或重復(fù)的START條件(Sr)之后的前兩個字節(jié)組成的。 第一個字節(jié)的前7位是組合1111 0XX,其中最后兩個位(XX)是10位地址的兩個最有效位(MSB);第一個字節(jié)的第八位是R/W位,它決定了消息的方向。 雖然有8個可能的保留地址位1111 XXX的組合, 但只有四個組合1111 0XX用于10位尋址。其余四個組合1111 1XX被保留用于未來的I2C總線增強。

所有先前描述的7位尋址的讀/寫格式組合都可能用10位尋址。這里詳細介紹兩種格式:

主發(fā)送器用一個10位從屬地址向從屬接收器發(fā)送。 傳輸方向不變(見圖14)。當(dāng)一個10位地址跟隨一個START條件時,每個從屬比較從屬地址第一個字節(jié)的前7位(1111 0XX)與自己的地址,并測試第八位(R/W方向位)是否為0。可能有多個設(shè)備找到一個匹配并產(chǎn)生一個確認(A1)。所有找到匹配的從屬比較從屬地址第二個字節(jié)的八位(XXXX XXXX)與自己的地址,但只有一個從屬找到一個匹配并產(chǎn)生一個確認(A2)。匹配的從屬仍然由主尋址,直到它接收到一個STOP條件§或重復(fù)的START條件(Sr),后面跟著一個不同的從屬地址。

主接收器用一個10位從屬地址讀取從屬發(fā)送器。 傳輸方向在第二個R/W位之后改變(圖15)。直到并包括確認位A2,過程與前面描述的用于一個從屬發(fā)送器的程序相同。主發(fā)送器尋址從接收器。在重復(fù)的START條件(Sr)之后,匹配的從設(shè)備記住它之前被尋址過。這個從設(shè)備然后檢查Sr之后的從地址的第一個字節(jié)的前7位是否與它們在START條件(S)之后是相同的,并測試第八位(R/W)是否為1。 如果有匹配,從設(shè)備認為它被作為一個發(fā)送器尋址,并產(chǎn)生確認A3。從發(fā)送器保持尋址狀態(tài),直到它接收到一個STOP條件§或接收到另一個重復(fù)的START條件(Sr)后跟隨一個不同的從地址。在重復(fù)的START條件(Sr)之后,所有其他從設(shè)備也將比較從地址(1111 0XX)的第一個字節(jié)的前7位與它們自己的地址,并測試第八位(R/W)。 然而,它們中沒有一個被尋址,因為R/W=1(10位設(shè)備),或者1111 0XX從地址(7位設(shè)備)不匹配。

wKgZomb5DfOARmRfAAD3pHVlVTA061.jpg

具有10位尋址的從設(shè)備對“通用調(diào)用”的反應(yīng)與具有7位尋址的從設(shè)備相同。硬件主設(shè)備可以在“通用調(diào)用”后傳輸其10位地址。在這種情況下,“通用調(diào)用”地址字節(jié)后面跟著兩個連續(xù)的字節(jié),其中包含主發(fā)送器的10位地址。格式如圖15所示,第一個數(shù)據(jù)字節(jié)包含主地址的最低有效位8位。

開始字節(jié)0000 0001 (01h)可以以與7位地址相同的方式出現(xiàn)在10位地址之前。

通用調(diào)用地址

通用調(diào)用地址用于同時尋址連接到I2C總線的每個設(shè)備。然而,如果一個設(shè)備不需要通用調(diào)用結(jié)構(gòu)中提供的任何數(shù)據(jù),它可以通過不發(fā)出確認來忽略這個地址。如果一個設(shè)備確實需要來自通用調(diào)用地址的數(shù)據(jù),它會確認這個地址并表現(xiàn)為從接收器。如果一個或多個設(shè)備響應(yīng),主設(shè)備實際上不知道有多少設(shè)備確認。第二個字節(jié)和后續(xù)字節(jié)被每一個能夠處理此數(shù)據(jù)的從接收器確認。一個不能處理這些字節(jié)之一的從設(shè)備必須通過不確認來忽略它。同樣,如果一個或多個從設(shè)備確認,主設(shè)備將不會看到不確認。通用調(diào)用地址的含義總是在第二個字節(jié)中指定(見圖16)。

wKgaomb5DfSARqXUAABWNtm-mcI577.jpg

有兩種情況需要考慮:

當(dāng)最低有效位B為“0”時。

當(dāng)最低有效位B為“1”時。

當(dāng)位B為“0”時,第二個字節(jié)有以下定義:

0000 0110 (06h):硬件復(fù)位并寫入從地址的可編程部分。在接收到這個2字節(jié)序列時,所有設(shè)計用于響應(yīng)通用調(diào)用地址的設(shè)備都復(fù)位并接收其地址的可編程部分。

必須采取預(yù)防措施,以確保設(shè)備在施加電源電壓后沒有拉下SDA或SCL線,因為這些低電平會阻塞總線。

0000 0100 (04h):硬件寫入從地址的可編程部分。 行為與上述相同,但設(shè)備不復(fù)位。

0000 0000 (00h):此代碼不允許用作第二個字節(jié)。

編程過程的序列在適當(dāng)?shù)脑O(shè)備數(shù)據(jù)表中公布。其余代碼尚未固定,設(shè)備必須忽略它們。

當(dāng)位B為“1”時,2字節(jié)序列是“硬件通用調(diào)用”。這意味著該序列由硬件主設(shè)備傳輸,例如鍵盤掃描器,

它可以被編程來傳輸所需的從地址。由于硬件主設(shè)備事先并不知道消息必須被傳輸?shù)侥膫€設(shè)備,它只能生成這個硬件通用調(diào)用和它自己的地址 — 向系統(tǒng)標識它自己(參見圖 17)。

wKgZomb5DfaAUFOlAABom7aLvKk084.jpg

第二個字節(jié)中剩下的七位包含硬件主機的地址。

這個地址被連接到總線的智能設(shè)備(例如,微控制器)識別,然后接受來自硬件主機的信息。如果硬件主機也可以充當(dāng)從機,從機地址與主機地址相同。

在某些系統(tǒng)中,另一種方法是將硬件主發(fā)射機在系統(tǒng)復(fù)位后設(shè)置為從接收機模式。這樣,系統(tǒng)配置主可以告訴硬件主發(fā)射機(現(xiàn)在處于從接收機模式)必須發(fā)送數(shù)據(jù)到哪個地址(見圖18)。在編程程序之后,硬件主保持在主發(fā)射機模式。

wKgaomb5DfeAPmwYAADlmgrjH84635.jpg

開始字節(jié)

微控制器可以以兩種方式連接到I2C總線。帶有片上硬件I2C總線接口的微控制器可以被編程為只被總線請求中斷。當(dāng)設(shè)備沒有這樣的接口時,它必須通過軟件不斷地監(jiān)視總線。顯然,微控制器監(jiān)視或輪詢總線的次數(shù)越多,它執(zhí)行預(yù)定功能的時間就越少。

因此,在快速的硬件設(shè)備和相對較慢的依賴于軟件輪詢的微控制器之間存在速度差異。

在這種情況下,數(shù)據(jù)傳輸可以先由一個比正常情況長得多的啟動過程(見圖19)。啟動過程包括:

一個開始條件(S)

一個開始字節(jié)(0000 0001)

一個確認時鐘脈沖(ACK)

一個重復(fù)的開始條件(Sr)

wKgZomb5DfiAIDDaAACBoooUrX0686.jpg

在需要總線訪問的主機傳輸了START條件S之后,

傳輸START字節(jié)(0000 0001)。另一個微控制器因此可以以低采樣率對SDA線進行采樣,直到檢測到START字節(jié)中的7個零之一。在檢測到SDA線上的LOW電平后,微控制器可以切換到更高的采樣率,以找到重復(fù)的START條件Sr,然后用于同步。

硬件接收器在接收到重復(fù)的START條件Sr后重置,因此忽略START字節(jié)。

在START字節(jié)后生成一個與確認相關(guān)的時鐘脈沖。這只是為了符合總線上使用的字節(jié)處理格式。不允許任何設(shè)備確認START字節(jié)。

設(shè)備ID

設(shè)備ID字段(見圖20)是一個可選的3字節(jié)只讀(24位)字,提供以下信息:

12位制造商名稱,每個制造商(例如NXP)都是唯一的

9位部件標識,由制造商指定(例如PCA9698)

3位模具修訂,由制造商指定(例如RevX)

wKgaomb5DfmADHUOAABHcrgQkWk261.jpg

設(shè)備ID是只讀的,硬連接在設(shè)備中,可以按如下方式訪問:

START 條件

主控器發(fā)送保留設(shè)備ID I2C總線地址,后面跟著設(shè)置為‘0’的R/W位(寫入):“1111 1000”。

主設(shè)備發(fā)送它必須識別的從設(shè)備的I2C總線從地址。LSB是一個“不關(guān)心”的值。只有一個設(shè)備必須確認這個字節(jié)(具有I2C總線從地址的設(shè)備)。

主設(shè)備發(fā)送一個Re-START條件。

備注:一個STOP條件跟隨一個START條件重置從設(shè)備的狀態(tài)機,設(shè)備ID讀取無法執(zhí)行。同樣,一個STOP條件或一個Re-START條件跟隨訪問另一個從設(shè)備重置從設(shè)備的狀態(tài)機,設(shè)備ID讀取無法執(zhí)行。

主控器發(fā)送保留設(shè)備ID I2C總線地址,后面跟著設(shè)置為‘1’的R/W位:‘1111 1001’。

設(shè)備ID讀取可以完成,從12個制造商位(第一個字節(jié)+第二個字節(jié)的四個MSB)開始,接下來是9個部件識別位(第二個字節(jié)的四個LSB+第三個字節(jié)的五個MSB),然后是三個模具修正位(第三個字節(jié)的三個LSB)。

主設(shè)備通過ACK最后一個字節(jié)結(jié)束讀取序列,從而重置從設(shè)備的狀態(tài)機并允許主設(shè)備發(fā)送STOP條件。

備注:設(shè)備ID的讀取可以通過發(fā)送一個ACK在任何時候停止。

如果主設(shè)備繼續(xù)ACK第三個字節(jié)后的字節(jié),從設(shè)備回滾到第一個字節(jié)并繼續(xù)發(fā)送設(shè)備ID序列,直到檢測到一個ACK。

wKgZomb5DfqAOHHuAAHlq_h-eyI381.jpg

04

I2C傳輸數(shù)據(jù)的格式

4.1 寫操作

流程如下:

主芯片要發(fā)出一個start信號

然后發(fā)出一個設(shè)備地址(用來確定是往哪一個芯片寫數(shù)據(jù)),方向(讀/寫,0表示寫,1表示讀)

從設(shè)備回應(yīng)(用來確定這個設(shè)備是否存在),然后就可以傳輸數(shù)據(jù)

主設(shè)備發(fā)送一個字節(jié)數(shù)據(jù)給從設(shè)備,并等待回應(yīng)

每傳輸一字節(jié)數(shù)據(jù),接收方要有一個回應(yīng)信號(確定數(shù)據(jù)是否接受完成),然后再傳輸下一個數(shù)據(jù)。

數(shù)據(jù)發(fā)送完之后,主芯片就會發(fā)送一個停止信號。

下圖:白色背景表示"主→從",灰色背景表示"從→主"

wKgaomb5DfuAcLjXAAA3IJI5Bww766.jpg

4.2 讀操作

流程如下:

主芯片要發(fā)出一個start信號

然后發(fā)出一個設(shè)備地址(用來確定是往哪一個芯片寫數(shù)據(jù)),方向(讀/寫,0表示寫,1表示讀)

從設(shè)備回應(yīng)(用來確定這個設(shè)備是否存在),然后就可以傳輸數(shù)據(jù)

從設(shè)備發(fā)送一個字節(jié)數(shù)據(jù)給主設(shè)備,并等待回應(yīng)

每傳輸一字節(jié)數(shù)據(jù),接收方要有一個回應(yīng)信號(確定數(shù)據(jù)是否接受完成),然后再傳輸下一個數(shù)據(jù)。

數(shù)據(jù)發(fā)送完之后,主芯片就會發(fā)送一個停止信號。

下圖:白色背景表示"主→從",灰色背景表示"從→主"

wKgaomb5DfyATCT-AABEW-nYQ-w667.jpg

4.3 I2C信號

I2C協(xié)議中數(shù)據(jù)傳輸?shù)膯挝皇亲止?jié),也就是8位。但是要用到9個時鐘:前面8個時鐘用來傳輸8數(shù)據(jù),第9個時鐘用來傳輸回應(yīng)信號。傳輸時,先傳輸最高位(MSB)。

開始信號(S):SCL為高電平時,SDA山高電平向低電平跳變,開始傳送數(shù)據(jù)。

結(jié)束信號(P):SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。

響應(yīng)信號(ACK):接收器在接收到8位數(shù)據(jù)后,在第9個時鐘周期,拉低SDA

SDA上傳輸?shù)臄?shù)據(jù)必須在SCL為高電平期間保持穩(wěn)定,SDA上的數(shù)據(jù)只能在SCL為低電平期間變化

I2C協(xié)議信號如下:

wKgZomb5Df2AcpzLAAHpqefVT5Y635.jpg

4.4 協(xié)議細節(jié)

如何在SDA上實現(xiàn)雙向傳輸?

主芯片通過一根SDA線既可以把數(shù)據(jù)發(fā)給從設(shè)備,也可以從SDA上讀取數(shù)據(jù),連接SDA線的引腳里面必然有兩個引腳(發(fā)送引腳/接受引腳)。

主、從設(shè)備都可以通過SDA發(fā)送數(shù)據(jù),肯定不能同時發(fā)送數(shù)據(jù),怎么錯開時間?

在9個時鐘里,

前8個時鐘由主設(shè)備發(fā)送數(shù)據(jù)的話,第9個時鐘就由從設(shè)備發(fā)送數(shù)據(jù);

前8個時鐘由從設(shè)備發(fā)送數(shù)據(jù)的話,第9個時鐘就由主設(shè)備發(fā)送數(shù)據(jù)。

雙方設(shè)備中,某個設(shè)備發(fā)送數(shù)據(jù)時,另一方怎樣才能不影響SDA上的數(shù)據(jù)?

設(shè)備的SDA中有一個三極管,使用開極/開漏電路(三極管是開極,CMOS管是開漏,作用一樣),如下圖:

wKgaomb5Df2AIfNOAAA960yPjII606.jpg

真值表如下:

wKgZomb5Df-AMV79AAAirsZ-6QI111.jpg

從真值表和電路圖我們可以知道:

當(dāng)某一個芯片不想影響SDA線時,那就不驅(qū)動這個三極管

想讓SDA輸出高電平,雙方都不驅(qū)動三極管(SDA通過上拉電阻變?yōu)楦唠娖?

想讓SDA輸出低電平,就驅(qū)動三極管

4.5 示例:主設(shè)備發(fā)送(8bit)給從設(shè)備

從下面的例子可以看看數(shù)據(jù)是怎么傳的(實現(xiàn)雙向傳輸)。

舉例:主設(shè)備發(fā)送(8bit)給從設(shè)備

前8個clk

從設(shè)備不要影響SDA,從設(shè)備不驅(qū)動三極管

主設(shè)備決定數(shù)據(jù),主設(shè)備要發(fā)送1時不驅(qū)動三極管,要發(fā)送0時驅(qū)動三極管

第9個clk,由從設(shè)備決定數(shù)據(jù)

主設(shè)備不驅(qū)動三極管

從設(shè)備決定數(shù)據(jù),要發(fā)出回應(yīng)信號的話,就驅(qū)動三極管讓SDA變?yōu)?

從這里也可以知道ACK信號是低電平

從上面的例子,就可以知道怎樣在一條線上實現(xiàn)雙向傳輸,這就是SDA上要使用上拉電阻的原因。

4.6 為何SCL也要使用上拉電阻?

在第9個時鐘之后,如果有某一方需要更多的時間來處理數(shù)據(jù),它可以一直驅(qū)動三極管把SCL拉低。

當(dāng)SCL為低電平時候,大家都不應(yīng)該使用IIC總線,只有當(dāng)SCL從低電平變?yōu)楦唠娖降臅r候,IIC總線才能被使用。

當(dāng)它就緒后,就可以不再驅(qū)動三極管,這是上拉電阻把SCL變?yōu)楦唠娖剑渌O(shè)備就可以繼續(xù)使用I2C總線了。

對于IIC協(xié)議它只能規(guī)定怎么傳輸數(shù)據(jù),數(shù)據(jù)是什么含義由從設(shè)備決定。

05

I2C通信的高級應(yīng)用

在嵌入式系統(tǒng)設(shè)計中,I2C應(yīng)用廣泛,如:

5.1 傳感器網(wǎng)絡(luò)

在多傳感器系統(tǒng)中,I2C用于讀取各種環(huán)境參數(shù),如溫度、濕度、光照強度等。這些數(shù)據(jù)可以被用于自動化控制系統(tǒng)或數(shù)據(jù)監(jiān)測。

5.2 多設(shè)備控制

在復(fù)雜的嵌入式系統(tǒng)中,如機器人無人機,I2C用于控制和監(jiān)測多個執(zhí)行器和傳感器,實現(xiàn)精確的運動控制和環(huán)境反饋。

5.3 嵌入式通信網(wǎng)絡(luò)

I2C也常用于建立微控制器和各種外圍設(shè)備(如顯示屏、存儲設(shè)備等)之間的通信網(wǎng)絡(luò)。

本文章源自奇跡物聯(lián)開源的物聯(lián)網(wǎng)應(yīng)用知識庫Cellular IoT Wiki,更多技術(shù)干貨歡迎關(guān)注收藏Wiki:Cellular IoT Wiki 知識庫(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)

歡迎同學(xué)們走進AmazIOT知識庫的世界!

這里是為物聯(lián)網(wǎng)人構(gòu)建的技術(shù)應(yīng)用百科,以便幫助你更快更簡單的開發(fā)物聯(lián)網(wǎng)產(chǎn)品。

Cellular IoT Wiki初心:

在我們長期投身于蜂窩物聯(lián)網(wǎng) ODM/OEM 解決方案的實踐過程中,一直被物聯(lián)網(wǎng)技術(shù)碎片化與產(chǎn)業(yè)資源碎片化的問題所困擾。從產(chǎn)品定義、芯片選型,到軟硬件研發(fā)和測試,物聯(lián)網(wǎng)技術(shù)的碎片化以及產(chǎn)業(yè)資源的碎片化,始終對團隊的產(chǎn)品開發(fā)交付質(zhì)量和效率形成制約。為了減少因物聯(lián)網(wǎng)碎片化而帶來的重復(fù)開發(fā)工作,我們著手對物聯(lián)網(wǎng)開發(fā)中高頻應(yīng)用的技術(shù)知識進行沉淀管理,并基于 Bloom OS 搭建了不同平臺的 RTOS 應(yīng)用生態(tài)。后來我們發(fā)現(xiàn),很多物聯(lián)網(wǎng)產(chǎn)品開發(fā)團隊都面臨著相似的困擾,于是,我們決定向全體物聯(lián)網(wǎng)行業(yè)開發(fā)者開放奇跡物聯(lián)內(nèi)部沉淀的應(yīng)用技術(shù)知識庫 Wiki,期望能為更多物聯(lián)網(wǎng)產(chǎn)品開發(fā)者減輕一些重復(fù)造輪子的負擔(dān)。

Cellular IoT Wiki沉淀的技術(shù)內(nèi)容方向如下:

wKgaombqoM2AYL2RAAQrZ8e-uz8392.jpg

奇跡物聯(lián)的業(yè)務(wù)服務(wù)范圍:基于自研的NB-IoT、Cat1、Cat4等物聯(lián)網(wǎng)模組,為客戶物聯(lián)網(wǎng)ODM/OEM解決方案服務(wù)。我們的研發(fā)技術(shù)中心在石家莊,PCBA生產(chǎn)基地分布在深圳、石家莊、北京三個工廠,滿足不同區(qū)域&不同量產(chǎn)規(guī)模&不同產(chǎn)品開發(fā)階段的生產(chǎn)制造任務(wù)。跟傳統(tǒng)PCBA工廠最大的區(qū)別是我們只服務(wù)物聯(lián)網(wǎng)行業(yè)客戶。

連接我們,和10000+物聯(lián)網(wǎng)開發(fā)者一起降低技術(shù)和成本門檻

讓蜂窩物聯(lián)網(wǎng)應(yīng)用更簡單~~

哈哈你終于滑到最重要的模塊了,

千萬不!要!劃!走!忍住沖動!~

歡迎加入飛書“開源技術(shù)交流群”,隨時找到我們哦~

點擊鏈接如何加入奇跡物聯(lián)技術(shù)話題群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以獲取加入技術(shù)話題群攻略

Hey 物聯(lián)網(wǎng)從業(yè)者,

你是否有了解過奇跡物聯(lián)的官方公眾號“eSIM物聯(lián)工場”呢?

這里是奇跡物聯(lián)的物聯(lián)網(wǎng)應(yīng)用技術(shù)開源wiki主陣地,歡迎關(guān)注公眾號,不迷路~

及時獲得最新物聯(lián)網(wǎng)應(yīng)用技術(shù)沉淀發(fā)布

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2930

    文章

    46230

    瀏覽量

    392301
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2959

    瀏覽量

    89745
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1541

    瀏覽量

    127802
  • 通信總線
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    10031
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動之Linux下的I2C驅(qū)動簡介

    的通信協(xié)議,其中一個設(shè)備作為主設(shè)備控制總線,并與多個從設(shè)備通信。在Linux內(nèi)核I2C驅(qū)動主要由三部分組成:I2C核心、I2C
    發(fā)表于 04-15 10:39

    嵌入式教育科普|I2C接口全面解析

    1、基本概念I2C的全稱是Inter-IntegratedCircuit,譯為集成電路總線,是一種同步、雙向、半雙工的兩線串行接口總線。連接到I2
    的頭像 發(fā)表于 04-11 09:44 ?1652次閱讀
    <b class='flag-5'>嵌入式</b>教育科普|<b class='flag-5'>I2C</b>接口全面解析

    是德DSOX4034A示波器I2C總線信號分析

    在現(xiàn)代電子設(shè)計與調(diào)試I2C(Inter-Integrated Circuit)總線作為一種廣泛應(yīng)用的串行通信協(xié)議,因其簡單性、靈活性和低功耗特性,成為許多嵌入式系統(tǒng)和電子設(shè)備
    的頭像 發(fā)表于 03-19 13:47 ?416次閱讀
    是德DSOX4034A示波器<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>信號分析

    I2C總線復(fù)用

    帝晶智慧屏I2C總線復(fù)用
    的頭像 發(fā)表于 03-11 17:20 ?1404次閱讀

    I2C總線通信原理 如何設(shè)計I2C總線電路

    I2C總線通信原理 I2C(Inter-Integrated Circuit)總線是一種用于集成電路之間進行通信的串行通信協(xié)議。它最早由飛利浦公司(現(xiàn)被恩智浦電子收購)于1982年推出
    的頭像 發(fā)表于 01-31 15:01 ?1128次閱讀

    I2C總線聯(lián)網(wǎng)的重要性

    聯(lián)網(wǎng)的快速發(fā)展I2C總線作為一種串行通信協(xié)議,扮演著至關(guān)重要的角色。 I2C總線簡介
    的頭像 發(fā)表于 01-17 16:24 ?608次閱讀

    I2C總線的優(yōu)缺點分析

    I2C總線作為一種廣泛使用的串行通信協(xié)議,以其簡單性和高效性在嵌入式系統(tǒng)占據(jù)著重要地位。 I2C總線
    的頭像 發(fā)表于 01-17 15:50 ?1145次閱讀

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

    。以下是I2C總線數(shù)據(jù)包結(jié)構(gòu)的詳解: 一、I2C總線數(shù)據(jù)包的基本組成 I2C
    的頭像 發(fā)表于 01-17 15:46 ?801次閱讀

    I2C總線的工作模式介紹

    在現(xiàn)代電子系統(tǒng)I2C總線作為一種多主機、多從機的串行通信協(xié)議,扮演著至關(guān)重要的角色。它允許多個設(shè)備共享同一總線,進行數(shù)據(jù)傳輸,從而簡化了系統(tǒng)設(shè)計并降低了成本。
    的頭像 發(fā)表于 01-17 15:32 ?979次閱讀

    I2C總線嵌入式系統(tǒng)的應(yīng)用

    在現(xiàn)代電子設(shè)計嵌入式系統(tǒng)扮演著越來越重要的角色。這些系統(tǒng)通常需要與多種外圍設(shè)備進行通信,以實現(xiàn)數(shù)據(jù)的輸入和輸出。I2C總線作為一種多主機、多從機的串行通信協(xié)議,因其簡單、靈活和高效
    的頭像 發(fā)表于 01-17 15:30 ?715次閱讀

    I2C總線協(xié)議詳細解析

    總線以其簡單性、靈活性和低功耗而聞名,廣泛應(yīng)用于嵌入式系統(tǒng)2. I2C總線的基本組成
    的頭像 發(fā)表于 01-17 15:22 ?896次閱讀

    I2C總線故障排除技巧

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個設(shè)備在兩條線上(數(shù)據(jù)線SDA和時鐘線SCL)進行通信。由于其簡單性和靈活性,I2C總線嵌入式
    的頭像 發(fā)表于 01-17 15:20 ?2319次閱讀

    I2C總線應(yīng)用實例分析

    在現(xiàn)代電子系統(tǒng)I2C總線因其簡單、靈活和高效的特點而被廣泛應(yīng)用于各種設(shè)備之間的通信。 I2C總線概述
    的頭像 發(fā)表于 01-17 15:09 ?742次閱讀

    詳解I2C總線與SPI總線的區(qū)別

    I2C(Inter-Integrated Circuit)表示集成電路互連,是一種用于線路板內(nèi)部芯片之間通信的總線
    的頭像 發(fā)表于 10-16 15:16 ?1.5w次閱讀
    <b class='flag-5'>詳解</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>與SPI<b class='flag-5'>總線</b>的區(qū)別

    嵌入式常用總線有哪些

    嵌入式系統(tǒng)中常用的總線種類繁多,它們各自具有不同的特點和應(yīng)用場景。以下將詳細介紹幾種嵌入式開發(fā)中常用的總線,包括UART、I2C、SPI、R
    的頭像 發(fā)表于 09-10 11:34 ?1418次閱讀
    主站蜘蛛池模板: 美女视频很黄很a免费国产 美女视频很黄很暴黄是免费的 | 天天视频在线观看免费 | 二级黄绝大片中国免费视频0 | 午夜人成 | 色老头·com 色老头成人免费综合视频 色老头久久久久 | 欧洲不卡一卡2卡三卡4卡网站 | 性午夜影院 | 热re99久久国产精品 | 天天拍天天干天天操 | 511韩国理论片在线观看 | 爆操极品美女 | 亚洲欧洲日韩综合 | 午夜一级成人 | 国产午夜毛片v一区二区三区 | 天天摸天天爽天天澡视频 | 色人岛 | 午夜在线观看免费 | 深爱激情小说网 | 色多多福利网站 | 香蕉视频色版在线观看 | 特黄特色大片免费播放路01 | 夜夜操操 | 在线观看免费精品国产 | 最近2018中文字幕免费看在线 | 岛国午夜 | 四虎884| 天天拍天天干天天操 | 日本高清www | 国产女同在线观看 | 福利视频免费观看 | 午夜国产大片免费观看 | 香港经典a毛片免费观看爽爽影院 | 天天爽天天色 | 麻豆色哟哟网站 | 四虎影院中文字幕 | 拍拍拍拍拍拍拍无挡大全免费 | 国产又粗又大又爽又免费 | 4438x成人网最大色成网站 | 女人被狂躁视频免费网站 | 400部大量精品情侣网站 | 免费网站在线视频美女被 |