愛伊米

乾貨分享|用混合訊號示波器探索匯流排的秘密

本期應用指南摘要

混合訊號示波器具有數模混合測量功能。本文以

MSO6B系列示波器

為主要測量儀器,

從UART協議入手,介紹了匯流排解碼的基本概念和示波器具體操作方法

。文中還介紹了I2C和SPI協議,並對比手動解析和示波器自動解碼的過程和結果,充分展現了現代化混合訊號示波器的混合測量能力。對於訊號失真的場景,從數字和模擬訊號2個角度,進一步闡述了混合除錯的思想。

以下影片先為大家簡單介紹

MSO6B示波器的測試功能

。(友情提示:本期乾貨內容較多,採用文字與影片結合方式,建議以先影片後文字的順序,耐心觀看學習喔~)

本文內容主要包括:

1。  使用示波器測量混合訊號

2。  匯流排解碼快速上手

2。1  UART協議解析

2。2  示波器設定

2。3  示波器解碼結果

3。  常見協議的解碼

3。1  I2C協議

3。2  SPI協議

4。  混合除錯

5。  總結

參考文獻

1. 使用示波器測量混合訊號

泰克的MSO系列示波器,是混合訊號示波器,顧名思義,除了具有良好的模擬訊號捕捉還原能力外,還具有數字訊號採集和分析能力。

因此MSO系列示波器,不僅可以作為一臺專業的高速邏輯分析儀,還能同步處理模擬和數字訊號,實現數模混合測量功能。

以MSO68B示波器為例,它具有8個通道的輸入。對於每個通道而言,它不僅僅是可以輸入1路模擬訊號的傳統模擬通道,而是名為FlexChannel的數模混合通道。對於每一個FlexChannel,可以配置為1個模擬輸入,或者8個數字輸入。

因此8個FlexChannel,可以最多配置為8乘以8共64個數字通道。

進一步的,得益於泰克自研的ASIC晶片,這些邏輯通道的取樣率最高可以達到模擬取樣相同的速率,例如25GSa/s,完全可以勝任高速邏輯訊號的分析。

以觀察一個數字模擬轉換器(DAC)的輸入和輸出為例。我們的目標是同時看到8個數字輸入和1個模擬輸出訊號,這對於軟硬體設計、除錯和驗證都是非常有用的。為了將數字訊號輸入示波器,我們需要使用TLP058邏輯探頭,每個邏輯探頭佔用一個FlexChannel,提供8個數字輸入。出於演示的目的,我們在通道1和2上各插入一個TLP058邏輯探頭,示波器上顯示了16路數字輸入,其中C1通道的8路數字輸入連線到DAC的數字輸入。剩餘6個FlexChannel依然作為模擬訊號的輸入,我們在通道3上插入一個標配無源探頭(TPP1000),連線到DAC的模擬輸出。

硬體連線全貌如圖1所示。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖1。 示波器測量混合訊號的硬體連線

簡單設定水平、垂直通道引數和觸發後,就可以在螢幕上觀察到數字和模擬訊號了,

如圖2所示,示波器螢幕的波形顯示分成了多個部分,數字波形、模擬波形都可以同屏展示。

這裡的模擬訊號是一個正弦波,因此簡單使用模擬訊號的上升沿進行觸發,實際上觸發也可以在全部通道上進行按需靈活設定。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖2。 混合訊號測量結果

細心的朋友還可以看到圖2中添加了一條匯流排,把8個數字通道作為一個並行輸入,從而解碼出具體數值。

為了觀察匯流排的細節,可以使用示波器的縮放功能,如圖3所示。

這裡數字和模擬訊號會同步放大,總線上的資料也可以看清了,充分發揮了大螢幕的優勢。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖3。 使用縮放功能檢視混合訊號的細節

本節展示了一個典型的混合訊號的測量和分析過程。下文將重點講解數字訊號的分析方法,特別是匯流排解碼相關的知識和操作方法。

2. 匯流排解碼快速上手

這裡以常見的串列埠(UART)訊號為例,介紹使用混合訊號示波器進行匯流排解碼的基本流程。

2。1

UART協議解析

通用非同步收發傳輸器(UART)也就是大家常見的串列埠,大部分帶微控制器的嵌入式裝置都可以支援。一個完整的UART一般至少需要3根線,除了地線(GND)外,一根線用來接收(RX)、一根線用來發送(TX),實現資料雙向傳輸。

