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

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

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

i2c詳解+送apb_i2c工程+送中英文協(xié)議

芯片驗(yàn)證日記 ? 來源: 芯片驗(yàn)證日記 ? 作者: 芯片驗(yàn)證日記 ? 2023-01-02 01:19 ? 次閱讀

0.本文的內(nèi)容目錄

本文一共接近一萬一千字,為了幫助大家閱讀,我把本文的內(nèi)容目錄截圖如下,大家根據(jù)需要閱讀,或者一次閱讀不完,下次再讀的時候方便查閱。

poYBAGOvjISATfNGAAJGZb8uFR4915.pngpYYBAGOvjK2AOZHwAATPFjp7fv8803.png

1.I2C概述

I2C是Inter-Integrated Circuit(內(nèi)部集成電路)的簡稱,是一種通用的總線協(xié)議。它是由Philips(飛利浦)公司,現(xiàn)NXP(恩智浦)半導(dǎo)體開發(fā)的一種簡單的雙向兩線總線協(xié)議標(biāo)準(zhǔn)。

I2C 總線是一種非常流行的串行總線,用于單個或多個主機(jī)與單個或多個從機(jī)之間的通信。下圖Figure 1 所示為嵌入式系統(tǒng)的典型 I2C 總線,其中使用多個從機(jī)。微控制器代表I2C 的主機(jī),控制IO擴(kuò)展器、各種傳感器、EEPROM、ADC/DAC等。所有這些都由主機(jī)的2個引腳SCL和SDA控制。

poYBAGOvjN2ARgTLAAHZe3FoUxw786.png

2.I2C的電氣特性

I2C使用漏極開路/集電極開路(open-drain/open-collector),在同一條線路上帶有輸入緩沖器(input buffer),允許將單條數(shù)據(jù)線用于雙向數(shù)據(jù)流。

2.1SDA和SCL總線要接上拉電阻電流源

SDA和SCL都是雙向線路,將所有設(shè)備的SDA線全部連在一起構(gòu)成SDA總線,將所有設(shè)備的SCL線全部連在一起構(gòu)成SCL總線,工作地線GND共用,每個設(shè)備都可以通過SDA和SCL線,向外傳輸信號(高低電平)或者從外面接收信號(高低電平),這些互連設(shè)備中至少需要一個主機(jī)。

SDA和SCL信號線上,必須通過電流源或上拉電阻連接到正電源電壓。因?yàn)镮2C設(shè)備內(nèi)部輸出電路已設(shè)計(jì)成開漏(OD)輸出或開集電極(OC)輸出(如圖1-14),所以要在總線上外接上拉電阻或電流源,用來給總線上提供高電平。

pYYBAGOvjSCAUWeOAAQMiXiaQho391.png

2.2為什么I2C接口內(nèi)部是OD(OC)輸出

I2C設(shè)備內(nèi)部為什么要設(shè)計(jì)成OD或OC結(jié)構(gòu),而不設(shè)計(jì)成推挽結(jié)構(gòu)呢?其目的是防止總線上進(jìn)行“線與”時發(fā)生短路現(xiàn)象造成設(shè)備過熱或損壞。因?yàn)槿绻O(shè)計(jì)成推挽結(jié)構(gòu)(如圖1-15),在SDA或SCL總線上,同一時刻某些設(shè)備輸出高電平,某些設(shè)備輸出低電平時,連接電源的上拉開關(guān)管和連接地的下拉開關(guān)管之間就會短路,導(dǎo)致開關(guān)功耗過大(如有限流保護(hù))或者燒壞器件。對于單個主機(jī)(一主多從)應(yīng)用,如果從機(jī)也沒有延長時鐘的功能,那么控制器(主機(jī))的SCL輸出可以設(shè)計(jì)為推挽驅(qū)動輸出。

pYYBAGOvjXOATA2bAAMar8tk6is650.png

2.3為什么I2C接口內(nèi)部不集成上拉電阻

為什么不采用圖1-15那樣,把外部的上拉電阻集成到設(shè)備(芯片)內(nèi)部去呢?上拉電阻集成到芯片內(nèi)部,導(dǎo)致芯片結(jié)構(gòu)復(fù)雜、芯片功耗增大以及無法兼容不同電源電壓的設(shè)備(如下圖所示)。

poYBAGOvjaqAMnrFAAWTCHlSlVc895.png

芯片內(nèi)部不集成上拉電阻,共用外部的上拉電阻,其作用有三:①簡化芯片內(nèi)部電路;②減小芯片內(nèi)部功耗;③不同電源供電的設(shè)備可以做到高電平信號兼容(如下圖所示)。

poYBAGOvjd6AJHarAARWaxmFStU914.png

2.4使用漏極開路(open-drain)進(jìn)行雙向通信

漏極開路是指一種輸出類型,它可以將總線拉低到某個電壓(在大多數(shù)情況下為接地),或者“釋放”總線,讓它被上拉電阻拉起。如果總線被主機(jī)或從機(jī)釋放,線路上的上拉電阻 (RPU) 負(fù)責(zé)將總線電壓拉至電源軌(power rail:參考下面的注釋[1])。由于沒有任何設(shè)備可以在線路上強(qiáng)制設(shè)置高電平,這意味著總線永遠(yuǎn)不會遇到,一個設(shè)備可能嘗試發(fā)送高電平,而另一個設(shè)備發(fā)送低電平,從而導(dǎo)致短路(電源軌對地)的通信問題。I2C 要求,如果多主機(jī)環(huán)境中的一個主機(jī)準(zhǔn)備傳輸高電平,但看到線路為低電平(另一個設(shè)備正在將其拉低),這時由于另一個設(shè)備正在使用總線,因而將會停止通信。推挽式(push-pull,參考下面注釋)接口不允許這種類型的自由,這是 I2C 的優(yōu)勢。

注:

[1]power rail, 電源軌是指上拉電阻所接入的電源電壓VCC,但由于上拉電阻(kohm)與FET關(guān)斷時候的超大阻抗(Mohm)分壓,導(dǎo)致總線上的電壓會略低于VCC。但是由于分壓電阻差距過大,一般是認(rèn)為相等的。

[2]推挽輸出的是由兩個互補(bǔ)的三極管或者M(jìn)OS管組成,始終保持一個導(dǎo)通,另一個截止的狀態(tài),假如一個主機(jī)A使用推挽輸出高電平,另一個主機(jī)B使用推挽輸出低電平,這時候電流將通過VCC流過主機(jī)A的上管,主機(jī)B的下管到地,總線的電壓由兩個管子的導(dǎo)通電阻進(jìn)行分壓,如果管子一致性較好,那么總線上的約為 VCC的一半。

