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