1. 基礎(chǔ)協(xié)議
1.1.協(xié)議簡(jiǎn)介
IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半導(dǎo)體(現(xiàn)在被NXP收購)于1982年開發(fā)。 主要是用來方便微控制器與外圍器件的數(shù)據(jù)傳輸。 它是一種半雙工,由SDA(數(shù)據(jù))和SCL(時(shí)鐘)組成的兩線式串行傳輸總線。
1.2.物理信號(hào)
圖1-1 IIC實(shí)際的波形
圖1-2 IIC協(xié)議 基本形式
IIC由一條時(shí)鐘線和一條數(shù)據(jù)線組成。 如圖1-1是示波器抓取的實(shí)際信號(hào)、1-2是IIC協(xié)議數(shù)據(jù)傳輸?shù)幕拘问健?/p>
IIC的輸入輸出結(jié)構(gòu)采用的是開漏的結(jié)構(gòu)。 開漏結(jié)構(gòu)不能夠自主得到高電平,所以需要通過外部上拉電阻Rp來的實(shí)現(xiàn)IIC通信過程中的高電平。 Rp的大小取決于IIC不同模式時(shí)的灌電流大小。
圖1-3和圖1-4是描述IIC獲得高低電平的情景。 因?yàn)橐粭lIIC總線上面可能會(huì)同時(shí)連接上多個(gè)設(shè)備,如果IIC使用的是推挽輸出的話容易引起短路。 IIC設(shè)備可以通過控制N-MOS管的開關(guān)來控制輸出信號(hào)的電平高低。 當(dāng)MOS管G極為低電平時(shí)MOS管截止IIC總線上面由于有上拉電阻的存在而為高電平; 當(dāng)MOS管G極為高電平時(shí)MOS管導(dǎo)通,IIC總線相當(dāng)于直接接地為低電平。
IIC的輸入是通過TTL肖特基觸發(fā)器將數(shù)據(jù)傳輸?shù)捷斎霐?shù)據(jù)寄存器當(dāng)中,再提供給處理器處理。
圖1-3
圖1-4
IIC的電平標(biāo)準(zhǔn):
由于種類的設(shè)備都有可能連接到IIC總線上面,比如說CMOS、NMOS等,所以IIC的高電平和低電平的標(biāo)準(zhǔn)是不一定的。高電平和低電平的值分別為0.7VDD和0.3VDD。
圖1-5
1.3.總線連接
圖1-6
IIC的時(shí)鐘線總是由主機(jī)控制,主機(jī)與從機(jī)之間的數(shù)據(jù)傳輸只在SDA一根線上完成,不能同時(shí)發(fā)送和接收數(shù)據(jù),所以IIC是一種半雙工的通信協(xié)議。一條IIC總線上面可以掛載多個(gè)設(shè)備,每一個(gè)設(shè)備都有其對(duì)應(yīng)的設(shè)備地址,設(shè)備之間數(shù)據(jù)傳送只能由一個(gè)設(shè)備傳送給對(duì)應(yīng)地址的設(shè)備。
圖1-7
IIC的總線連接可以接受多主機(jī)的模式,也就是說一條IIC總線上面可以有多個(gè)設(shè)備可以作為主機(jī)來使用,但是在一次數(shù)據(jù)的傳輸過程中只能有一個(gè)設(shè)備作為主機(jī)。一條IIC總線上面誰是主機(jī)取決于總線上面的時(shí)鐘和數(shù)據(jù)信號(hào)由誰控制。如圖1-7所示,這一條IIC總線上面掛載了多個(gè)設(shè)備,其中MCU1和MCU2都可以作為主機(jī)來使用,但是不能同時(shí)有兩個(gè)主機(jī)。
如果兩個(gè)MCU同時(shí)發(fā)起開始信號(hào)時(shí)(都試圖成為主機(jī)),這時(shí)候IIC的仲裁機(jī)制會(huì)發(fā)揮作用來判定誰成為主機(jī)。
圖1-8
IIC的仲裁機(jī)制得益于其開漏的輸入輸出結(jié)構(gòu)。例如如圖1-8所示,當(dāng)SCL線上掛載的多個(gè)設(shè)備,其中的MCU2的SCL輸出低電平,那么這條IIC總線SCL就會(huì)被MCU2拉低,這也就是“與”的特性。
IIC上的仲裁主要是由兩部分組成SCL時(shí)鐘同步、SDA線仲裁。
圖1-9
如圖1-9所示CLK1和CLK2都是連接在一條SCL線上的設(shè)備同時(shí)產(chǎn)生的時(shí)鐘信號(hào),由于IIC總線存在“與”的特性,所以兩個(gè)設(shè)備高電平相同的部分形成了SCL最終的時(shí)鐘,也就是說同一條IIC總線上面的時(shí)鐘都是相同的。
圖1-10
同樣SDA仲裁也是基于“與”的特性。如圖1-10所示當(dāng)兩個(gè)設(shè)備同時(shí)發(fā)出開始信號(hào)想要傳送數(shù)據(jù)時(shí),在第一個(gè)和第二個(gè)周期內(nèi)DATA1和DATA2的數(shù)據(jù)都是相同的,然后兩者繼續(xù)傳送數(shù)據(jù),當(dāng)在第三個(gè)時(shí)鐘周期時(shí)DATA2與SDA的數(shù)據(jù)不一致,這個(gè)時(shí)候設(shè)備2就會(huì)停止發(fā)送數(shù)據(jù),轉(zhuǎn)而啟動(dòng)接收模式。這樣SDA的數(shù)據(jù)就會(huì)與DATA1的數(shù)據(jù)保持一致,并且設(shè)備2停止發(fā)送數(shù)據(jù)也不會(huì)影響SDA的數(shù)據(jù)。
2.協(xié)議規(guī)范
2.1.編碼規(guī)則
起始、停止條件:IIC的起始信號(hào)為當(dāng)時(shí)鐘信號(hào)線(SCL)為高電平時(shí),數(shù)據(jù)線(SDA)產(chǎn)生一個(gè)下降沿,停止信號(hào)為當(dāng)時(shí)鐘信號(hào)線(SCL)為高電平時(shí),數(shù)據(jù)線(SDA)產(chǎn)生一個(gè)上升沿。
圖2-1
應(yīng)答位、非應(yīng)答位:當(dāng)主機(jī)傳送8位數(shù)據(jù)結(jié)束后,主機(jī)會(huì)將SDA線拉高,此時(shí)如果從機(jī)正確接收數(shù)據(jù)則會(huì)將SDA拉低并在SCL高電平時(shí)保持低電平,這個(gè)信號(hào)為ACK信號(hào)。如果在傳輸8位數(shù)據(jù)后從機(jī)沒有將SDA拉低則該信號(hào)為NACK。如果出現(xiàn)NACK則表示數(shù)據(jù)傳輸出錯(cuò)。
圖2-2
數(shù)據(jù)有效性:當(dāng)時(shí)鐘信號(hào)為高電平的時(shí)候,數(shù)據(jù)線上的信號(hào)需要保持不變也就是在時(shí)鐘線為高電平的時(shí)候數(shù)據(jù)線出現(xiàn)上升下降沿的話就會(huì)產(chǎn)生停止和啟動(dòng)信號(hào),從而導(dǎo)致數(shù)據(jù)的傳輸出錯(cuò)。
圖2-3
byte組織:SDA上的數(shù)據(jù)傳輸是以8bit即一個(gè)字節(jié)為單位傳輸?shù)?,每一次傳輸?shù)淖止?jié)數(shù)沒有限制,每傳輸完一個(gè)字節(jié)后必須跟隨一個(gè)應(yīng)答位。
我們以01001001(0X49)為例,其時(shí)序圖如下:
圖2-4
2.2.信號(hào)傳輸
IIC總線上面的每一個(gè)設(shè)備都有唯一的地址與之對(duì)應(yīng),信號(hào)傳輸時(shí)也是根據(jù)指定的地址找到設(shè)備來傳輸信號(hào)。
寫操作:主機(jī)確定了從機(jī)的設(shè)備地址后,生成一個(gè)開始信號(hào),然后向IIC總線上面發(fā)送設(shè)備的地址和讀寫方向標(biāo)志。從機(jī)檢測(cè)到該地址和自己設(shè)備地址相對(duì)應(yīng)后,回復(fù)主機(jī)一個(gè)應(yīng)答信號(hào)。主機(jī)接收到應(yīng)答信號(hào)后就開始向這個(gè)設(shè)備以字節(jié)為單位發(fā)送數(shù)據(jù),每一個(gè)字節(jié)后面都會(huì)帶有從機(jī)的應(yīng)答信號(hào),直到主機(jī)發(fā)送完成最后一個(gè)數(shù)據(jù)后生成一個(gè)停止信號(hào)結(jié)束此次數(shù)據(jù)的傳輸。
圖2-5
讀操作:讀操作與寫操作有一些類似,同樣的是需要確定需要讀取的從設(shè)備的地址。然后主機(jī)生成開始信號(hào),再向IIC總線上發(fā)送從設(shè)備的地址和讀數(shù)據(jù)的指令。從設(shè)備接收到地址與自己的吻合后會(huì)產(chǎn)生一個(gè)應(yīng)答信號(hào)。就這從設(shè)備就開始向主機(jī)發(fā)送主機(jī)想要讀取的數(shù)據(jù),主機(jī)正確接收數(shù)據(jù)后會(huì)向從機(jī)回復(fù)應(yīng)答信號(hào),當(dāng)主機(jī)想要結(jié)束讀取操作時(shí),主機(jī)會(huì)回復(fù)一個(gè)非應(yīng)答信號(hào),然后生成停止信號(hào)結(jié)束數(shù)據(jù)的讀取。
圖2-6
2.3.傳輸示例
圖2-7
如圖2-7所示是示波器采集的IIC信號(hào),我們通過自己的觀察得到這一段IIC包含的信息,主機(jī)向地址為0XA0 的設(shè)備寫入0X0C。
通過示波器我們可以觀察到IIC信號(hào)真實(shí)的模樣, 但是我們也可以體會(huì)到示波器在分析數(shù)字信號(hào)的過程中有很多不便之處。
(1)示波器分析通道比較少:
一般我們使用的示波器都是雙通道,而剛好IIC總線只有兩根線組成,但是當(dāng)我們需要測(cè)量的數(shù)字信號(hào)時(shí)由多根線組成的話(比如說spi),用兩通道的示波器就不方便我們使用。
(2)示波器的存儲(chǔ)深度比較?。阂话銇碇v示波器的存儲(chǔ)深度有限,有與存儲(chǔ)深度和采樣率采樣時(shí)長有很大的聯(lián)系:
存儲(chǔ)深度=采樣率X顯示時(shí)間
那么在上面的公式的原則下,示波器的存儲(chǔ)深度是一定的,我們想要設(shè)置較高的采樣率的話就無法顯示較長的波形,如圖2-8所示,想要的到足夠長的波形的話采樣率則會(huì)不足,如圖2-9所示。
圖2-8
圖2-9低采樣率
(3) 沒有協(xié)議解碼功能:
如圖2-7所示,示波器抓取到的波形只有光禿禿的波形,我們需要自己將波形放大去仔細(xì)辨認(rèn)才能得到其中的信息。
圖2-10邏輯分析儀解碼結(jié)果
而相比于示波器邏輯分析儀能更好的輔助工程師抓取,識(shí)別數(shù)字信號(hào)。如圖2-10所示邏輯分析儀帶有解碼功能,它可以自動(dòng)幫助工程師讀取出其中數(shù)據(jù)。邏輯分析儀的通道數(shù)量一般都在16個(gè)以上,并且在存儲(chǔ)深度這方面,邏輯分析儀要遠(yuǎn)遠(yuǎn)大于示波器,因此他可以記錄很長的數(shù)據(jù)。
3.邏輯分析儀準(zhǔn)備
邏輯分析儀使用詳情可參考:https://www.dreamsourcelab.com/doc/DSView_User_Guide.pdf
3.1.設(shè)備連接和狀態(tài)檢查
邏輯分析儀帶有一個(gè)type-c的接口,使用正確的連接線價(jià)格邏輯分析儀接入電腦的USB接口(如果邏輯分析儀是支持USB 3.0 接口的話接入U(xiǎn)SB 2.0接口會(huì)影響其最高速率)。一定要等到邏輯分析儀指示燈顯示為綠燈和軟件上顯示為正確的儀器設(shè)備,此時(shí)才能正確地操作和使用邏輯分析儀。
圖3-1
3.2.被測(cè)信號(hào)連接
正常連接好USB后,邏輯分析儀會(huì)亮綠燈,再將排線插入邏輯分析儀的檢測(cè)通道。排線四個(gè)通道分為一組,基礎(chǔ)版設(shè)備4個(gè)通道配一根地線,增強(qiáng)版每一個(gè)通道都配有地線,由于一般情況下的IIC速率都比較小,所以我們只需要連接兩個(gè)通道和一根公共地線就行了。
圖3-2
4.波形抓取和協(xié)議分析
4.1.采集設(shè)置
采集時(shí)長、采樣率:關(guān)于采樣率和采樣時(shí)長,我們需要明白的一點(diǎn)是他們都和存儲(chǔ)深度有關(guān)。存儲(chǔ)深度=采樣率*窗口顯示時(shí)長
IIC總線的傳輸速率一般是幾百KHZ,我們的傳輸速率設(shè)置為幾MHz就行。這里我們采用4MHz的采樣率對(duì)IIC進(jìn)行采樣。這里不同的采樣率下邏輯分析儀的最長采樣時(shí)長是不一樣的,DSView會(huì)根據(jù)你設(shè)置的采樣率來計(jì)算出最長的采集時(shí)長。你可以根據(jù)自己的數(shù)據(jù)量選擇相應(yīng)的采樣時(shí)長。
圖4-1
運(yùn)行模式和閾值:DSView中邏輯分析儀抓取信號(hào)的運(yùn)行模式有stream和buffer模式。stream模式下不同通道數(shù)有不同的最高采樣率,而buffer模式下最高采樣率是固定的。另外就是由于stream模式采用的是PC的內(nèi)存所以有很長的采樣深度。DSView的電壓閾值可以設(shè)置的范圍是0~5V之間。通常的3.3V數(shù)字系統(tǒng),我們?cè)O(shè)置閾值電壓為1.0V就可以,如果設(shè)置太低或者太高會(huì)導(dǎo)致信號(hào)不精準(zhǔn)。
圖4-2
這里需要注意的是stream模式下DSView無法進(jìn)行高級(jí)觸發(fā),只能進(jìn)行一些簡(jiǎn)單觸發(fā),如果需要用邏輯分析儀抓取特定的數(shù)據(jù)的話需要將運(yùn)行模式調(diào)整到buffer模式下。
圖4-3
4.2.觸發(fā)條件設(shè)置和采集
簡(jiǎn)單觸發(fā):簡(jiǎn)單觸發(fā)只需要通過設(shè)置某個(gè)通道的觸發(fā)條件就可以實(shí)現(xiàn)信號(hào)的抓取。如圖4-4所示我們?cè)O(shè)置觸發(fā)條件為當(dāng)通道1產(chǎn)生邊沿信號(hào),當(dāng)通道1產(chǎn)生上升沿或者下降沿的時(shí)候就會(huì)觸發(fā)。
圖4-4
采集:DSView能夠?qū)崿F(xiàn)立即和正常捕獲。立即捕獲可以理解為立即抓取當(dāng)前的IIC信號(hào),不會(huì)顧及觸發(fā)條件。當(dāng)你的IIC信號(hào)比較短,并且你設(shè)置的采樣時(shí)長比較短時(shí)可能會(huì)抓取不到波形。
正常捕獲只需要點(diǎn)擊開始按鈕(或者按鍵盤S鍵)就可以進(jìn)入正常捕獲模式。正常捕獲可以響應(yīng)觸發(fā)條件,并且可以設(shè)置采集模式。
圖4-5
DSView運(yùn)行單次采集和重復(fù)采集。單次采樣只允許你采集一次便會(huì)停止采集。重復(fù)采集是完場(chǎng)一次采集后等待響應(yīng)的時(shí)間間隔后又會(huì)重新開始采集并不斷這樣的循環(huán)。如圖4-6所示我們可以設(shè)置間隔采集的時(shí)間,設(shè)置范圍為1~10S。
圖4-6
4.3.波形查看和測(cè)量
縮放:波形的縮放通過鼠標(biāo)滾輪就能夠?qū)崿F(xiàn)波形的縮放。也可以通過鍵盤上的左右鍵來縮放波形。還可以通過鼠標(biāo)右鍵框選住波形來將波形細(xì)節(jié)放大(右鍵框選只可以放大不能縮小波形)。
圖4-7右鍵框選放大
移動(dòng):按住鼠標(biāo)左鍵能夠?qū)崿F(xiàn)波形的左右移動(dòng)。
頻率測(cè)量:直接將鼠標(biāo)移動(dòng)到波形的中央,就可以計(jì)算這個(gè)信號(hào)的頻率,周期等信息。
圖4-8鼠標(biāo)檢測(cè)頻率
光標(biāo)運(yùn)用:當(dāng)你的波形比較長窗口無法完全顯示的時(shí)候,我們可以使用光標(biāo)標(biāo)記你想觀察的地方然后根據(jù)光標(biāo)實(shí)現(xiàn)波形位置的跳轉(zhuǎn)。在波形的上雙擊就能添加光標(biāo),光標(biāo)的可添加數(shù)量不受限制。當(dāng)你想要實(shí)現(xiàn)位置跳轉(zhuǎn)的時(shí)候直接鼠標(biāo)右擊光標(biāo)就會(huì)出現(xiàn)相應(yīng)的序號(hào),然后直接點(diǎn)擊序號(hào)跳轉(zhuǎn)到相應(yīng)的光標(biāo)。
圖4-9光標(biāo)跳轉(zhuǎn)GIF圖
4.4.協(xié)議添加和解碼分析
我們采集到的IIC總線上面的信號(hào)是兩條波形圖,比較生硬不利于我們了解其中包含的信息。這個(gè)時(shí)候我們就需要使用到DSView中所包含的解碼功能。解碼功能可以將IIC協(xié)議中包含的內(nèi)容以直觀的形式表現(xiàn)出來,方便我們分析。
步驟一:點(diǎn)擊菜單欄上面的解碼DSView界面右側(cè)就會(huì)出現(xiàn)添加解碼協(xié)議的窗口。
圖4-10
步驟二:在右側(cè)出現(xiàn)的窗口中選擇IIC協(xié)議,在點(diǎn)擊這個(gè)加號(hào)添加協(xié)議。
圖4-11
步驟三:點(diǎn)擊完加號(hào)后下方就會(huì)出現(xiàn)一個(gè)IIC的協(xié)議,點(diǎn)擊左側(cè)的設(shè)置按鈕(齒輪)進(jìn)入解碼設(shè)置的窗口。
圖4-12
步驟四:首先設(shè)置顯示的內(nèi)容,我們可以根據(jù)自己的需求設(shè)置,然后最重要的是需要將采集IIC的通道與SCL和SDA相對(duì)應(yīng),從機(jī)地址可以顯示為包不包含讀寫位,最后解碼區(qū)域可以設(shè)置為開始到結(jié)束,這樣采集到的所有數(shù)據(jù)都會(huì)被解碼,如果想要解碼特定的區(qū)域可以添加兩條光標(biāo),解碼區(qū)域設(shè)置為這兩條光標(biāo)之間。
圖4-13
步驟五:結(jié)果分析
圖4-14
如圖4-14所示我們?cè)O(shè)置了解碼區(qū)間為光標(biāo)1和光標(biāo)2之間的區(qū)域。這一段IIC時(shí)序表達(dá)的意思就是從地址為1010000的設(shè)備之中的0X15的內(nèi)部地址當(dāng)中讀取數(shù)據(jù),讀出的數(shù)據(jù)位0X54。
5.進(jìn)階分析
5.1.采集技巧
循環(huán)采集:當(dāng)你遇到需要觀察一個(gè)特定的信號(hào)時(shí)采用單次可能會(huì)不方便操作。比如不同按鍵代表不同的信息,我們可以設(shè)置循環(huán)采集抓取按鍵的信息。
圖5-1
觸發(fā)定位:如果我們想觀察一段完整的波形,可以將觸發(fā)位置盡量調(diào)到最前(1%)或最后(90%)。這樣就能觀察到觸發(fā)前和觸發(fā)后的波形,如圖5-3所示。
圖5-2
圖5-3
5.2.高級(jí)觸發(fā)
DSView中可以使用高級(jí)觸發(fā)來分析傳輸?shù)膬?nèi)容。
步驟一:首先需要在觸發(fā)設(shè)置里面選擇高級(jí)觸發(fā)選項(xiàng)。
圖5-4
步驟二:設(shè)置觸發(fā)位置,觸發(fā)位置可以根據(jù)自己的需要設(shè)置在任意位置。觸發(fā)的位置決定了你要抓取的信號(hào)位于你抓取的全部信號(hào)的百分比位置。設(shè)置時(shí)只需要填入數(shù)值或者用鼠標(biāo)拖動(dòng)位置條。
圖5-5
步驟三:選擇串行觸發(fā),IIC是一種串行的通信方式,所以我們選擇的是串行觸發(fā),上面的總觸發(fā)等級(jí)只在多級(jí)觸發(fā)的時(shí)候使用。
圖5-6
步驟四:設(shè)置開始停止條件、時(shí)鐘設(shè)置。
首先需要將通道與你測(cè)試的IIC線對(duì)應(yīng),例如通道0對(duì)應(yīng)的是SCL,通道1對(duì)應(yīng)的是SDA。IIC的開始條件為當(dāng)SCL為高電平時(shí)SDA產(chǎn)生一個(gè)下降沿,停止條件為當(dāng)SCL為高電平時(shí)SDA產(chǎn)生一個(gè)低電平,所以開始條件和停止條件設(shè)置為圖5-7左側(cè)所示。時(shí)鐘設(shè)置用來定義時(shí)鐘采樣的時(shí)刻,一般情況我們可以設(shè)置為上升沿采樣。
圖5-7
步驟五:設(shè)置數(shù)據(jù)通道、數(shù)據(jù)位寬、數(shù)據(jù)值
數(shù)據(jù)通道指的是SDA連接的是哪個(gè)通道,這里我們連接的是1通道。由于IIC協(xié)議中每傳送1字節(jié)數(shù)據(jù)就需要一個(gè)應(yīng)答位,所以數(shù)據(jù)位寬設(shè)置為9。例如我設(shè)置在出現(xiàn)0X57這個(gè)數(shù)據(jù)時(shí)觸發(fā),設(shè)置的數(shù)據(jù)值應(yīng)該為010101110,最后一位為應(yīng)答位。
當(dāng)然如果我們不需要抓取特定的數(shù)據(jù)時(shí),數(shù)據(jù)值、數(shù)據(jù)位寬、數(shù)據(jù)通道三項(xiàng)可以不用設(shè)置。
圖5-8
步驟六:查看數(shù)據(jù)
邏輯分析儀抓取的結(jié)果會(huì)顯示在主界面上面,觸發(fā)的位置就是我們想要獲得的數(shù)據(jù)的位置。
我們還可以通過列表查詢的方式來來抓取的這一串?dāng)?shù)據(jù)中的位置。如圖5-10所示,輸入要查詢的數(shù)據(jù)再點(diǎn)擊該數(shù)據(jù)就能在主界面中快速定位該數(shù)據(jù)。
圖5-9
圖5-10
5.3.Stack高階協(xié)議解析
稍微復(fù)雜一點(diǎn)的協(xié)議都會(huì)采用分層的結(jié)構(gòu),例如使用IIC對(duì)EEPROM的讀寫操作,其協(xié)議是基于傳統(tǒng)的IIC,但是在這其中還包含了更多的含義。
我們以對(duì)EEPROM操作展示Stack高階協(xié)議解析過程
操作步驟:
(1)選擇“1:IIC”。IIC協(xié)議添加“1:IIC”不能添加“0:IIC”,“0:IIC”不能顯示多層協(xié)議。
圖5-11
(2)點(diǎn)擊“多層協(xié)議”
圖5-12
(3)添加對(duì)應(yīng)的EEPROM協(xié)議
圖5-13
(4)得到結(jié)果
從結(jié)果可以看出,這5層的解碼將IIC協(xié)議通訊的從每一位到整體的意義描述的很詳細(xì)。
-
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44500瀏覽量
632180 -
I2C總線
+關(guān)注
關(guān)注
8文章
386瀏覽量
60792 -
邏輯分析儀
+關(guān)注
關(guān)注
3文章
214瀏覽量
23127
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論