[3]推挽輸出的特性決定了其不能用于多主機(jī)的環(huán)境中,但是由于推挽輸出的能力比漏極開路輸出的能力強(qiáng)太多(因?yàn)闆]有上拉電阻的限流作用),在I2C 的超快速模式(5Mbit/s)中要求必須使用推挽輸出,才能滿足信號的時序要求,在這個模式下,只能沿一個方向傳輸數(shù)據(jù),用于驅(qū)動 LED 控制器和其他不需要反饋的設(shè)備時,它最有用。

[4]漏極開路輸出允許線與(與門)的邏輯功能,導(dǎo)致某個設(shè)備輸出為低時,線路就是低電平,而輸出高電平時,可以通過輸入緩沖器來判斷總線的電平,就不需要再修改IO口的輸入輸出模式了,對于代碼編寫軟件模擬I2C 來說是極其方便低電平,而輸出高電平時,可以通過輸入緩沖器來判斷總線的電平,就不需要再修改IO口的輸入輸出模式了,對于代碼編寫軟件模擬I2C 來說是極其方便的。

pYYBAGOvjpSAZbhAAAHQB0zOrvo854.png

Figure 2是SDA/SCL線上的主機(jī)或從機(jī)設(shè)備的內(nèi)部結(jié)構(gòu)簡化圖,它包含了用于讀取輸入數(shù)據(jù)的緩沖器和用于傳輸數(shù)據(jù)的下拉FET。設(shè)備只能將總線拉低(提供對地短路)或釋放總線(對地高阻抗),并允許上拉電阻升高電壓。這是在處理I2C設(shè)備時要實(shí)現(xiàn)的一個重要概念,沒有設(shè)備可以將總線一直保持在高位。這一特性允許進(jìn)行雙向通信。

2.1.1 漏極開路拉低

如上所述,漏極開路設(shè)置可能只會將總線拉低,或“釋放”總線并讓電阻將其拉高。Figure 3顯示了將總線拉低時的電流流動。想要傳輸?shù)碗娖降倪壿媽⒓せ钕吕璅ET,這將提供對地短路,將線路拉低。

pYYBAGOvjsSALK8dAAHPSvPrh5g073.png

2.1.2 漏極開路釋放總線

當(dāng)從設(shè)備或主設(shè)備希望傳輸邏輯高電平時,它只能通過關(guān)閉下拉FET來釋放總線。這使總線浮動,上拉電阻將電壓拉至電壓軌,這將被解釋為高。圖4顯示了通過上拉電阻將總線拉高的電流流動。

poYBAGOvjxCAV7wMAAHmNGr7HJE611.png

3.I2C接口

3.1接口概述

I2C總線很受歡迎,因?yàn)樗褂煤唵危梢杂卸鄠€主機(jī)和多個從機(jī),并且只需要兩條帶上拉電阻的導(dǎo)線就可以連接幾乎無限數(shù)量的I2C設(shè)備。I2C可以使用具有通用I/O引腳的更慢的微控制器,因?yàn)槌俗x取和寫入字節(jié)的功能外,它們只需要生成正確的啟動和停止條件。

每個從機(jī)都有一個唯一的地址。傳輸是串行的,它被分成8位數(shù)據(jù)包。所有這些簡單的要求使得即使使用沒有特殊I2C硬件控制器的廉價微控制器,實(shí)現(xiàn)I2C接口也非常簡單。您只需要2個空閑的I/O引腳和幾個簡單的i2C例程就可以發(fā)送和接收命令。

I2C總線規(guī)范描述了雙向數(shù)據(jù)傳輸?shù)奈宸N操作速度類別:

poYBAGOvj1KAU7puAAXHOH68iFI415.png

基本的I2C通信使用8位或字節(jié)的傳輸。每個I2C從設(shè)備都有一個7位地址,需要在總線上唯一。還有一些設(shè)備具有規(guī)范允許的10位地址。7位地址表示第7位至第1位,而第0位用于向設(shè)備發(fā)出讀寫信號。如果位0(地址字節(jié)中)設(shè)置為1,則主設(shè)備將從從I2C設(shè)備讀取。主設(shè)備不需要地址,因?yàn)樗蓵r鐘(通過SCL)并尋址各個I2C從設(shè)備。在正常狀態(tài)下,兩條線路(SCL和SDA)均為高電平。通信由主設(shè)備發(fā)起。

兩個信號(SCL和SDA)都是雙向的。它們通過電阻器連接到正電源電壓。這意味著當(dāng)總線空閑時,兩條線路都很高??偩€上的所有設(shè)備必須具有集電極開路或漏極開路引腳。激活線路意味著將其下拉(線與)。單個總線上的設(shè)備數(shù)量幾乎是無限的。唯一的要求是總線電容不超過400 pF。由于邏輯1電平取決于電源電壓,因此沒有標(biāo)準(zhǔn)總線電壓。

大多數(shù)I2C設(shè)備支持重復(fù)起始條件。這意味著在通信以停止條件結(jié)束之前,主機(jī)可以用地址字節(jié)重復(fù)開始條件,并將模式從寫入更改為讀取。

3.2 I2C術(shù)語

【發(fā)送器】–這是將數(shù)據(jù)傳輸?shù)娇偩€的設(shè)備

接收器】–這是從總線接收數(shù)據(jù)的設(shè)備

【主機(jī)】–這是生成時鐘、啟動通信、發(fā)送I2C命令和停止通信的設(shè)備

【從機(jī)】–這是偵聽總線并由主設(shè)備尋址的設(shè)備

【多主機(jī)】–I2C可以有多個主機(jī),每個主機(jī)都可以發(fā)送命令

【仲裁】–當(dāng)更多主機(jī)需要使用總線時,確定總線上哪些主機(jī)可以使用仲裁的過程

【同步】–同步兩個或多個設(shè)備的時鐘的過程

3.3 常規(guī)的I2C操作

I2C總線是一個標(biāo)準(zhǔn)的雙向接口,它使用一個控制器(稱為主控制器)與從設(shè)備通信。從設(shè)備不能傳輸數(shù)據(jù),除非它已被主設(shè)備尋址。I2C總線上的每個設(shè)備都有一個特定的設(shè)備地址,以區(qū)分同一I2C總線中的其他設(shè)備。許多從設(shè)備在啟動時需要配置以設(shè)置設(shè)備的行為。這通常在主機(jī)訪問具有唯一寄存器地址的從機(jī)內(nèi)部寄存器映射時完成。設(shè)備可以具有存儲數(shù)據(jù)的一個或多個寄存器,

物理I2C接口由串行時鐘(SCL)和串行數(shù)據(jù)(SDA)線組成。SDA和SCL線必須通過上拉電阻器連接到VCC。上拉電阻器的大小由I2C線路上的電容量決定。數(shù)據(jù)傳輸只能在總線空閑時啟動。如果在STOP條件后SDA和SCL線都為高電平,則總線被視為空閑。主設(shè)備訪問從設(shè)備的一般程序如下:

