您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何理解IIC協(xié)議的IIC總線規(guī)范,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
??在現(xiàn)代電子產(chǎn)品開(kāi)發(fā)過(guò)程中,為了簡(jiǎn)化系統(tǒng),提高系統(tǒng)的可靠性,縮短產(chǎn)品開(kāi)發(fā)周期,增加硬件構(gòu)成的靈活性,推出了一種高效、可靠、方便的 IIC串行總線。二線制的 IIC 串行總線使得各電路單元之間只需要簡(jiǎn)單的兩線連接,總線接口都集成在器件中,可實(shí)現(xiàn)電路系統(tǒng)的模塊化、標(biāo)準(zhǔn)化設(shè)計(jì)。在 IIC 總線上,各單元電路相互之間沒(méi)有其它連線,常用的單元電路基本上與系統(tǒng)電路無(wú)關(guān),極易形成自己的標(biāo)準(zhǔn)化、模塊化設(shè)計(jì)。
?IIC總線可通過(guò)串行數(shù)據(jù)(SDA)和串行時(shí)鐘(SCL)線與總線上的任何一個(gè)器件連接,每 個(gè)器件都有一個(gè)唯一的地址,都可以作為一個(gè)發(fā)送器或接收器。各器件在執(zhí)行數(shù)據(jù)傳輸時(shí)也都可被看做是一個(gè)主機(jī)或從機(jī)。
發(fā)送器 本次傳送屮發(fā)送數(shù)據(jù)(不包括地址和命令)到總線的器件;
接收器 本次傳送中從總線接收數(shù)據(jù)(不包括地址和命令)的器件;
主機(jī) 初始化發(fā)送、產(chǎn)生時(shí)鐘信號(hào)和終止發(fā)送的器件,它可以是發(fā)送器或接收器, 主機(jī)通常是微控制器;
從機(jī) 被主機(jī)尋址的器件,它可以是發(fā)送器或接收器。
??IIC總線是一個(gè)多主機(jī)的總線,可以連接多個(gè)能控制總線的器件到總線。當(dāng)兩個(gè)以上能控制總線的器件同時(shí)發(fā)生傳輸時(shí),只能有一個(gè)器件能真正控制總線而成為主機(jī),并使報(bào)文不被破壞,這個(gè)過(guò)程叫做仲裁。與此同時(shí),能使多個(gè)能控制總線的器件產(chǎn)生同步的時(shí)鐘信號(hào)。
??SDA 和 SCL 都是雙向線路,連接到總線的器件的輸出級(jí)必須是漏極開(kāi)路或集電極開(kāi)路,該器件通過(guò)一個(gè)電流源或上拉電阻連接到正的電源電壓,實(shí)現(xiàn)線與功能。當(dāng)總線空閑時(shí),這兩條線路都是高電平。IIC總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kb/s,在快速模式下可達(dá)400kb/s,在高速模式下可達(dá)3.4Mb/s。連接到總線的接口數(shù)量由總線電容是400pF的限制決定。
????????????圖 2 1 I2C總線電路設(shè)計(jì)要點(diǎn)
??IIC 總線上每傳輸一個(gè)數(shù)據(jù)位必須產(chǎn)生一個(gè)時(shí)鐘脈沖。
??(1) 數(shù)據(jù)的有效性。SDA 線上的數(shù)據(jù)必須在時(shí)鐘線 SCL 的高電平周期保持穩(wěn)定, 數(shù)據(jù)線的電平狀態(tài)只有在 SCL 線的時(shí)鐘信號(hào)是低電平時(shí)才能改變,如圖 2.11 所示。在標(biāo)準(zhǔn)模式下,高低電平寬度必須大于等于 4.7us。
??????????????圖2 2 數(shù)據(jù)有效性
??????????????圖2 3 IIC總線控制的位傳輸
??(2) 起始和停止條件。在 IIC 總線屮,唯一違反上述數(shù)據(jù)有效性的是起始(S)和停止§條件,如圖2 4 所示。
??起始條件(重復(fù)起始條件):在 SCL 線是高電平時(shí),SDA 線從高電平向低電平切換。
??停止條件:在 SCL 線是高電平時(shí),SDA 線由低電平向高電平切換。
?? ?? ?? ?? ?? ?? ?? ?? ??圖2 4 起始位和停止條件
??起始和停止條件一般由主機(jī)產(chǎn)生。起始條件是作為一次傳送的開(kāi)始,在起始條件后,總線被認(rèn)為處于忙的狀態(tài)。停止條件是作為一次傳送的結(jié)束,在停止條件的某段時(shí)間后,總線被認(rèn)為再次處于空閑狀態(tài)。重復(fù)起始條件既作為上次傳送的結(jié)束,也作為下次傳送的開(kāi)始。
??(1) 字節(jié)格式。發(fā)送到 SDA 線上的每個(gè)字節(jié)必須為 8 位。每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個(gè)字節(jié)后必須跟一個(gè)應(yīng)答位。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB), 如圖2 5所示。
?? ?? ?? ?? ?? ?? ?? ?? ??圖2 5 IIC總線的數(shù)據(jù)傳輸
?? (2) 應(yīng)答。相應(yīng)的應(yīng)答時(shí)鐘脈沖由從機(jī)產(chǎn)生。在應(yīng)答的時(shí)鐘脈沖期間,發(fā)送器釋放 SDA線(高),與此同時(shí),接收器必須將 SDA 線拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平,如圖2 5屮時(shí)鐘信號(hào)SCL 的第 9 位。
??一般說(shuō)來(lái),被尋址匹配的從機(jī)或可繼續(xù)接收下一字節(jié)的接收器將產(chǎn)生一個(gè)應(yīng)答。若作為發(fā)送器的主機(jī)在發(fā)送完一個(gè)字節(jié)后沒(méi)有收到應(yīng)答位(或收到一個(gè)非應(yīng)答位),或作為接收器的主機(jī)沒(méi)有發(fā)送應(yīng)答位(或發(fā)送一個(gè)非應(yīng)答位),那么,主機(jī)必須產(chǎn)生一個(gè)停止條件或重復(fù)起始條件來(lái)結(jié)束木次傳輸。若從機(jī)(接收器)不能接收更多的數(shù)據(jù)字節(jié),將不產(chǎn)生這個(gè)應(yīng)答位 :主機(jī)(接收器)在接收完最后一個(gè)字節(jié)后不產(chǎn)生應(yīng)答, 通知從機(jī)(發(fā)送器)數(shù)據(jù)結(jié)束。
??(1) 同步。時(shí)鐘同步是通過(guò)各個(gè)能產(chǎn)生時(shí)鐘的器件“線與” 連接到 SCL 線上來(lái)實(shí)現(xiàn)的,各器件可能都有自己獨(dú)立的時(shí)鐘 各個(gè)時(shí)鐘信號(hào)的頻率、周期、相位和占空比可能都不相同,由于 “線與” 的結(jié)果,在 SCL 線上產(chǎn)生的實(shí)際時(shí)鐘的低電平寬度由低電平持續(xù)時(shí)間最長(zhǎng)的器件決定,他高電平寬度由高電平持續(xù)時(shí)間最短的器件決定。
??(2) 仲裁。當(dāng)總線空閑時(shí),多個(gè)主機(jī)同時(shí)啟動(dòng)傳輸,可能檢測(cè)到不止一個(gè)主機(jī)滿足起始條件,而同時(shí)獲得主機(jī)權(quán),這樣就要進(jìn)行仲裁。當(dāng)SCL 線是高電平時(shí),仲裁在 SDA 線發(fā)生,當(dāng)其他主機(jī)發(fā)送低電平時(shí),發(fā)送高電平的主機(jī)將丟失仲裁,因?yàn)榭偩€上的電平與它自己的電平不同。
仲裁可以持續(xù)多位,它的第一個(gè)階段是比較地址位,如果每個(gè)主機(jī)都嘗試尋址相同的器件,仲裁會(huì)繼續(xù)比較數(shù)據(jù)位,或者比較響應(yīng)位。因?yàn)?IIC 總線的地址和數(shù)據(jù)信息由贏得仲裁的主機(jī)決定,所以在仲裁過(guò)程中不會(huì)丟失信息。
??(3) 用時(shí)鐘同步機(jī)制作偽握手。器件可以快速接收數(shù)據(jù)字節(jié),但可能需要更多時(shí)間保存接收到的字節(jié)或準(zhǔn)備一個(gè)要發(fā)送的字節(jié)。此時(shí),這個(gè)器件可以使 SCL 線保持低電平, 迫使與之交換數(shù)據(jù)的器件進(jìn)入等待狀態(tài),直到準(zhǔn)備好下一字節(jié)的發(fā)送或接收 。
??(1) 尋址字節(jié)。主機(jī)產(chǎn)生起始條件后,發(fā)送的第一個(gè)字節(jié)為尋址字節(jié)。該字節(jié)的頭 7位(高7 位)為從機(jī)地址,最低位(LSB)決定了報(bào)文的方向,“0”表示主機(jī)寫(xiě)信息到從機(jī), “1”表示主機(jī)讀從機(jī)中的信息,如圖 2.14 所示。當(dāng)發(fā)送了一個(gè)地址后,系統(tǒng)中的每個(gè)器件都將頭 7 位與它自已的地址比較。如果一樣,器件會(huì)應(yīng)答主機(jī)的尋址,至于是從機(jī)-接收器還是從機(jī)-發(fā)送器都由R / W 位決定。
?? ?? ?? ?? ?? ?? 圖2 6 起始條件后的笫一個(gè)字節(jié)
??從機(jī)地址由一個(gè)固定的部分和一個(gè)可編程的部分構(gòu)成。例如,某些器件有 4 個(gè)固定的位(高4位)和 3 個(gè)可編程的地址位(低 3 位),那么同一總線上共可以連接 8 個(gè)相同的器件。IIC 總線委員會(huì)協(xié)調(diào) IIC 地址的分配,保留了 2 組 8 位地址(0000XXX 和 1111XXX), 這 2組地址的用途可查閱有關(guān)資料。
??(2) 傳輸格式。主機(jī)產(chǎn)生起始條件后,發(fā)送一個(gè)尋址字節(jié),收到應(yīng)答跟著就是數(shù)椐傳輸,數(shù)據(jù)傳輸一般由主機(jī)產(chǎn)生的停止位來(lái)終止。但是,如果主機(jī)仍希望在總線上通信,它可以產(chǎn)生重復(fù)起始條件(Sr)且尋址另一個(gè)從機(jī),而不是首先產(chǎn)一個(gè)停止條件。在這種傳輸屮,可能有不同的讀/寫(xiě)格式結(jié)合。
??數(shù)據(jù)的傳輸格式有以下三種 :
??① 主機(jī)-發(fā)送器發(fā)送數(shù)據(jù)到從機(jī)-接收器,見(jiàn)圖 2.15, 尋址字節(jié)的 “R/W” 位為 0,數(shù)據(jù)傳輸?shù)姆较虿桓淖儭?br/>??② 尋址字節(jié)后,主機(jī)-接收器立即讀從機(jī)-發(fā)送器中的數(shù)據(jù),見(jiàn)圖 2.16,尋址字節(jié)的R/W 位為1。在第一次從機(jī)產(chǎn)生響應(yīng)時(shí), 主機(jī)-發(fā)送器變成主機(jī)-接收器,從機(jī)-接收器變成從機(jī)-發(fā)送器。之后,數(shù)據(jù)由從機(jī)發(fā)送,主機(jī)接收,每個(gè)應(yīng)答由主機(jī)產(chǎn)生,時(shí)鐘信號(hào) CLK仍由主機(jī)產(chǎn)生。若主機(jī)要終止本次傳輸,則發(fā)送一個(gè)非應(yīng)答信號(hào)( /A /A),接著主機(jī)產(chǎn)生停止條件。
?? ?? ?? ?? ?? ?? ?? ??圖2 7 主機(jī)-發(fā)送器發(fā)送數(shù)據(jù)
?? ?? ?? ?? ?? ?? ??圖2 8 尋址字節(jié)后,主機(jī)-接收器立即讀數(shù)據(jù)
??③ 復(fù)合格式,見(jiàn)圖 2.17。傳輸改變方向的時(shí)候,起始條件和從機(jī)地址都會(huì)被重復(fù), 但 位取反。如果主機(jī)-接收器發(fā)送一個(gè)重復(fù)起始條件,它之前應(yīng)該要發(fā)送一個(gè)非應(yīng)答信號(hào)( /A )。
?? ?? ?? ?? ?? ?? ?? ?? ?? ??圖2 9 復(fù)合格式
??默認(rèn)下,設(shè)備地址為八位寬,因此設(shè)備地址也稱為設(shè)備字節(jié)。設(shè)備地址的高四位,即[7…4]記錄硬件 ID,接續(xù)三位即 [3…1] 則記錄硬件地址,最后一位則是設(shè)備的訪問(wèn)方向。結(jié)果如表2 1所示:
??所謂硬件 ID 就是 IIC 設(shè)備的辨識(shí) ID,硬件 ID 會(huì)隨著廠商還有設(shè)備的種類而有所改變。開(kāi)發(fā)板上的 IIC 設(shè)備是某廠商的 IIC 儲(chǔ)存器,即 24LC04,硬件 ID 為 4’b1010。至于硬件地址就是 IIC 設(shè)備在總線上辨識(shí)地址,默認(rèn)下為 3 位,即同類的 IIC 設(shè)備在同一條 IIC總線上僅允許占據(jù) 8 個(gè)而已。然而,開(kāi)發(fā)板上的 24LC04 為 3’b000。最后的訪問(wèn)方向位則是主機(jī)用來(lái)通知從機(jī),此刻的訪問(wèn)目的是讀還是寫(xiě)。
??總結(jié)來(lái)說(shuō),設(shè)備地址除了訪問(wèn)方向以外,前七位一般都是固定的,例如常見(jiàn)的開(kāi)發(fā)板的 IIC 儲(chǔ)存器 24LC04,設(shè)備地址就是 8’b1010_000_×。
?? ?? ?? ?? ?? ?? ?? ??圖2 10 24LC04 的寫(xiě)操作(主機(jī)視角)
??IIC 總線的時(shí)序,感覺(jué)上一組完成的操作宛如是一堆拼圖。如圖2 10所示,那是 24LC04的寫(xiě)操作,時(shí)序先填上為起始位,再來(lái)是設(shè)備地址,余下是應(yīng)答位,隨之是數(shù)據(jù)地址,然后又是應(yīng)答位,接著是寫(xiě)如數(shù)據(jù),再一次應(yīng)答位,最后掛上結(jié)束位以示一次性的寫(xiě)操作已經(jīng)完成。那么,寫(xiě)操作的經(jīng)過(guò)如下所示:
(一) 主機(jī)發(fā)送起始位;
(二) 主機(jī)發(fā)送設(shè)備地址(寫(xiě));
(三) 等待從機(jī)應(yīng)答;
(四) 主機(jī)發(fā)送數(shù)據(jù)地址;
(五) 等待從機(jī)應(yīng)答;
(六) 主機(jī)發(fā)送數(shù)據(jù);
(七) 等待從機(jī)應(yīng)答;
(八) 主機(jī)發(fā)送結(jié)束位。
??稍微注意一下設(shè)備地址的最低位。由于此刻是寫(xiě)操作,所以設(shè)備地址的訪問(wèn)方向是“寫(xiě)”,所以訪問(wèn)方向位設(shè)置為 0。
?? ?? ?? ?? ?? ?? ??圖2 11 24LC04 的讀操作(主機(jī)視角)
??圖2 11是 24LC04 的讀時(shí)序,同樣它也是由一堆“拼圖”組合而成。相較寫(xiě)操作,讀操作不僅多了許多“拼圖”,而且途中也改變?cè)L問(wèn)方向。那么,讀操作的經(jīng)過(guò)如下所示:
(一) 主機(jī)發(fā)送起始位;
(二) 主機(jī)發(fā)送設(shè)備地址(寫(xiě));
(三) 等待從機(jī)應(yīng)答;
(四) 主機(jī)發(fā)送數(shù)據(jù)地址;
(五) 主機(jī)發(fā)送起始位;
(六) 主機(jī)發(fā)送設(shè)備地址(讀);
(七) 等待從機(jī)應(yīng)答;
(八) 主機(jī)讀取數(shù)據(jù);
(九) 從機(jī)沒(méi)有應(yīng)答(主機(jī)無(wú)視應(yīng)答);
(十) 主機(jī)發(fā)送結(jié)束位。
??IIC總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kb/s,在快速模式下可達(dá)400kb/s,在高速模式下可達(dá)3.4Mb/s。實(shí)驗(yàn)十六會(huì)以 400Khz 的速率作為標(biāo)準(zhǔn)。連接到總線的接口數(shù)量由總線電容是400pF的限制決定。在此,實(shí)驗(yàn)會(huì)以 400Khz 的速率作為標(biāo)準(zhǔn)。
??在進(jìn)行IIC時(shí)序分析時(shí),必須要考慮芯片的時(shí)序,見(jiàn)下表:
?? ?? ?? ?? ?? ?? ?? ??圖2 12 芯片 24LC04 的時(shí)序表
??IIC 總線是一種串行傳輸協(xié)議,既有時(shí)鐘信號(hào) SCL,還有數(shù)據(jù)信號(hào) SDA。Clock Frequency表示 SCL 信號(hào)的頻率, Clock High Time 表示 SCL 信號(hào)保持高電平所需的最小時(shí)間,Clock Low Time 則表示 SCL 信號(hào)保持低電平所需的最小的時(shí)間。
??至于 Rise Time 與 Fall Time 表示, SCL 信號(hào)還有 SDA 信號(hào)由高變低或者由低變高時(shí)所需的最小時(shí)間,即上山與下山時(shí)間。Hold Time 與 Setup Time 是用來(lái)評(píng)估數(shù)據(jù)是否成功打入寄存器的時(shí)序參數(shù),算是典型中的典型。Setup Time 表示建立時(shí)間,即數(shù)據(jù)寫(xiě)入寄存器之前所需的穩(wěn)定時(shí)間;反之, Hold Time 則是保持時(shí)間,即數(shù)據(jù)打入寄存器之后所需的穩(wěn)定時(shí)間。只要兩者得到滿足,那么數(shù)據(jù)的寄存活動(dòng)就得到確保。
??Start 是 IIC 總線的起始位, Stop 是 IIC 總線的結(jié)束位, Data 是 IIC 總線的數(shù)據(jù)位,為了確保三者成功寫(xiě)入從機(jī), Setup Time 與 Hold Time 必須得到滿足。Ouput Valid FromClock 是關(guān)系數(shù)據(jù)位的時(shí)序參數(shù),還有 Bus Free Time 是關(guān)系結(jié)束位的時(shí)序參數(shù)。此外, 為了簡(jiǎn)化時(shí)序,筆者將各種參數(shù)的實(shí)際時(shí)間轉(zhuǎn)換為 50Mhz 量化以后的結(jié)果。將上表進(jìn)行解讀如下:
Clock Frequency,既是頻率也是速率,在此是 400Khz。
Clock High Time,既 SCL 信號(hào)保持高電平所需的最小時(shí)間。
Clock Low Time,既 SCL 信號(hào)保持低電平所需的最小時(shí)間。
Rise Time,既信號(hào)由底變高所需最大的時(shí)間。
Fall Time,既信號(hào)又高變低所需最小的時(shí)間。
Start Hold Time,既起始位所需最小的保持時(shí)間。
Start Setup Time,既起始位所需最小的建立時(shí)間。
Data Input Hold Time,既數(shù)據(jù)位所需最小的保持時(shí)間。
Data Input Setup Time,既數(shù)據(jù)位所需最小的建立時(shí)間。?
Stop Setup Time,既結(jié)束位所需的最小保持時(shí)間。
Ouput Valid From Clock,既數(shù)據(jù)位經(jīng)時(shí)鐘沿觸發(fā)以后的有效時(shí)間。
Bus Free Time,既釋放總線的最小時(shí)間。
關(guān)于如何理解IIC協(xié)議的IIC總線規(guī)范就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。