I2C协议学习
????????I2C Bus(Inter-Integrated Circuit Bus)?最早是由Philips半導(dǎo)體(現(xiàn)被NXP收購)開發(fā)的兩線式串行總線,常用于微控制器與外設(shè)之間的連接。
一、概述
????????以下是 I2C 總線的一些特性:
- 只需要兩條總線;一條串行數(shù)據(jù)線 (SDA) 和一條串行時鐘線 (SCL)。
- ?連接到總線的每個設(shè)備都可以通過唯一的地址進(jìn)行尋址,并且始終存在簡單的主/從關(guān)系;master可以作為主發(fā)送器或主接收器運行。
- 沒有嚴(yán)格的波特率要求,例如 RS232,主機(jī)生成總線時鐘
- 多主機(jī)總線,包括沖突檢測和仲裁,以防止兩個或多個主機(jī)同時啟動數(shù)據(jù)傳輸時數(shù)據(jù)損壞。
- 串行、面向 8 位的雙向數(shù)據(jù)傳輸在標(biāo)準(zhǔn)模式(standard mode)下最高可達(dá) 100 kbit/s,在快速模式(fast mode)下最高可達(dá) 400 kbit/s,在快速模式 Plus 下最高可達(dá) 1 Mbit/s ,或在高速模式(high-speed mode)下高達(dá) 3.4 Mbit/s。
- 在超快速模式下,面向 8 位的串行單向數(shù)據(jù)傳輸速度高達(dá) 5 Mbit/s。
- 片上濾波可抑制總線數(shù)據(jù)線上的尖峰信號,以保持?jǐn)?shù)據(jù)完整性。
- ?可連接到同一總線的IC 數(shù)量僅受最大總線電容的限制。 在某些條件下可能允許更大的電容。
? ? ? ? 一個I2C應(yīng)用如下:
二、I2C協(xié)議
?1、標(biāo)準(zhǔn)模式與快速模式協(xié)議
????????兩線一一串行數(shù)據(jù)(SDA)和串行時鐘(SCL)線在連接到總線的器件間傳輸信息。每個器件都有一個唯一的地址識別(無論是微控制器、LCD驅(qū)動器、存儲器或鍵盤接囗),而且都可以作為一個發(fā)送器或接收器(由器件的功能決定),很明顯,LCD驅(qū)動器只是一個接收器,而存儲器則既可以接收又可以發(fā)送數(shù)。除了發(fā)送器和接收器外,器件在執(zhí)行數(shù)據(jù)傳輸時也可以被看作是主機(jī)或從機(jī),主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號的器件,此時,任何被尋址的器件都被認(rèn)為是從機(jī)。
????????SDA和SCL都是雙向線路,都通過一個電流源或上拉電阻連接到正的電源電壓,當(dāng)總線空
閑時,這兩條線都是高電平。
????????連接到總線的器件輸出級必須是漏極開路或集電極開路才能執(zhí)行線與的功能。
????????I2C 總線規(guī)范的強(qiáng)制要求和可選部分的使用以總結(jié)如下:
1) 數(shù)據(jù)有效性
????????在時鐘的高電平期間(SCL為高),SDA 線上的數(shù)據(jù)必須是穩(wěn)定的。 只有當(dāng) SCL 線上的時鐘信號為 LOW 時,數(shù)據(jù)線的 HIGH 或 LOW 狀態(tài)才能改變。 每一個時鐘脈沖傳輸一個數(shù)據(jù)位。
2)啟動和停止條件
????????所有傳輸都以 START (S) 開始,并以 STOP (P) 結(jié)束。
- 啟動條件:SCL為高電平時,SDA 線上的高電平到低電平轉(zhuǎn)換。
- 停止條件:SCL為高電平時,SDA 線上的低電平到高電平轉(zhuǎn)換。
?
????????START 和 STOP 條件始終由主機(jī)生成。 在 START 條件之后,總線被認(rèn)為是忙碌的。 在 STOP 條件之后的某個時間,總線被認(rèn)為再次空閑。
????????如果生成重復(fù)的 START (Sr) 而不是 STOP 條件,則總線保持忙碌。 在這方面,START (S) 和重復(fù) START (Sr) 條件在功能上是相同的。
3)字節(jié)格式
????????SDA 線上的每個字節(jié)都必須是 8 位。 每次傳輸可傳輸?shù)淖止?jié)數(shù)不受限制。 每個字節(jié)后必須跟一個確認(rèn)位(ack)。 數(shù)據(jù)首先以最高有效位 (MSB)傳輸。 如果從機(jī)在執(zhí)行其他功能(例如服務(wù)內(nèi)部中斷)之前無法接收或發(fā)送另一個完整字節(jié)的數(shù)據(jù),則它可以將時鐘線 SCL 保持為低電平以強(qiáng)制主機(jī)進(jìn)入等待狀態(tài)。 當(dāng)從設(shè)備準(zhǔn)備好接收另一個字節(jié)的數(shù)據(jù)并釋放時鐘線 SCL 時,數(shù)據(jù)傳輸將繼續(xù)。
4)確認(rèn)位
????????確認(rèn)位(ACK)在每個字節(jié)之后發(fā)送。確認(rèn)位允許接收器通知發(fā)送器該字節(jié)已成功接收并且可以發(fā)送另一個字節(jié)。主機(jī)生成所有時鐘脈沖,包括確認(rèn)位的第九個時鐘脈沖。
????????確認(rèn)信號定義如下:發(fā)送器在確認(rèn)時鐘脈沖期間釋放 SDA 線,因此接收器可以將 SDA 線拉低,并在該時鐘脈沖的高電平期間保持穩(wěn)定的低電平。還必須考慮建立和保持時間。
????????當(dāng) SDA 在第 9 個時鐘脈沖期間保持高電平時,這被定義為未確認(rèn)信號。然后,主機(jī)可以生成一個停止條件來中止傳輸,或者生成一個重復(fù)的 START 條件來開始新的傳輸。有五個條件會導(dǎo)致 未確認(rèn)信號(NACK) 的產(chǎn)生:
5)時鐘同步
????????兩個主機(jī)可以同時在空閑總線上開始傳輸,并且必須有一種方法來決定哪一個控制總線并完成其傳輸。 這是通過時鐘同步和仲裁完成的。
????????在單主系統(tǒng)中,不需要時鐘同步和仲裁。
????????使用 I2C 接口與 SCL 線的線與連接來執(zhí)行時鐘同步。
????????這意味著 SCL 線上的高電平到低電平轉(zhuǎn)換會導(dǎo)致相關(guān)主設(shè)備開始對它們的低電平周期進(jìn)行計數(shù),并且一旦主時鐘變?yōu)榈碗娖?#xff0c;它就會將 SCL 線保持在該狀態(tài),直到達(dá)到時鐘高電平狀態(tài)。 但是,如果另一個時鐘仍在其低電平周期內(nèi),則該時鐘從低電平到高電平的轉(zhuǎn)換可能不會改變 SCL 線的狀態(tài)。 因此,SCL 線由具有最長低電平周期的主機(jī)保持低電平。 具有較短低電平周期的主機(jī)在此期間進(jìn)入 高電平的等待狀態(tài)。
????????當(dāng)所有相關(guān)的主機(jī)都計完它們的低電平周期時,時鐘線被釋放并變?yōu)楦唠娖健?這樣主時鐘和 SCL 線的狀態(tài)之間就沒有區(qū)別了,所有的主時鐘開始計數(shù)它們的高電平周期。 第一個完成其高電平周期的主機(jī)再次將 SCL 線拉低。 這樣,一個同步的SCL時鐘就產(chǎn)生了,它的低電平周期由時鐘低電平周期最長的主機(jī)決定,高電平周期由時鐘高電平周期最短的主機(jī)決定。
6)仲裁
????????仲裁與同步一樣,是指僅當(dāng)系統(tǒng)中使用多個主設(shè)備時才需要的協(xié)議的一部分。從設(shè)備不參與仲裁程序。?只有當(dāng)總線空閑時,主機(jī)才可以開始傳輸。
????????兩個主設(shè)備可以在 START 條件的最小保持時間內(nèi)生成一個 START 條件,從而在總線上產(chǎn)生一個有效的 START 條件。然后需要仲裁來確定哪個主機(jī)將完成其傳輸。
????????仲裁是一位一位進(jìn)行的。在每一位進(jìn)行傳輸期間,當(dāng) SCL 為高電平時,每個主機(jī)都會檢查 SDA 電平是否與其發(fā)送的電平相匹配。這個過程可能需要很多位。只要傳輸相同,兩個主機(jī)實際上可以無誤地完成整個事務(wù)。第一次主機(jī)嘗試發(fā)送高電平,但檢測到 SDA 電平為低電平時,主機(jī)知道它已失去仲裁并關(guān)閉其 SDA 輸出驅(qū)動器。另一個主節(jié)點繼續(xù)完成其事務(wù)。在仲裁過程中不會丟失任何信息。失去仲裁的主機(jī)可以生成時鐘脈沖,直到失去仲裁的字節(jié)結(jié)束,并且必須在總線空閑時重新開始其事務(wù)。如果主機(jī)還包含從機(jī)功能并且在尋址階段失去仲裁,則獲勝的主機(jī)可能正在嘗試對其進(jìn)行尋址。因此,丟失的主設(shè)備必須立即切換到其從設(shè)備模式。
?????????由于 I2C 總線的控制完全取決于競爭主機(jī)發(fā)送的地址和數(shù)據(jù),因此沒有中央主機(jī),也沒有總線上的任何優(yōu)先級順序。
7)讀寫控制
????????在 START 條件 (S) 之后,發(fā)送從地址。 該地址有 7 位長,后跟第 8 位,即數(shù)據(jù)方向位 (R/W)——“0”表示傳輸 (WRITE),“1”表示請求數(shù)據(jù) (READ)。
?????????數(shù)據(jù)傳輸總是由主機(jī)產(chǎn)生的停止條件 (P) 終止。 但是,如果主機(jī)仍然希望在總線上進(jìn)行通信,它可以生成重復(fù)的 START 條件 (Sr) 并尋址另一個從機(jī),而無需首先生成 STOP 條件。 在這樣的傳輸中,讀/寫格式的各種組合都是可能的。
2、?Ultra Fast-mode 協(xié)議
????????UFm(Ultra Fast-mode) I2C 總線是一種 2 線串行總線,可在高至 5 MHz 的頻率范圍內(nèi)單向傳輸數(shù)據(jù)。當(dāng)速度大于 1 MHz 時,驅(qū)動 LED 控制器和其他不需要反饋的設(shè)備最為有用。
???????? UFm I2C 總線協(xié)議基于標(biāo)準(zhǔn) I2C 總線協(xié)議,該協(xié)議由 START、從地址、命令位、第九個時鐘和一個停止位組成。命令位僅為“寫”,第 9 個時鐘上的數(shù)據(jù)位被驅(qū)動為高電平,由于總線的單向特性而忽略 ACK 周期。
????????2 線驅(qū)動器由 UFm 串行時鐘 (USCL) 和串行數(shù)據(jù) (USDA) 組成。從設(shè)備包含一個唯一地址(無論是微控制器、LCD 驅(qū)動器、LED 控制器還是 GPO)并且僅作為接收器運行。 LED驅(qū)動器可能只是一個接收器,UFm可以支持,而存儲器可以接收和傳輸數(shù)據(jù),UFm不支持。 UFm I2C 總線也不支持多主機(jī)功能。在 UFm 中,主機(jī)是唯一在總線上啟動數(shù)據(jù)傳輸并生成時鐘信號以允許傳輸?shù)脑O(shè)備。尋址的所有其他設(shè)備都被視為從設(shè)備。
? ? ? ? 其規(guī)范要求如下:
? ? ? ? ?USDA和USCL都是單向線路,當(dāng)總線空閑時,兩條線都被輸出級的上晶體管拉高。其基本傳輸條件與標(biāo)準(zhǔn)模式一致。
總結(jié)
- 上一篇: Visual computing——概述
- 下一篇: 云服务器 VNC 远程连接