1主機(jī)要向從機(jī)發(fā)送數(shù)據(jù):

[1]主機(jī)發(fā)送START條件并尋址從機(jī)(發(fā)送從機(jī)地址);

[2]主機(jī)向接收數(shù)據(jù)的從機(jī)發(fā)送數(shù)據(jù);

[3]主機(jī)在STOP條件下終止傳輸。

2主機(jī)希望接收/讀取從機(jī)數(shù)據(jù):

[1]主機(jī)發(fā)送START條件并尋址從機(jī)(發(fā)送從機(jī)地址);

[2]主機(jī)發(fā)送要訪問的寄存器地址(位于從機(jī)內(nèi))進(jìn)行讀取;

[3]主機(jī)接收從機(jī)過來的數(shù)據(jù);

[4]主機(jī)發(fā)送STOP條件終止傳輸。

3.3.1 開始/停止條件

I2C通信由主機(jī)發(fā)送START條件啟動,并由主機(jī)發(fā)送STOP條件終止。當(dāng)SCL為高時,SDA線上的高到低轉(zhuǎn)換定義了START條件。當(dāng)SCL為高時,SDA線上的低到高轉(zhuǎn)換定義STOP條件。

poYBAGOvj4OAQHUyAAEUYKAIrHs116.png

在啟動條件之后,總線被認(rèn)為是繁忙的,只有在檢測到停止條件之后,才能由另一個主機(jī)使用。在“開始”條件之后,主機(jī)可以生成重復(fù)的“開始”。這相當(dāng)于正常啟動,通常后跟從I2C地址。

具有專用I2C硬件的微控制器可以很容易地檢測總線變化,也可以作為I2C從設(shè)備。然而,如果I2C通信在軟件中實(shí)現(xiàn),則總線信號必須在每個時鐘周期至少采樣兩次,以便檢測必要的變化。

3.3.2 重復(fù)起始條件

重復(fù)起始條件類似于開始條件,用于代替背靠背的先停止后啟動條件。它看起來與START條件相同,但其實(shí)與START條件不同,因?yàn)樗l(fā)生在STOP條件之前(當(dāng)總線不空閑時)。當(dāng)主機(jī)希望啟動新的通信,但不希望在STOP條件下讓總線空閑時,這很有用,這可能會導(dǎo)致主機(jī)失去對另一主機(jī)的總線控制(在多主機(jī)環(huán)境中)。

poYBAGOvj7eAbXLWAAQn9-UY3JY635.png

3.3.3 位傳輸

對于每個時鐘脈沖,傳輸一位數(shù)據(jù)。SDA信號只能在SCL信號為低時發(fā)生變化。當(dāng)時鐘為高時,數(shù)據(jù)應(yīng)該是穩(wěn)定的。

poYBAGOvj_CAFwXVAAGyJhIgHco620.png

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

poYBAGOvkB6AJo_BAAc7YAPeYkY567.png

I2C協(xié)議總線上的數(shù)據(jù)以8位數(shù)據(jù)包(字節(jié))傳輸。對字節(jié)數(shù)沒有限制,但是,每個字節(jié)后面必須跟一個確認(rèn)位ACK。該位指示設(shè)備是否準(zhǔn)備好繼續(xù)下一個字節(jié)。對于包括確認(rèn)位ACK在內(nèi)的所有數(shù)據(jù)位,主機(jī)必須生成時鐘脈沖。如果從設(shè)備未確認(rèn)傳輸,這意味著沒有更多數(shù)據(jù)或設(shè)備尚未準(zhǔn)備好進(jìn)行傳輸。主設(shè)備必須生成停止或重復(fù)啟動條件。

pYYBAGOvkEyAKcV9AAeM7DQLSPk895.png

3.4 數(shù)據(jù)有效性和字節(jié)格式

在SCL的每個時鐘脈沖期間傳送一個數(shù)據(jù)位。SDA線上的一個字節(jié)由八位組成。字節(jié)可以是設(shè)備地址、寄存器地址,也可以是從設(shè)備寫入或讀取的數(shù)據(jù)。

數(shù)據(jù)首先傳輸最高有效位(MSB)。任何數(shù)量的數(shù)據(jù)字節(jié)都可以在START和STOP條件之間從主設(shè)備傳輸?shù)綇脑O(shè)備。SDA線上的數(shù)據(jù)必須在時鐘周期的高相位期間保持穩(wěn)定,因?yàn)镾CL為高時數(shù)據(jù)線的變化解釋為控制命令(START或STOP)。

pYYBAGOvkfyAS5FfAAJodLaZ5Ag023.png

3.5 ACK和NACK

每個數(shù)據(jù)字節(jié)(包括地址字節(jié))后面跟著來自接收器的一個ACK位。ACK位允許接收機(jī)與發(fā)射機(jī)通信,表明字節(jié)已成功接收,并且可以發(fā)送另一個字節(jié)。在接收機(jī)發(fā)送ACK之前,發(fā)射機(jī)必須釋放SDA線路。為了發(fā)送ACK位,接收機(jī)應(yīng)在ACK/NACK相關(guān)時鐘周期的低相位(周期9)期間下拉SDA線,以使SDA線在ACK/ACK相關(guān)時鐘時段的高相位期間穩(wěn)定為低電平。必須考慮設(shè)置和保持時間。當(dāng)SDA線在ACK/NACK相關(guān)時鐘周期(周期9)期間保持高電平時,這被解釋為NACK。有幾個條件導(dǎo)致NACK的產(chǎn)生:

[1]總線上不存在帶有發(fā)送地址的接收器,因此沒有設(shè)備做出應(yīng)答。

[2]接收器無法接收或發(fā)送,因?yàn)樗趫?zhí)行某些實(shí)時功能,并且尚未準(zhǔn)備好與主機(jī)開始通信。

[3]在傳輸過程中,接收器接收到它不理解的數(shù)據(jù)或命令。

[4]在傳輸過程中,接收器無法接收更多的數(shù)據(jù)字節(jié)。

[5]主接收機(jī)完成數(shù)據(jù)讀取,并通過NACK向發(fā)送器發(fā)送傳輸結(jié)束的信號。

poYBAGOvki2AOC2SAAGcf3jup2o489.png

3.6 時鐘同步

在空閑總線時,兩個主機(jī)可以同時啟動傳輸,必須有一種方法來決定由哪一個主機(jī)來控制總線并完成傳輸。這是通過時鐘同步和仲裁兩個步驟來完成的。在一主多從的系統(tǒng)中,不需要時鐘同步和仲裁。

pYYBAGOvkliAbCBAAAEN-wseoao514.png

參考上圖,使用設(shè)備的SCL接口和SCL總線之間的“線與”連接來執(zhí)行時鐘同步。主機(jī)一的SCL接口一旦檢測到SCL總線上由高電平到低電平的轉(zhuǎn)換時,主機(jī)一便拉低自己的SCL,并開始倒計(jì)數(shù)應(yīng)有的SCL低電平保持時間,直到應(yīng)有的低電平時間結(jié)束,便把SCL時鐘拉到高電平狀態(tài)。如果另一個主機(jī)二的SCL時鐘仍然處于低電平周期內(nèi),則主機(jī)一的SCL時鐘由低到高的轉(zhuǎn)換不會改變SCL總線為低電平的狀態(tài),則主機(jī)一的SCL時鐘進(jìn)入高電平等待狀態(tài)。因此,SCL總線被具有最長低電平周期的主機(jī)保持在低電平。

當(dāng)所有相關(guān)的主機(jī)都已完成其低電平周期的計(jì)數(shù)時,SCL時鐘總線被釋放并變?yōu)楦唠娖?。主機(jī)SCL接口和SCL總線的狀態(tài)之間保持一致,都為高電平。所有主機(jī)開始計(jì)算它們的高電平周期。第一個完成高電平周期的主機(jī)再次將SCL線拉低。

這樣,就產(chǎn)生了同步的SCL總線時鐘,其低周期由具有最長時鐘低周期的主機(jī)確定,其高周期由具有最短時鐘高周期的主機(jī)確定。

3.7 時鐘拉伸(Clock stretching)

正如我們前面所說的,主機(jī)決定時鐘速度。然而在某些情況下,I2C從設(shè)備不能與主設(shè)備給出的時鐘速度協(xié)作,需要稍微減速。這是通過一種叫做時鐘拉伸的機(jī)制來完成的。

如果需要降低總線速度,I2C從機(jī)可以保持時鐘。另一方面,主機(jī)需要在將時鐘信號釋放到高狀態(tài)之后讀取時鐘信號,并等待直到線路實(shí)際變高。

在傳輸一個字節(jié)時,從機(jī)可能能夠快速接收數(shù)據(jù)字節(jié),但需要更多時間來存儲接收到的字節(jié)或準(zhǔn)備要傳輸?shù)淖止?jié),如果基于以上原因無法立即進(jìn)行下一個字節(jié)的傳輸時,那么從機(jī)在接收完一個字節(jié)并應(yīng)答后,可以將SCL線(主機(jī)輸出)的低電平繼續(xù)拉低并保持,以強(qiáng)制主機(jī)進(jìn)入等待狀態(tài),直到從機(jī)做好了傳輸下一個字節(jié)的準(zhǔn)備。

時鐘拉伸通過保持 SCL線路低電平來暫停事務(wù)。在該線路再次釋放為高電平之前,事務(wù)無法繼續(xù)。時鐘拉伸是可選的,實(shí)際上,大多數(shù)目標(biāo)設(shè)備都不包含 SCL 驅(qū)動程序,因此它們無法拉伸時鐘。

poYBAGOvkoiAMHa1AAD7V0tlSl0798.png

3.8 總線仲裁

對于I2C總線上的正常數(shù)據(jù)傳輸,只能激活一個主設(shè)備。如果出于某種原因,兩個主機(jī)同時啟動I2C命令,則仲裁程序確定哪個主機(jī)獲勝并可以繼續(xù)執(zhí)行該命令。當(dāng)SCL信號為高時,對SDA信號執(zhí)行仲裁。每個主機(jī)檢查總線上的SDA信號是否對應(yīng)于生成的SDA。如果總線上的SDA信號為低電平,但應(yīng)該為高電平,則該主機(jī)已失去仲裁。失去仲裁的主I2C設(shè)備可以生成SCL脈沖,直到字節(jié)結(jié)束,然后必須釋放總線并進(jìn)入從屬模式。仲裁程序可以繼續(xù),直到所有數(shù)據(jù)被傳輸。這意味著在多主機(jī)系統(tǒng)中,每個I2C主機(jī)必須監(jiān)控I2C總線的沖突并相應(yīng)地采取行動。

仲裁協(xié)議用于多主機(jī)的系統(tǒng)中,單主機(jī)系統(tǒng)不需要仲裁。仲裁程序發(fā)生在主機(jī)之間,從機(jī)不涉及仲裁。只有當(dāng)總線空閑時,主機(jī)才可以啟動傳輸。兩個主機(jī)同時發(fā)起啟動后,總線需要對這兩個主機(jī)進(jìn)行仲裁,以確定最終由哪個主機(jī)控制總線并完成其傳輸。

設(shè)備的SDA接口線每次輸出電平后,會立即回讀SDA總線電平,用來判斷自己的輸出是否與總線一致。SCL線和SDA一樣,也有這種回讀判讀機(jī)制。

仲裁由SCL線和SDA線一起配合來完成的,其分工如下:

SCL線負(fù)責(zé)時鐘同步:兩個主機(jī)在空閑狀態(tài)時,同時發(fā)起啟動,然后各自根據(jù)自己的時序要求拉低SCL總線輸出低電平,釋放SCL總線輸出高電平,根據(jù)前面章節(jié)介紹的SCL時鐘同步機(jī)制實(shí)現(xiàn)時鐘同步。

SDA線負(fù)責(zé)數(shù)據(jù)仲裁:仲裁是在SDA線上一位一位地進(jìn)行的。在每一位傳輸期間,當(dāng)SCL為高電平時,每個主機(jī)各自判斷自己SDA線輸出的電平是否與SDA總線電平一致(回讀判讀機(jī)制),如果某主機(jī)發(fā)現(xiàn)輸出電平和回讀電平不一致,則該主機(jī)仲裁失敗,失去對總線的控制權(quán),隨即關(guān)閉自己SDA輸出驅(qū)動器,另一個主機(jī)贏得仲裁獲取對總線的控制權(quán),繼續(xù)完成它的傳輸事務(wù)。這種仲裁過程可能需要進(jìn)行很多位。


pYYBAGOvkriALXK7AAHKbP23_W4160.png

在仲裁過程中,贏得仲裁的主機(jī)不會丟失任何信息,仲裁失敗的主機(jī)可以繼續(xù)產(chǎn)生時鐘脈沖,直到其仲裁失敗的字節(jié)結(jié)束,并且可以在總線空閑時重新發(fā)起仲裁。

如果一個主機(jī)也具有從機(jī)的功能,并且在尋址階段仲裁失敗,那么獲勝的主機(jī)可能正在嘗試尋址它。因此,失敗的主機(jī)必須立即切換到其從機(jī)模式。根據(jù)連接到總線的主機(jī)數(shù)量,以上的仲裁方式也適合更多主機(jī)的系統(tǒng)。由于對I2C總線的控制完全由參與競爭的主機(jī)發(fā)送的地址和數(shù)據(jù)決定,所以總線上沒有中央控制器,也沒有任何優(yōu)先級順序。

