用 Saleae Logic Analyzer 分析 SPI 匯流排:快速掌握波形擷取與協定解碼技巧
- 15小时前
- 讀畢需時 6 分鐘
《 快速進入本文重點 》
〈SPI 序列周邊介面〉是嵌入式系統中最常見的高速序列通訊介面,廣泛應用於 Flash、EEPROM、ADC、DAC、LCD、感測器、FPGA 等裝置。
首先,簡介 SPI 通訊:
SPI 以同步式(Synchronous)的全雙工序列通訊運作,由一個 Master 控制一個/多個 Slave 裝置。資料傳輸時,Master 提供時脈(Clock),並與 Slave 同步交換資料。
基本 SPI 通訊由 4 條訊號線組成:
SCLK(Serial Clock):由 Master 提供時脈訊號
MOSI(Master Out Slave In):Master 傳送資料至 Slave
MISO(Master In Slave Out):Slave 回傳資料給 Master
CS / SS(Chip Select / Slave Select):選擇欲通訊的 Slave 裝置


SPI 最大特色包括:高傳輸速率、全雙工(Full Duplex)通訊、不需裝置位址(Address)、通訊延遲低、可支援多個 Slave。十分適合需要高速資料交換的應用,例如以下場景:
雖然 SPI 架構簡單、傳輸效率高,但只要時序、時脈或設定稍有錯誤,就可能造成資料讀寫異常。硬體開發與韌體除錯過程中,需要頻繁地透過邏輯分析儀(Logic Analyzer)監控傳輸訊號和波型。
Saleae Logic Analyzer 邏輯分析儀兼具高速取樣與使用簡單,可快速將 SPI 訊號轉換為可讀的資料內容,讓工程師迅速找出問題所在。除了 SPI,Saleae Logic Analyzer 還能分析 CAN、I3C、MDIO……..等超過 20 種不同協定。

使用 Saleae Logic Analyzer 擷取 SPI 訊號
最常見的 SPI 通訊,由一個 Clock 時脈訊號、兩個 Data signal (MISO 和 MOSI)和一個 Enable signal 啟動。使用〈Saleae Logic Analyzer〉進行除錯,其內建軟體〈Logic 2〉具備 SPI Protocol Analyzer 功能,可將原本只有高低電位變化的數位波形,自動解碼為 Hex、Binary、Decimal 或 ASCII 等資料格式,大幅降低人工判讀波形的時間。透過正確的接線與參數設定,即可快速完成 SPI 匯流排的分析。


Step 1:連接 Logic Analyzer 至 SPI 匯流排
首先,將 Saleae Logic Analyzer 連接至待測 DUT,並確保所有訊號都與 DUT 共地(Common Ground):
※ 若實際應用中沒有使用 MISO 或 CS 訊號,Saleae 的 SPI Analyzer 也支援將未使用的通道設定為 None,只要有 Clock 與一條資料線(MOSI 或 MISO)即可完成基本的 SPI 解碼。
Step 2:開始擷取波形
完成接線後,開啟 Logic 2 軟體,設定適當的數位取樣率後開始錄製。為了完整還原 SPI 訊號,建議取樣率至少設定為 SPI Clock 的 4~10 倍。例如,若 SPI 時脈為 20 MHz,建議設定 200 MS/s 左右的取樣率,以確保每個位元都能被精確擷取。錄製完成後,即可用滑鼠放大波形,確認 CS、SCLK、MOSI 與 MISO 的時序是否正常。
Step 3:新增 SPI Analyzer
完成擷取後,在 Logic 2 使用畫面右側點選 Add Analyzer,選擇「SPI」(也可以進階選擇「SPI Flash」、「QSPI」等設定)。
接著依序設定:
Clock:選擇 SCLK 所在通道
MOSI:選擇 MOSI 通道
MISO:選擇 MISO 通道(若未使用可設為 None)
Enable(CS):選擇 Chip Select 通道(※ 若沒有可設為 None,如下圖)