UART的資料幀如圖4所示,包含起始位,資料位和停止位。

圖4。 UART資料幀[1]

一個UART波形的示例如圖5所示。

圖中UART訊號線空閒為高電平,起始位透過拉低電平實現。之後透過高低電平變化來傳輸8個bits的資料。由於UART協議非常簡單,我們手動就可以把資料解碼出來。圖中左邊的資料直譯為10100010(LSB在左),通常記錄時會習慣先寫MSB,因此逆序為01000101(MSB在左),轉換為常用的16進位制就是0x45。同理,右邊的資料解碼的結果是0x6E。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖5。 UART波形和手動解析示例

2。2

示波器設定

本節描述如何用示波器捕捉UART波形,並使用示波器自帶的匯流排解碼功能完成自動解碼。以Raspberry Pi Pico 的UART作為例子,在控制器裡燒錄一個往UART0傳送資料的程式,透過示波器捕捉並解碼。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖6。 Raspberry Pi Pico的UART[2]

如圖6所示,Raspberry Pi Pico的UART0的TX線與GP0複用

,在1號引腳上。因此1號引腳的訊號需要輸入示波器。示波器的垂直系統可以在某個通道連上邏輯探頭,當然這是一個普通的共模訊號,使用無源探頭直接捕捉也是可以的。如果使用邏輯探頭,需要注意門限電壓的設定,Raspberry Pi Pico的低電平為0V,高電平為3。3V,門限電壓設為1。6V左右。水平系統方面,已知波特率是115200 bps,每個bit的傳輸時間約為8。7 us,可先設為100us /div,甚至1ms /div,等觀察到訊號後再做微調。

觸發系統的設定和模擬訊號有所不同,我們可以設定為專用的匯流排觸發。

以演示訊號為例,首先新增匯流排,設定如圖7所示。

UART的一個常見物理層介面是RS-232,因此示波器裡的匯流排型別選擇“RS-232”。位速率即波特率,常用的有9600、115200bps等,根據實際情況設定。資料位數常用的是8位,“極性”用來設定數字“1”用高電平或低電平表示,此例中是高電平表示1。解碼格式不影響解碼結果,只是顯示的格式,這裡選“十六進位制”。其它選項根據實際情況設定,或者預設即可。匯流排設定完成後,就可以用匯流排觸發了,我們選擇“開始”,即匯流排開始資料傳輸的位置,這樣只要總線上有資料傳輸,就會被觸發。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖7。 UART匯流排設定

2。3

示波器解碼結果

如果設定準確,

波形檢視的總線上就會出現實時的解碼結果,如圖8所示。

其中0x45和0x6E的解碼結果,和前文手動解析的結果是一致的。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖8。 UART匯流排解碼結果

接下來更換為邏輯探頭,來檢視Raspberry Pi Pico的UART輸出,如圖9所示。

這裡做了2個小的改動:一是打開了匯流排解碼結果的表格(點選介面右邊的“結果表”),二是把解碼結果用字元形式顯示。我們可以從結果表或者波形檢視中發現,Raspberry Pi Pico輸出的是一個字串“Hello2021”。並且結果表和波形檢視是聯動的,點選某個資料,就會跳轉到波形的對應位置,可以快捷查詢資料,並放大對應的波形,操作十分方便。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖9。 UART解碼結果的進階展示

此外,匯流排觸發也有多種選擇,例如可以選擇透過特定的資料去觸發,這樣就實現了示波器自動找資料的功能。

3. 常見協議的解碼

3。1

I²C協議

I²C是一種積體電路匯流排,硬體連線主要有2根線,一根是時鐘(SCLK),一根是資料(SDA)。

協議標準上規定了在時鐘高電平取樣,因此解碼比較固定,但資料格式需要區分地址、讀寫標誌和資料,在一個位元組內還要留意起始條件(S)、應答(ACK)和停止條件(P),如圖10所示。

根據電平可以解析出二進位制資料流為“10100001 00011000”。根據標準,前7位是地址,轉換為16進位制是0x50,讀寫標誌是1,表示“讀”,記為“R”,之後是資料,轉換為16進位制是0x18。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖10。 I²C波形和手動解析示例(協議格式來自[3])

使用示波器匯流排解碼的設定也比較固定,如圖11所示。

只要指定好時鐘和資料的來源和門限電壓就可以了。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖11。 I²C匯流排設定

解碼結果如圖12所示,可以驗證前2個位元組與手動解析的結果是相同的。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖12。 I²C匯流排解碼結果

3。2

SPI協議

SPI是序列外設介面的縮寫,也是一種常見的晶片之間通訊的介面協議。標準的SPI會用到4根線:1根時鐘(SCLK),2根資料收發,分別是主出從入(MOSI)和主入從出(MISO),1根片選(SS)。與I2C不同的是,SPI是一種事實標準,因此配置比較靈活,每一根線上的訊號都有多種可能的配置選項。例如時鐘訊號可能是上升沿或下降沿有效;資料訊號(MOSI和MISO)可能是低電平或高電平有效;片選訊號可能是低電平或高電平有效。在資料解析方面,也有多種配置:資料字長4-32位都有可能,位順序可能是MSB在前或LSB在前。

因此實際解析時,需要查閱相關文件或者編寫測試程式來確認用到的SPI具體配置如何,否則解析可能不準確。

如圖13所示的一個波形,是時鐘SCLK上升沿有效,MOSI資料是高電平有效(MISO同理,略去),片選訊號SS是低電平有效。

資料方面,字長是8位,位順序是MSB在前。綜合上述配置,不難找出圖中波形代表的訊號是1個位元組,二進位制表示為10010011,轉換到16進製表示為0x93。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖13。 SPI波形和手動解析示例

示波器匯流排解碼的設定也提供了豐富的選項,需要我們仔細選擇正確,如圖14所示。

SCLK設定為上升沿,SS輸入設定為“低態有效”,資料輸入設定為“高態有效”,字大小設為“8 bits”,位順序設為“MS居前”。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖14。 SPI匯流排設定

解碼結果如圖15所示,可以驗證這個位元組與手動解析的結果是相同的。

注意SPI沒有額外的校驗機制,因為匯流排配置錯誤也能夠解碼,但是結果是錯的,在實際操作時一定要注意確認配置。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖15。 SPI匯流排解碼結果

4. 混合除錯

上述UART、I2C、SPI協議的解析,我們預設一個前提是訊號是準確無誤的。因此無論用模擬探頭或者邏輯探頭,只要配置準確,解碼的結果一定是正確的。實際應用時,數字訊號和模擬訊號一樣會存在失真的問題。當數字訊號失真到超過閾值時,邏輯探頭是無法正確解析的,此時會出現資料錯誤。

如圖16就是一個失真的訊號舉例。

除了紅框內的片段,其它位置的電壓在0V和3。3V之間跳變,按協議解碼是16進位制的0xE9。但是紅框內有一個脈衝幅度較低,解碼就出錯了。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖16。 訊號失真舉例

為了找到這樣的失真訊號,可以從2個角度利用混合訊號示波器的相關功能。

(1)

數字角度。

由於資料出錯,可以使用匯流排觸發,搜尋錯誤的值,就能找到這個失真的訊號了。

(2)

模擬角度。

這是一個欠幅訊號,可是使用示波器的欠幅觸發功能。

如圖17所示,示波器的欠幅觸發作用於任意模擬訊號,當該訊號越過下限兩次但未越過上限時觸發。

我們把上限和下限分別設為2。8V和0。2V,就能找到介於二者之間的失真脈衝了。圖17中,觸發位置正是失真脈衝的下降沿。

乾貨分享|用混合訊號示波器探索匯流排的秘密

圖17。 欠幅觸發的設定

從這個例子中,我們可以發現:混合訊號示波器同時可以解析模擬和數字訊號,因此我們也可以根據需要靈活選擇觸發方法,查詢訊號問題,實現板級實時的混合除錯。

5. 總結

使用混合訊號示波器,可以同步處理模擬和數字訊號,實現數模混合測量功能。

本文從常見的UART協議出發,輔以多種匯流排協議的解析,介紹了匯流排解碼的基本概念和具體操作方法,並對比手動解析和示波器自動解碼的過程和結果,充分展現了現代化混合訊號示波器的混合測量能力。

對於訊號失真的場景,從數字和模擬訊號2個角度,進一步闡述了混合除錯的思想。全文全部資料和波形都由實測和實拍得到,貼近應用實際,具有工程參考價值。

參考文獻

[1]https://en。wikipedia。org/wiki/Universal_asynchronous_receiver-transmitter

[2]https://datasheets。raspberrypi。org/pico/pico-datasheet。pdf

[3]https://en。wikipedia。org/wiki/I%C2%B2C