當(dāng)一個主機(jī)發(fā)送重啟或停止信號,而另一個主機(jī)仍在發(fā)送數(shù)據(jù)時,如果仲裁程序仍在進(jìn)行中,則會出現(xiàn)未定義(異常)的狀態(tài)。換句話說,以下組合會導(dǎo)致異常情況:

主機(jī)1發(fā)送重啟信號,主機(jī)2發(fā)送數(shù)據(jù)位(所以重啟前一定要判斷重啟建立時間)。

主機(jī)1發(fā)送停止信號,主機(jī)2發(fā)送數(shù)據(jù)位。

主機(jī)1發(fā)送重啟信號,主機(jī)2發(fā)送停止信號。

3.9 7位從機(jī)地址的讀寫

數(shù)據(jù)傳輸遵循下圖中所示的格式。主機(jī)在啟動后,發(fā)送從機(jī)地址,該地址為7位長度。后面第8位是數(shù)據(jù)傳輸方向位,邏輯“1”代表讀(R),表示接下來的數(shù)據(jù)由從機(jī)發(fā)送給主機(jī),邏輯“0”代表寫(W),表示接下來的數(shù)據(jù)由主機(jī)發(fā)生給從機(jī)。

poYBAGOvkuyAFKaYAAZlezFv_S8817.png

3.9.1 主機(jī)寫從機(jī)

如果主機(jī)僅寫入從機(jī),則數(shù)據(jù)傳輸方向不會改變。

pYYBAGOvkxeAcyxGAAg_vqVfJfo648.png

3.9.2 主機(jī)讀從機(jī)

如果主機(jī)只需要從從機(jī)讀取,那么它只需發(fā)送具有設(shè)置為讀取的R/W位的I2C地址。之后,主機(jī)開始讀取數(shù)據(jù)。

poYBAGOvk0KAWth1AAOwr5C7P2A961.png

3.9.3 混合讀寫(傳輸過程中改變方向)

有時主機(jī)需要寫入一些數(shù)據(jù),然后從從機(jī)讀取。在這種情況下,它必須首先寫入從機(jī),改變數(shù)據(jù)傳輸方向,然后讀取設(shè)備。這意味著發(fā)送R/W位設(shè)置為寫的I2C地址,然后發(fā)送一些附加數(shù)據(jù),如寄存器地址。在寫入完成之后,主設(shè)備生成重復(fù)的開始條件,并發(fā)送具有設(shè)置為讀取的R/W位的I2C地址。此后,數(shù)據(jù)傳輸方向改變,主設(shè)備開始讀取數(shù)據(jù)。

pYYBAGOvk3SAOP-kAAaVBCdlCQo735.png

3.10 10位尋址

大多數(shù)兼容I2C總線的從機(jī)具有7位從機(jī)地址編碼,理論上可以在總線連接128個從機(jī)設(shè)備,為了在同一總線上連接更多的從機(jī)設(shè)備,I2C規(guī)范增加了10位地址編碼的從機(jī),理論上從機(jī)可以擴(kuò)展到1024個。目前10位尋址設(shè)備沒有被廣泛使用。具有7位和10位地址的設(shè)備可以連接到同一個I2C總線,可用于所有總線速度模式。

如下圖所示,10位從機(jī)地址由啟動(S)或重啟(Sr)信號后的前兩個字節(jié)構(gòu)成:①第一個字節(jié)的前七位是組合1111 0XX,其中前五位(1111 0)是特殊規(guī)定且不可更改的;后兩位(XX)是10位地址的兩個最高有效位(MSB );第一個字節(jié)的第八位是決定信號方向的R/W位。②第二個字節(jié)是10位地址的低8位。

前面針對7位尋址設(shè)備描述的讀/寫格式的所有組合對于10位尋址也是適合的。這里舉2個例子來進(jìn)一步說明10位地址的用法:

3.10.1 10位地址寫操作

如下圖所示,主機(jī)向具有10位從機(jī)地址的從機(jī)發(fā)送數(shù)據(jù)。傳輸方向不變。主機(jī)啟動發(fā)送第一個尋址字節(jié),每個從機(jī)判讀第一個尋址字節(jié)的第八位(R/W方向位)是否為0,如果為0,每個從機(jī)將第一個尋址字節(jié)的前七位(1111 0XX)與其自身地址進(jìn)行比較,這時前七位地址相同的從設(shè)備會同時產(chǎn)生應(yīng)答(A1);接著主機(jī)發(fā)送第二個尋址字節(jié)(XXXXXXXX),所有從機(jī)將該地址(XXXXXXXX)的全部八位與它們自己的地址進(jìn)行比較,但是只有一個從機(jī)找到匹配并產(chǎn)生應(yīng)答(A2),找到匹配的從機(jī)繼續(xù)保持被尋址狀態(tài),直到收到停止(P)或重啟(Sr)信號。

pYYBAGOvk6WAcBetAAHKG5DAtPk147.png

3.10.2 10位地址讀

主機(jī)從帶有10位從機(jī)地址的從機(jī)讀取數(shù)據(jù)。主機(jī)啟動后發(fā)送第一個尋址字節(jié)和第二個尋址字節(jié)后,只有一個從機(jī)被尋址。在重復(fù)的開始條件(Sr)之后,匹配的從機(jī)記得它以前被尋址過。然后,該從機(jī)檢查重啟(Sr)之后的主機(jī)第一個字地址節(jié)的前七位是否與自己的相同(此時無需第二個尋址字節(jié)),并測試第八個(R/W)位是否為1,如果前七位相同、第八位是1,從機(jī)認(rèn)為它已經(jīng)作為發(fā)送器被尋址,并產(chǎn)生應(yīng)答A3。從機(jī)繼續(xù)保持被尋址,直到收到停止(P)或重啟(Sr)信號。由于重啟(Sr)后的第一個尋址字節(jié)的第八位(R/W)是R(1),所以其他從機(jī)都不會被尋址。

pYYBAGOvk8yAOO1LAAGCh29YykU209.png

3.11 特殊保留地址

I2C地址的分配由負(fù)責(zé)分配的I2C總線委員會管理。保留兩組8個I2C地址供將來使用,一個地址用于10位I2C尋址。其特殊作用如下:

poYBAGOvk_eAXJAGAAjJ6YdFFjo983.png