此外,還需設定 SPI 通訊格式,包括:
Bit Order:MSB First 或 LSB First
Bits per Transfer:每次傳輸位元數(常見為 8-bit,也可設定至 64-bit)
Clock Polarity(CPOL):Clock 閒置時為 High 或 Low
Clock Phase(CPHA):資料於 Clock 的前緣或後緣取樣
Enable Active Level:設定 CS 為 Active Low 或 Active High(若有使用 CS)
設定完成後,Saleae 便會立即將波形解碼,直接顯示每筆 SPI 傳輸內容。


※ 若解碼結果與預期不符,不一定代表硬體故障,也可能是 Analyzer 的設定與實際 SPI 規格不一致。例如:
Clock Polarity(CPOL) 設定錯誤,可能導致 Logic 軟體顯示 Settings Mismatch 或 Clock Idle State 錯誤提示。
Clock Phase(CPHA) 設定不正確,則可能造成資料位元錯位(Bit Shift),導致解碼內容完全不同。
這些情況,通常只需切換 CPOL 或 CPHA,即可快速確認哪一種 SPI Mode(Mode 0~Mode 3)才是待測裝置使用的設定。(資料來源:Saleae)
Step 4:多個 SPI 裝置的分析技巧 (兩種情況)
一、共用 MISO 和 MOSI 的設置
若要將多個設備連接到同一個 SPI 匯流排時,只需增加更多 Analyzer 連接不同 Slave,每個 Slave 都需要一個 Enable signal;所有 Analyzer 可共享同一個時脈、MISO 和 MOSI 訊號。
當一條 SPI 匯流排連接多個 Slave 時,每個裝置通常都有各自獨立的 CS(Chip Select) 訊號。Saleae Logic Analyzer 允許在同一筆擷取資料中新增多個 SPI Analyzer,共用相同的 SCLK、MOSI 與 MISO 通道,但分別指定不同的 CS 通道,即可同時分析多個 SPI 裝置的通訊內容,而不需重新錄製波形。
二、MISO 和 MOSI 的不同設置
在某些情況下,可能需要對兩個資料通道設定不同的參數。這可以透過使用兩個 SPI 分析儀輕鬆實現。 Saleae Logic Analyzer 內的軟體對「共享相同通道的分析儀數量」沒有限制,因此只需添加兩個使用相同時脈的 SPI 分析儀,並啟用對應的通道。然後,在每個分析儀上,停用其中一個資料通道。例如以下操作方式:
SPI Analyzer 1
MOSI channel - MOSI input selected
MISO channel - “none”
SPI Analyzer 2
MOSI channel - “none”
MISO channel - MISO input selected
Step 5:修正資料位元對齊(Alignment)問題
有些情況下,Analyzer 會無法擷取到完整的 SPI 封包,例如:開始錄製時已經在進行傳輸過程,或未使用 CS 訊號進行同步,可能導致 Analyzer 無法正確判斷每個 Byte 的起始位置,造成資料解碼錯位。
此時,可先在第一個有效 SPI 封包前加入 Timing Marker,再將 Marker 前的資料刪除(※ 注意,此操作無法撤銷)讓 Analyzer 從正確的位置重新開始解碼,即可恢復正常的 Byte 對齊。

透過 Saleae Logic Analyzer,即使面對高速 SPI 匯流排,也能快速完成訊號擷取、協定解碼與時序驗證,大幅提升硬體除錯與韌體開發效率。
結語
當 SPI 通訊發生異常時,問題往往不是出在程式本身,而是出在接線、時序或通訊設定等細節。Saleae Logic Analyzer 能將抽象的數位訊號轉換為清晰易讀的波形與資料,協助工程師快速驗證 CS 是否正確啟用、Clock 是否穩定、資料是否正確傳輸,以及 SPI Mode 是否設定一致。
透過高速取樣、即時錄製與自動協定解碼,即使是複雜的 SPI 匯流排,也能快速定位問題、縮短除錯時間,讓硬體開發與韌體驗證更加有效率。若您對 Saleae Logic Analyzer 或各種高速匯流排除錯有興趣,歡迎聯絡 Eagletek 翔宇科技。
延伸閱讀:
參考資料:





