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