通用呼叫地址用于尋址從屬總線上的所有設(shè)備。如果任何從屬設(shè)備不需要響應(yīng)此類呼叫或從屬設(shè)備不支持常規(guī)呼叫,則必須忽略該呼叫。如果設(shè)備支持普通呼叫并希望接收數(shù)據(jù),則必須確認(rèn)地址并作為從屬接收器讀取數(shù)據(jù)。

3.11.1 廣播尋址

廣播尋址(00000000)用于同時尋址連接到I2C總線的每個設(shè)備。

[1]如果設(shè)備不需要廣播提供的任何數(shù)據(jù),它可以回復(fù)NACK來忽略廣播地址;

[2]如果設(shè)備需要來自廣播的數(shù)據(jù),會對廣播地址進(jìn)行ACK,并作為一個從接收設(shè)備;

[3]如果多個設(shè)備響應(yīng)廣播地址ACK,主設(shè)備并不知道有多少個設(shè)備回應(yīng)。每個能夠處理此數(shù)據(jù)的從接收設(shè)備第二個和后面的字節(jié)ACK。

一般廣播地址的含義總是在地址的第二個字節(jié)中指定,如下圖:

poYBAGOvlCeAbgr6AAFVBvf3iow279.png

當(dāng)LSB=0時,

pYYBAGOvlFCAA91uAAHcEvzauWM805.png

當(dāng)LSB=1時,

[1]當(dāng)LSB=1時,2個字節(jié)的地址序列是一個硬件通用調(diào)用。

[2]這意味著地址序列是由硬件主設(shè)備傳輸?shù)?,例如鍵盤掃描器。第二個字節(jié)剩下的7位包含硬件主設(shè)備地址,這個地址會被一個連接到總線的智能設(shè)備(例如微控制器)識別,然后總線接受來自硬件設(shè)備的信息。

[3]由于硬件主設(shè)備實(shí)現(xiàn)不知道消息必須要傳輸?shù)侥膫€設(shè)備,因此它只能生成這個硬件通用調(diào)用和他自己的地址,然后標(biāo)識給系統(tǒng)。

pYYBAGOvlH6ARDzwAAHulcrlQfw662.png

3.11.2 起始字節(jié)(start byte)

微控制器有兩種方式連接到I2C總線上。有片上的硬件I2C總線接口的微控制器可以變成為只接收總線的中斷請求。當(dāng)設(shè)備沒有這樣的接口,它必須要通過軟件手段來檢測總線。很明顯,微控制器檢測的時間或者輪詢總線的時間越多,實(shí)現(xiàn)自己功能的時間就越少。

因此快速硬件設(shè)備和依賴軟件輪詢的相對慢速微控制器是有速度差別的。在這種情況下,數(shù)據(jù)傳輸前有一個比正常時間長很多的起始過程。起始過程組成如下:

一個開始條件(S)& 一個開始字節(jié)(0000 0001)& 應(yīng)答位(ACK)&重復(fù)的開始條件(Sr)

poYBAGOvlK-AOnzjAAGtJT6wiGU220.png

主機(jī)發(fā)送完開始條件后,發(fā)送開始字節(jié)(0000 0001)。另外的微控制器可以以低采樣率來采樣SDA線知道開始字節(jié)的7個0中的一個被偵測到。在偵測到SDA線的低電平后,微控制器可以切換到更高的采樣率來探測用于同步的重復(fù)開始條件。

在開始字節(jié)后一個應(yīng)答相關(guān)的時鐘脈沖產(chǎn)生。設(shè)備不允許應(yīng)答開始字節(jié)。

3.11.3 總線清除(bus clear)

總線清除指的是清除總線被卡死在低電平的故障,使其恢復(fù)正常狀態(tài)。

在極少數(shù)情況下,如果SCL時鐘總線被卡在低電平(長時間陷在低電平狀態(tài)),對其正確的處理方式為:①如果您的I2C設(shè)備有硬件復(fù)位輸入,那么首先使用硬件復(fù)位信號復(fù)位I2C總線。②如果I2C設(shè)備沒有硬件復(fù)位輸入,則重啟電源供電以強(qiáng)制激活設(shè)備內(nèi)部硬件上電復(fù)位(POR)電路,實(shí)施開機(jī)復(fù)位I2C總線狀態(tài)機(jī)。

在極少數(shù)情況下,如果SDA數(shù)據(jù)總線被卡在低電平(長時間陷在低電平狀態(tài)),對其正確的處理方式為:①主機(jī)應(yīng)發(fā)送9個時鐘脈沖,將SDA總線保持在低電平的設(shè)備應(yīng)該會在這9個時鐘周期內(nèi)的某個時間將其釋放。②如果9個時鐘周期內(nèi)沒有釋放,則使用硬件復(fù)位或重啟電源復(fù)位來清除總線。

3.11.4 設(shè)備ID

在出廠前,芯片制造商將設(shè)備ID(身份編碼)存儲在芯片內(nèi)部的只讀存儲空間,如下圖所示,設(shè)備ID包含內(nèi)容如下:

[1] 12位芯片制造商名稱編碼,每個制造商都是唯一的(例如”0000 0000 0000”代表恩智浦)。

[2] 9位芯片器件標(biāo)識碼,芯片制造商分配(例如AT24C02)。

[3] 3位芯片版本,由制造商指定(例如RevX)。

poYBAGOvlN-AMlgBAAFFUrlOf98060.png

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

[1] 主機(jī)發(fā)送啟動(S)信號。

[2] 主機(jī)發(fā)送設(shè)備ID(特殊保留的)地址 “1111 1000”,最后一位R/W位一定要為“0”,表示“寫”操作;可能有多個從機(jī)應(yīng)答。

[3] 主機(jī)發(fā)送從機(jī)設(shè)備地址。此時,代表傳輸方向LSB位無關(guān)緊要,“0”或“1” 均可。只有一個從機(jī)設(shè)備必須應(yīng)答該字節(jié)。

[4] 主機(jī)發(fā)送重啟(Sr)信號。注意:啟動(S)信號會重置從機(jī),并且無法執(zhí)行設(shè)備ID讀取。此外停止(P)或重啟(Sr)后訪問另一個從機(jī)設(shè)備也會重置原來的從機(jī),并且無法執(zhí)行設(shè)備ID讀取。

[5] 主機(jī)發(fā)送設(shè)備ID(特殊保留的)地址 “1111 1001”,最后一位R/W位一定要為“1”,表示“讀”操作。

[6] 主機(jī)接收完設(shè)備ID第一個字節(jié)并應(yīng)答,然后接收完設(shè)備ID第二字節(jié)并應(yīng)答,最后接收設(shè)備ID第三個字節(jié)。注意:以上讀取的三個字節(jié)就是設(shè)備ID,包含 12個制造商位(第一個字節(jié)+第二個字節(jié)的4個MSB)、9個器件標(biāo)識位(第二個字節(jié)的4個LSB+第三個字節(jié)的5個MSB)、3個芯片版本位(第三個字節(jié)的3個LSB)。

