介紹
大多數以微控制器為基礎的設計都使用I2C或 SPI (或兩者皆有), 在控制器之間以及控制器和外圍晶片之間進行通訊。進行疑難排解 時,可查看嵌入式系統在晶片傳送特定的 I2C 或 SPI 封包時所發生 的事件可能是至關重要的能力。許多管理相對較慢參數的晶片,如 溫度感應器、馬達控制、人機介面或電源管理,會使用這些匯流排 作為與系統中其餘晶片通訊的主要管道。其他更高速的晶片 ( 如通 訊 IC、時脈和ADC) 通常會使用這些匯流排進行配置。例如,若要 疑難排解通電後冷卻風扇所發生的問題,您可以查看傳送到風扇控 制器 IC 的 SPI 命令的時序和結構, 以及風扇和電源供應器的驅動 訊號。
I2C和 SPI 匯流排是明確定義且相對堅固,但仍可能受到雜訊、電 路板佈局、重設問題以及實作中的細微差異等影響。這些有時會導 致匯流排錯誤和鎖定。配備解碼功能的示波器以同時查看匯流排 資料和匯流排訊號的狀況。
I2C
I2C,(或稱「I 平方 C」) 代表內部整合式電路 (Inter-Integrated Circuit)。這 最初是由飛利浦 (Philips) 在 1980 年代初期開發,以提供一種將控制器連 接到周邊裝置晶片的低成本方式。現在已演變成嵌入式系統中裝置之間的 通訊世界標準。這種簡單的雙線設計已經發展到各種晶片,如來自眾多領 先晶片製造商的 I/O、A/D、D/A、溫度感應器、微控制器和微處理器,包 括:Analog Devices、Atmel、Infineon、Cypress、Intel、Maxim、NXP、 Silicon Labs、ST Microelectronics、Texas Instruments 等。
運作方式
I2的實體雙線介面由雙向串列時脈 (SCL) 和資料 (SDA) 線組成。I C 支援匯流排上的多個主裝置 (Master) 和從屬裝置 (Slave) ,但一次只能 有一個主節點處於活動狀態。任何I2裝置均可附加到匯流排,允許任 何主裝置與從屬裝置交換資訊。每個裝置由唯一的位址識別。根據其功 能,裝置可以作為發射器或接收器運作。支援三種位元速率:100 kb/s (標準模式)、400 kb/s (快速模式) 和 3.4 Mb/s (高速模式)。裝置的最大 數量是由最大電容 400 pF 決定,或大約為 20-30 個裝置。
設定 I2C BUS 匯流排解碼
The I2C標準規定了以下格式:
- 開始 - 表示裝置正在控制匯流排,而訊息將隨之而來。
- 位址 - 表示將讀取或寫入的裝置位址的 7 或 10 位元數字。最初,I C 僅 使用 7 位元位址,但也發展為允許 10 位元位址。
- 讀/寫位元 - 1 位元,表示資料是否將從裝置讀取或寫入裝置。
- 確認 - 來自從屬裝置的一個位元,以確認主裝置的行為。通常每個位址 和資料位元組都有一個確認位元,但並非必然。
- 資料 - 從裝置讀取或寫入的整數位元組。
- 停止 - 表示訊息完成,主裝置釋放匯流排。
有兩種方法可以對I2C位址進行群組以進行解碼:在 7 位元中加上讀取或 寫入 (R/W) 位元方案,或在 8 位元 (位元組) 中 (此方法的 R/W 位元已內含 為位址的一部分。7位元位址方案是特定的I2C標準,由韌體和軟體設計工 程師採用。但許多其他工程師則使用 8 位元位址方案。Tektronix 示波器可 以在任一方案中解碼資料。
在 Tektronix 示波器上,按下前面板匯流排按鈕, 可讓您將示波器的輸入定義為匯流排。只需定義哪 個通道時脈和資料開啟,以及用於確定邏輯 1 和 0 的數位閾值級別,即可讓示波器瞭解通過匯流排傳 輸的通訊協定。
解讀I2C匯流排
時間相關波形和匯流排解碼顯示器對於許多硬體工程師而言是熟悉和實用 的格式。解碼匯流排波形會指示I2C訊息的元素。
對於韌體工程師而言,結果表格式可能更加實用。這個匯流排活動的時間 戳記顯示可以輕鬆地與軟體清單進行比較,並提供執行速度的簡單計算。
結果表還提供了連接回波形顯示。您可以按一下表格顯示畫面中的一行, 示波器會自動放大對應的匯流排訊號,並產生解碼的匯流排列波形,且顯 示於畫面下方。
在I2C匯流排上觸發
當根據一或多個串列匯流排除錯系統時,示波器 的關鍵功能之一是使用匯流排觸發隔離並擷取特 定事件。當匯流排觸發正確設定時,示波器將擷 取所有輸入訊號,一個指定的匯流排事件將位於 觸發點。此範例示範了在位址 0x50 和資料 0x00 上觸發。
搜尋I2C匯流排
在 Tektronix 示波器上,您可以使用自動化 Wave Inspector 搜尋來尋找 滿足搜尋條件的所有匯流排事件,並確定發生了多少事件。此設定類似 於匯流排觸發設定,且允許示波器尋找並標記所有指定的匯流排事件。 在此例中,自動搜尋功能正在尋找資料值0x16。此資料值僅會在所擷取 的波形中發生一次,且串列資料封包的位置會用粉色括號圖示顯示。
SPI
串列周邊介面匯流排 (SPI) 最初由摩托羅拉 (Motorola) 在 1980 年代後期為 68000 系列微控制器開發。 由於匯流排的簡單性和普及性,多年來,許多其他製造商都採用了此標準。現在已廣泛用於嵌入式系統 設計中常用的各種組件。SPI 主要用於微控制器及其直接周邊裝置之間。通常用於手機和其他行動裝置, 以在 CPU、鍵盤、顯示器和記憶體晶片之間傳送資料。
運作方式
SPI 匯流排是一個主/從結構的 4 線串列通訊匯流排。四個訊號是時脈 (SCLK)、主輸出/從屬輸入 (MOSI)、 主輸入/從屬輸出 (MISO) 和從屬選擇 (SS)。每當兩個裝置通訊時,一個會視為「主」裝置,另一個則為 「從屬」裝置。 主裝置會驅動串列時脈。同時傳輸和接收資料,使其成為全雙工通訊協定。
SPI 不會針對匯流排上每個裝置使用獨特的位址,而是 使用 SS 行來指定哪個裝置資料正在傳輸至/自哪個裝置。 因此,匯流排上的每個獨特裝置均需從主裝置取得自己 的 SS 訊號。如果有 3 個從屬裝置,主裝置就會送出 3 個 SS 訊號,每個從屬裝置一個。
SETTING UP SPI BUS DECODING
在某些情況下,如果通訊不需要自從屬裝置返回主裝置,則 MISO 訊號可能 被完全省略。在其他情況下,只會有一個主裝置和一個從屬裝置,且 SS 訊 號會連接至接地上。這通常被稱為 2 線 SPI。
當發生SPI資料轉移時,在MOSI上會移出一個 8 位元的資料字,而在MISO 上則會移入不同的 8 位元資料字。 這可視為一個 16 位元圓形移位暫存器。 當發生轉移時,此 16 位元移位暫存器會移動 8 個位置, 從而在主裝置與從 屬裝置之間交換 8 位元資料。時脈極性 (CPOL) 和時脈相位 (CPHA) 暫存器 對可確定資料驅動的時脈邊緣。每個暫存器都有兩種可能的狀態,允許四種 可能的組合,而所有這些組合彼此不相容。因此,主/從對必須使用相同的參 數值進行通訊。如果在不同組態中使用多個從屬裝置,則每當需要與其他從 屬裝置通訊時,主裝置必須進行重新配置。
在本例子中,使用被動式探棒在示波器上的類比 通道 (通道 1、通道 2 和通道 3) 擷取 SPI 訊號。 數位通道也可用於匯流排解碼。使用匯流排組態 功能表,您可以指定哪些通道連接到時脈、資料 和從屬選擇訊號、閾值、極性和字詞大小,來定 義 SPI 匯流排。
解讀 SPI 匯流排
若將顯示模式設為匯流排和波形,可快速驗證每個輸入訊號的數位解釋 (類 比訊號與相應閾值電壓的比較)。這些數位訊號 (綠色高,藍色低) 之後會根 據 SPI 通訊協定進行解讀。當正確設定時,示波器可顯示解碼的結果。
在 SPI 匯流排上觸發
考慮使用菊鏈 SPI 架構的範例系統。 子系統控制向 系統其餘部分提供射頻時脈的壓控振盪器 (VCO)。 VCO 由主 CPU 向 VCO 寫入六個 24 位元字來初始 化。訊號似乎符合 SPI 的電氣規格,但是 VCO 並未 產生正確的頻率。
結果表視圖可用於檢查 VCO 初始化。示波器可以設為在 SPI 從屬選擇訊號啟用時觸發。當系統通電時,示波器將擷取並顯示初始化時序。
在上例中,我們使用了一個簡單的 SS Active 觸發器。Tektronix 示波器中的完整 SPI 觸發功能包括以下類型:
這些觸發器可讓您隔離和擷取您感興趣的特定匯流排流量,而解碼功能可讓您立即查看擷取中通透過匯流排傳輸的每個訊息的內容。
在 SPI 匯流排上搜尋
若要尋找符合特定搜尋條件的所有匯流排事件,您可以使用自動化的 Wave Inspector進行。此設定類似於匯流排觸發設定,將會尋找並標記所有指定的匯流排事件。在本例中,自動搜尋正在尋找24位元資料值 0x00002X。此資料值在擷取的波形中出現23次。使用前面板導航箭頭按鈕可輕鬆在標記的事件之間進行導覽。特定串列資料封包之一的位置在靠近顯示器底部,以粉色括號圖示顯示。