[7] 主機(jī)通過不應(yīng)答最后一個字節(jié)來結(jié)束讀取操作,從而重置從機(jī)狀態(tài)機(jī),從機(jī)轉(zhuǎn)為等待主機(jī)發(fā)送停止(P)信號的狀態(tài)。備注:主機(jī)通過發(fā)送NACK,可以隨時停止讀取設(shè)備ID的操作。如果主機(jī)在收到第三個字節(jié)后繼續(xù)應(yīng)答,從機(jī)就回滾到第一個字節(jié),并繼續(xù)重復(fù)發(fā)送設(shè)備ID序列,直到檢測到NACK。

4. I2C數(shù)據(jù)傳輸?shù)睦?/p>

數(shù)據(jù)必須發(fā)送到從機(jī)或接收來自從機(jī)的數(shù)據(jù),但實(shí)現(xiàn)這一點(diǎn)的方式是讀取或?qū)懭霃臋C(jī)中的寄存器。

寄存器是Slave‘s memory中包含信息的位置,無論是配置信息還是要發(fā)送回主機(jī)的一些采樣數(shù)據(jù)。主機(jī)必須將信息寫入這些寄存器,以便指示從機(jī)執(zhí)行任務(wù)。

雖然I2C從設(shè)備中有寄存器是常見的,但請注意,并非所有從設(shè)備都有寄存器。有些設(shè)備很簡單,只包含一個寄存器,可以通過在從地址之后立即發(fā)送寄存器數(shù)據(jù)而不是尋址寄存器來直接寫入。單個寄存器設(shè)備的一個例子是一個8位I2C開關(guān),它通過I2C命令進(jìn)行控制。由于它有1位來啟用或禁用信道,所以只需要1個寄存器,而主機(jī)只需在從屬地址之后寫入寄存器數(shù)據(jù),跳過寄存器號。

4.1通過I2C總線寫從機(jī)

要在I2C總線上寫入,主機(jī)將在總線上發(fā)送一個啟動條件,其中從機(jī)的地址以及設(shè)置為0的最后一位(R/W位)表示寫入。在從機(jī)發(fā)送確認(rèn)位后,主機(jī)將發(fā)送它希望寫入的寄存器的地址。從機(jī)將再次確認(rèn),讓主機(jī)知道它已經(jīng)準(zhǔn)備好了。此后,主機(jī)將開始向從機(jī)發(fā)送寄存器數(shù)據(jù),直到主機(jī)發(fā)送了所需的所有數(shù)據(jù)(有時這只是一個字節(jié))主機(jī)將在STOP條件下終止傳輸。

poYBAGOvlRKABbvuAAMR_O3uHG4845.png

下圖完整的展示了主機(jī)向從機(jī)寫一個字節(jié)的時序圖,需要注意的是:

[1]主機(jī)在開始信號之后,需要先發(fā)送尋址字節(jié),其中第0位為0表示主機(jī)要向從機(jī)寫數(shù)據(jù)。

[2]從機(jī)在接收到每個數(shù)據(jù)之后,需要發(fā)送ACK信號,表示成功接收到數(shù)據(jù)。

[3]主機(jī)在發(fā)送完數(shù)據(jù)之后,發(fā)送停止信號。

poYBAGOvlTuAelR3AAGAHltqk1w284.png

4.2通過I2C總線讀從機(jī)

讀從機(jī)與寫非常相似,但需要額外的步驟。為了讀取從機(jī),主設(shè)備必須首先指示從機(jī)它希望從哪個寄存器讀取數(shù)據(jù)。這是通過主機(jī)以與寫入類似的方式開始傳輸,發(fā)送R/W位等于0(表示寫入)的地址,然后是它希望讀取的寄存器地址來完成的。一旦從設(shè)備確認(rèn)該寄存器地址,主設(shè)備將再次發(fā)送START條件,隨后是R/W位設(shè)置為1的從設(shè)備地址(表示讀?。_@一次,從設(shè)備將確認(rèn)讀取請求,主設(shè)備釋放SDA總線,但將繼續(xù)向從設(shè)備提供時鐘。在事務(wù)的這一部分,主設(shè)備將成為主接收機(jī),從設(shè)備將成為從發(fā)射機(jī)。

主設(shè)備將繼續(xù)發(fā)送時鐘脈沖,但將釋放SDA線路,以便從設(shè)備可以傳輸數(shù)據(jù)。在數(shù)據(jù)的每個字節(jié)結(jié)束時,主機(jī)將向從機(jī)發(fā)送ACK,讓從機(jī)知道它已經(jīng)準(zhǔn)備好接收更多數(shù)據(jù)。一旦主設(shè)備接收到預(yù)期的字節(jié)數(shù),它將發(fā)送NACK,向從設(shè)備發(fā)出信號以停止通信并釋放總線。主機(jī)將使用STOP(停止)條件進(jìn)行跟蹤。

poYBAGOvlWeAWSyTAAK2djv7gWQ502.png

下圖完整的展示了主機(jī)由從機(jī)讀取數(shù)據(jù)的時序圖,需要注意的是:

[1]主機(jī)在開始信號之后,需要先發(fā)送尋址字節(jié),其中第1位為1,表示主機(jī)由從機(jī)讀取數(shù)據(jù)。

[2]主機(jī)在接收到每個數(shù)據(jù)之后,需要發(fā)送ACK信號,表示成功接收到數(shù)據(jù)。

[3]主機(jī)在接收完最后一個字節(jié)的數(shù)據(jù)之后,發(fā)送“NACK”表示接收完成,之后,從機(jī)放棄SDA的控制權(quán),主機(jī)發(fā)送停止信號,數(shù)據(jù)接收過程結(jié)束。

poYBAGOvlZGAUqT8AAJc8gEVDEQ017.png

5. 送apb_i2c工程和中英文協(xié)議

關(guān)注微信公眾號《芯片驗(yàn)證日記》,后臺回復(fù)”i2c”,可得apb_i2c工程和中英文協(xié)議對應(yīng)的百度鏈接。連接中的內(nèi)容如下圖所示:

pYYBAGOvlbiAPY8sAAFHwR90L-Y016.png

6. 參考文獻(xiàn):

[1] https://baijiahao.baidu.com/s?id=1730544645451197232

[2] https://baijiahao.baidu.com/s?id=1732071884578858046

[3] https://blog.csdn.net/lhl_blog/article/details/107212413

[4] https://embetronicx.com/tutorials/tech_devices/i2c_1/

[5] https://blog.csdn.net/qq_38942623/article/details/123837341

[6] https://blog.csdn.net/qq_38942623/article/details/124386021

[7] Understanding the I2C Bus, TEXAS INSTRUMENTS

[8] UM10204 I2C-bus specification and user manual

[9] I2C Interface Technical Deep Dive

[10] THE I2C-BUS SPECIFICATION VERSION 2.1

[11] I2C總線規(guī)范


7. 同類文章推薦


SPI協(xié)議詳解+送apb_spi和ahb_spi工程

詳解SPI通信協(xié)議

uart協(xié)議詳解+送apb_uart項(xiàng)目

寫文章不易,如果覺得對您有幫助,麻煩一鍵三連,或者賞個雞腿也行!

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

    關(guān)注

    5

    文章

    357

    瀏覽量

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

    關(guān)注

    10

    文章

    2859

    瀏覽量

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

    關(guān)注

    28

    文章

    1477

    瀏覽量

    123063
  • 推挽
    +關(guān)注

    關(guān)注

    1

    文章

    62

    瀏覽量

    33587
  • 漏極開路
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8387
收藏 人收藏

    評論

    相關(guān)推薦

    簡述i2c總線的工作原理 i2c通信過程 i2c通信協(xié)議原理

    I2C是Inter-Intergrated Circuit的簡稱,英文翻譯過來是:內(nèi)置集成電路。為什么I2C是內(nèi)置集成電路?
    發(fā)表于 07-21 14:43 ?9039次閱讀
    簡述<b class='flag-5'>i2c</b>總線的工作原理  <b class='flag-5'>i2c</b>通信過程 <b class='flag-5'>i2c</b>通信<b class='flag-5'>協(xié)議</b>原理

    I2C總線原理詳解

    I2C兩線式串行總線通訊協(xié)議,它是由飛利浦開發(fā)的,主要用于連接微控制器及其外圍設(shè)備之間,它是由數(shù)據(jù)線SDA和信號線SCL構(gòu)成的,可發(fā)送和接收數(shù)據(jù)即在MUC和I2C設(shè)備之間,I2C
    發(fā)表于 10-18 17:20 ?2204次閱讀
    <b class='flag-5'>I2C</b>總線原理<b class='flag-5'>詳解</b>

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    什么是i2c總線

    什么是i2c總線  下載請點(diǎn)擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2903次閱讀

    I2C總線協(xié)議及其應(yīng)用

    I2C總線協(xié)議及其應(yīng)用 一、I2C總線介紹: ---- 由于大規(guī)模集成電路技術(shù)的發(fā)展,在單個芯片集成CPU以及組成一個單獨(dú)工作系統(tǒng)
    發(fā)表于 02-08 11:23 ?1548次閱讀
    <b class='flag-5'>I2C</b>總線<b class='flag-5'>協(xié)議</b>及其應(yīng)用

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    I2C標(biāo)準(zhǔn)協(xié)議的時序時鐘問題詳解

    對于嵌入式開發(fā)的朋友來說,I2C協(xié)議實(shí)在是再熟悉不過了,有太多的器件,采用的都是通過I2C來進(jìn)行相應(yīng)的設(shè)置。今天,我們就隨便聊聊這個I2C協(xié)議
    發(fā)表于 11-15 15:08 ?2.8w次閱讀
    <b class='flag-5'>I2C</b>標(biāo)準(zhǔn)<b class='flag-5'>協(xié)議</b>的時序時鐘問題<b class='flag-5'>詳解</b>

    I2C系列的合集,可以系統(tǒng)學(xué)習(xí)I2C協(xié)議

    這篇文章給大家?guī)砹?b class='flag-5'>I2C系列的合集,可以系統(tǒng)學(xué)習(xí)I2C協(xié)議。大家趕緊看看吧! 1、I2C總線:何時使用I2C緩沖器 本文討論了使用
    的頭像 發(fā)表于 09-23 15:28 ?3103次閱讀

    I2C總線協(xié)議英文資料

    I2C總線協(xié)議英文資料
    發(fā)表于 11-24 10:00 ?13次下載

    STM32學(xué)習(xí)之I2C協(xié)議(讀寫EEPROM)

    關(guān)于STM32學(xué)習(xí)分享第七章 I2C協(xié)議(讀寫EEPROM)文章目錄關(guān)于STM32學(xué)習(xí)分享前言二、代碼1.i2c.c2.i2c.h3.main.c總結(jié)前言開始!開始!單片機(jī)的I2C
    發(fā)表于 11-30 15:21 ?32次下載
    STM32學(xué)習(xí)之<b class='flag-5'>I2C</b><b class='flag-5'>協(xié)議</b>(讀寫EEPROM)

    嵌入式內(nèi)核及驅(qū)動開發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時序,I2C驅(qū)動框架,I2C從設(shè)備驅(qū)動開發(fā),MPU6050硬件連接

    文章目錄I2c協(xié)議和時序I2c介紹I2c硬件連接I2c總線的信號I2c總線寫時序
    發(fā)表于 12-06 14:06 ?17次下載
    嵌入式內(nèi)核及驅(qū)動開發(fā)-09IIC子系統(tǒng)框架使用(<b class='flag-5'>I2C</b><b class='flag-5'>協(xié)議</b>和時序,<b class='flag-5'>I2C</b>驅(qū)動框架,<b class='flag-5'>I2C</b>從設(shè)備驅(qū)動開發(fā),MPU6050硬件連接

    硬件I2C與模擬I2C

    配置;而軟件I2C是沒有寄存器這個概念的。 軟件I2C一般是使用GPIO管腳,用軟件控制SCL,SDA線輸出高低電平,模擬i2c協(xié)議的時序。例如下面這段
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    使用I2C協(xié)議點(diǎn)亮OLED

    你好,我是愛吃魚香ROS的小魚。本節(jié)我們就嘗試直接使用I2C協(xié)議來點(diǎn)亮OLED,因?yàn)橹饕獪y試I2C協(xié)議,所以對于復(fù)雜的顯示處理部分小魚就略過了,畢竟有方便的開源庫使用,我們也不用那么糾
    的頭像 發(fā)表于 07-15 16:47 ?1813次閱讀
    使用<b class='flag-5'>I2C</b><b class='flag-5'>協(xié)議</b>點(diǎn)亮OLED

    I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點(diǎn)?

    I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點(diǎn)? I2C(Inter-Integrated Circuit)是一種串行總線協(xié)議,由Phili
    的頭像 發(fā)表于 09-12 11:18 ?1508次閱讀

    i2c采樣是上升沿嗎?

    數(shù)據(jù)。在本文中,我們將詳細(xì)討論I2C采樣的工作原理,采樣時機(jī)以及如何進(jìn)行I2C采樣。 I2C采樣的原理 I2C采樣是基于I2C通訊
    的頭像 發(fā)表于 09-19 17:16 ?2459次閱讀