skip to Main Content

最詳細的UART通訊協議分析在這里

下載本篇文章的pdf版本:UART協議分析.pdf

1. 協議基礎

1.1.????協議簡介

? ?UART是“Universal Asynchronous Receiver/Transmitter”,通用異步收發器的縮寫。在19世紀60年代,為了解決計算機和電傳打字機通信,Bell發明了 UART協議,將并行輸入信號轉換成串行輸出信號。因為UART簡單實用的特性,其已經成為一種使用非常廣泛的通訊協議。我們日常接觸到的串口,RS232,RS485等總線,內部使用的基本都是 UART協議 。

? ?為了更好的理解和分析協議與總線的關系,我們通常把一個完整的通訊規范劃分成物理層,協議層以及應用層。物理層只定義真實的信號特性(比如電壓,電流,驅動能力等),以及電信號與邏輯信號0和1的對應關系;協議層不關心底層的0和1具體怎么實現,只規定邏輯信號的協議規范以及通訊過程(例如起始,數據以及結束等);應用層不關心數據是怎么獲取的,只定義數據表示的意義,以及如何實現具體的業務邏輯。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?1 通訊協議的分層實現

? ? ?最簡單的UART協議應用,通常物理層只需要兩根傳輸線,一根用于發送,一根用于接收,從而實現全雙工通訊。對于單向傳輸,也可以只使用一根傳輸線。此類應用最典型的實例就是單片機的RX/TX端口互相連接,從而實現基于TTL電平的UART通訊。對于不同的傳輸距離以及可靠性的要求,替換不同的物理層實現既可以得到我們常見的RS232、RS485等通訊總線。

1.2.???不同的物理層實現

? ? ?由于UART協議層的輸入是邏輯0/1信號,而邏輯0/1信號在物理層可以通過不同的電平標準來區分。針對不同的通訊需求,便可以使用不同的物理層實現。例如簡單的板內通訊,或者常見的設備調試場景,使用簡單的LVTTL/TTL電平即可在兩個設備間進行UART協議通訊。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?2 不同的物理層電平標準

? ? ? 通用的串口則使用的是RS232電平,可以增加傳輸距離,并且抵抗一定程度的信號干擾。付出的成本則是在物理層需要對應的電平轉換芯片來實現,發送端需要將內部的高低電平信號轉換成電壓更高的+/-電壓信號,接收端需要將+/-電壓信號轉換成內部的高低電平信號。

在工業通訊的場景下,為了進一步提高傳輸距離,以及增強信號的可靠性,一般會采用RS485的電平標準。在發送端將普通的高低電平信號轉換成一對差分信號,在接收端將差分信號再轉換成普通的高低電平信號。另外,RS485允許總線上連接多達128收發器,而TTL或者RS232則是點對點的連接。

1.2.1.????基于TTL的UART通訊

? ? ?基于TTL的UART通訊,是UART協議應用最簡單的使用場景。即直接把數字I/O輸出的高低電平作為實際的物理信號進行傳輸。在物理連接上,只需要設備共地,通過一根信號線即可完成單向的設備通訊。如果需要雙向全雙工,使用兩根信號線即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?3 基于TTL的UART通訊

? ? ?為了對比不同物理層實現的差別,我們可以觀察發送相同數據時,不同物理層的實際信號有何不同。這里以發送字符‘D‘為例,通過璞石示波器,直接觀察TTL實現傳輸的信號(探頭接地端連接設備共地端,探頭信號端連接上圖藍色信號線),可以獲得如圖?1?4所示的信號波形。從波形可以看出,當沒有數據傳輸時,UART信號會一直保持在高電平(具體信號幅度由I/O的供電電壓決定),數據傳輸時信號發生跳變,傳輸完成后信號重新回到空閑的高電平狀態。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?4 TTL的UART信號波形

1.2.2.?????基于RS232的UART通訊

? ? ? 為了增強驅動能力,以增加傳輸距離和可靠性,RS232總線采用了雙極性電壓信號來進行物理傳輸。信號在發送/接收之前,通過電平轉換芯片實現內部信號和總線信號的互相轉換。連接方式和TTL電平完全相同,整個物理層只是多了一層電平轉換。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?5 基于RS232的UART通訊

同樣以發送字符‘D‘為例,璞石示波器的探頭連接到信號端,可以采集到如圖?1?6所示的實際波形??梢钥闯?,RS232波形在空閑時為負電壓,當有數據傳輸時,信號開始在正負電壓之間跳變,傳輸完成后重新回到空閑的負電壓狀態。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?6 RS232的UART波形

1.2.3.?????基于RS485的UART通訊

? ? ? RS485為復雜的工業環境而設計,和其它UART協議的物理層相比,RS485總線最大的特點就是使用了差分信號傳輸。信號在發送之前,通過RS485的收發器把單端信號轉換成差分信號,再發送到總線上進行傳輸;同樣在接收之前,總線上的差分信號通過收發器的轉換變成單端信號再送給UART控制器進行接收。在RS485總線上,如果希望進行全雙工的雙向通訊,需要兩對差分信號線(即4根信號線)。如果只進行半雙工的雙向通訊,則僅需要一對差分信號即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?7 基于RS485的UART通訊

? ? ? 還是以發送字符‘D‘為例,使用璞石示波器2個通道的探頭(共參考地),分別連接到其中一對差分信號的A/B端,可以采集到如圖?1?8所示的實際波形??梢钥闯?,A/B端的波形為互補關系。A端波形為正向邏輯(空閑時為正電壓),B端波形為反向邏輯(空閑時為負電壓)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?8 RS485的UART波形

2.????????協議規范

2.1.??????UART幀結構

? ? ? 在上一節的介紹中,我們通過璞石示波器觀察了實際的UART波形,那么這個波形到底是怎么被準確的識別成字符‘D‘,而不是其它內容的呢?這就涉及到UART協議幀結構的定義。如圖?2?1所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?1 UART協議幀結構

? ?當兩個設備需要通過UART協議進行通訊時,它們需要同時約定好以下內容:

  • 每一位信號的時間長度T(波特率?= 1/T)
  • 幀結構中每一項的具體位數
  • 是否有校驗位,以及校驗位的機制(奇/偶/..)

有了這些約定,接收設備只需要等待起始位的到來,再對之后的波形進行固定間隔的采樣即可獲得傳輸的具體信息。以字符‘D‘的波形為例,其解析過程如圖?2?2所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?2 UART波形分析

2.1.1.? ? ?波特率

? ? ? 波特率是UART協議,或者說所有異步串行協議,非常重要的一個概念,即單位時間內(1秒)可表示的bit位個數,或者也可以表述為bit位寬的倒數。例如一個波特率為115200的UART波形表示1秒可容納115200個bit位,也就是說每一位bit數據占大約8.68uS的時長。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?3 波特率的定義

? ? ? ?UART等異步串行協議,為了簡化信號物理連接,降低通訊成本,一般只有一根信號線,無法同時傳輸數據和時鐘信號。收/發設備為了正確解析波形就需要在相同的波特率設置下。而相同的波形使用不同的波特率獲取的信息可能會完全不同。對于接收設備來講,只有起始位可以作為一幀數據的同步點,其它數據都是通過波特率來確定具體的取樣位置。

還是以字符‘D’的波形為例,如圖?2?4所示,如果用錯誤的波特率接收,就可能會得到完全錯誤的數據信息。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?4 波特率錯誤

2.1.2.?????空閑位

? ? ? 設備之間不傳輸數據時以持續的高電平表示空閑??臻e位持續時間越長,兩個數據幀間隔也越長,單位時間傳輸的數據就越少。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?5 空閑位

2.1.3.??????起始位

UART接收端會一直檢測信號線上的電平變化,開始傳輸數據時,發送端將信號線從高電平拉到低電平結束空閑狀態,并保持一個bit位的時長。接收器檢測到高低電平轉換時,開始接收信號。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?6 起始位

2.1.4.?????數據位

? ? ? 數據位包含傳輸的實際數據,如果使用了奇偶校驗,那么數據位長為5~8 bits,如果沒有使用奇偶校驗,則位長為5~9 bits。在一般情況下,數據位為?8 bits,數據首先從最低有效位開始發送,高位在后。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?7 數據位

2.1.5.????校驗位

? ? 校驗位可以用來提高傳輸的可靠性。如果信號在傳輸過程中因為干擾而導致某些位置的電平產生錯誤,通過計算接收的數據和校驗位是否匹配即可判斷數據是否有傳輸錯誤,從而給應用層提供有效信息來決定接受/丟棄對應的數據。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?8 校驗位

2.1.6.????停止位

? ? ? 停止位表示一幀數據的結束,實際信號是一段時間的高電平。停止位的時間長短可以設置為1、1.5或者2bits的停止位。大部分情況使用1bit的停止位。

因為UART是一個異步協議,每一幀的開頭可以用跳變沿來同步,但是停止位只能通過波特率來計算相對位置,如果在停止位的位置識別到一個低電平,則會產生幀錯誤。在通訊過程中,為了減少波特率的誤差導致的問題,可以設置不同的停止位長度來適配。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?9 停止位

3.???使用邏輯分析儀分析UART通訊

3.1.????示波器vs邏輯分析儀

? ? ? ?示波器作為主要的通用測試測量儀器,在觀察模擬信號的細節方面有著天然的優勢。比如說實時運行,配合高波形刷新率,可以方便的觀察到突發的異常信號;再比如進行噪聲評估以及信號質量優化時,示波器可以很好的對比同一條總線上,不同節點上信號的異同,從而找出隱藏的信號完整性問題。

? ? ? 但是示波器亦天然有著一些不方便的地方,除去通道少,屏幕普遍偏小,操作沒有電腦+鼠標的方式靈活可控這些形態上的問題,針對數字信號的采集和分析,示波器最大的問題就是存儲深度太小。一臺幾十萬元的示波器存儲深度也可能只有幾百Mpts。同時,因為存儲深度的限制,當需要做稍微長一點時間的采集時,示波器的真實采樣率就會劇烈的下降,導致采集到的波形無法還原真實的信號,失去了分析的意義。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?1 璞石示波器分析UART信號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?2 DSLogic分析UART信號

? ? ? ?邏輯分析儀是只針對數字信號采集和分析而專門設計的測試測量儀器,其采集出來的波形結果只有高低電平兩個狀態(也就是邏輯上的0和1)。但是卻很好的彌補了示波器在采集和分析數字信號上的不足。

  1. ?1.?????大部分邏輯分析儀都是在PC上操作,借助桌面處理器的強大性能,以及成熟操作系統的交互體驗,極大了提升了數字信號分析的便捷性和效率。
  2. ?2.?????邏輯分析儀通道數多,入門級別的DSLogic邏輯分析儀就有16個通道可以同時采集,用戶也可以以非常合理的成本獲取擁有幾十個,甚至上百個通道的邏輯分析儀產品。
  3. ?3.?????邏輯分析儀的存儲深度更大,比如DSLogic在stream模式下可以達到16G的存儲深度,并且同時保持相當高的采樣率,遠超絕大多數示波器的采集能力。
  4. ?4.?????邏輯分析儀普遍提供豐富的協議解碼功能,可以對數字信號進行深入的分析。例如DSLogic目前支持的解碼協議就多達100多種。大部分示波器的解碼能力有限,而且大多需要單獨購買相應的插件。

我們接下來將重點介紹如何使用邏輯分析儀進行各種情形下UART信號的采集和分析。

3.2.????建立邏輯分析儀的測試環境

3.2.1.?????DSLogic的連接

DSLogic是一款基于USB連接的便攜式邏輯分析儀。DSLogic主機負責信號采集和緩存,然后通過USB把數據傳輸給PC上的上位機軟件DSView。DSView負責波形數據處理,顯示,分析,以及對應的人機交互功能。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?3 連接DSLogic到PC

? ? ?使用時,只需要將DSLogic主機通過USB數據線直接連接到PC主板上的USB端口,打開DSView軟件,并確認DSLogic主機上的指示燈變為常綠狀態。此時便完成了邏輯分析儀的連接和初始化工作。如圖?3?4所示,在DSView軟件上可以觀察到左上角的當前設備名稱,以及對應的連接狀態。

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?4 DSLogic連接狀態

3.2.2.??????UART信號連接

? ? ? 對于所有的測量來講,測試設備和被測信號必須基于一個共同的參考平面,也就是通常我們所說的接地,這樣被測信號才能被正確采集和測量。在某些情況下,會遇到沒有做顯性的接地,但是測量結果貌似沒有問題的情景,這是因為測量設備與被測信號通過其它的方式進行了共地連接,比如使用的同一個電源供電,或者參考地同時接入了市電的接地端等等。但是在進行嚴謹的測量時,測量設備應根據被測信號進行就近接地處理。被測信號到測量設備的信號接地端環路面積越大,信號就越容易被干擾,從而產生測量誤差甚至測量錯誤。

? ?針對UART信號來講,接入邏輯分析儀時,最簡單的情況只需要連接2根線,一根接參考地,一根接被測信號即可。針對我們之前提到的UART協議的不同物理層實現,信號連接的方式會稍有不同。

例如對于TTL電平的UART信號,除了連接參考地之外,只需要連接需要測試的信號(TX或者RX)分別接入邏輯分析儀對應的通道輸入即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?5 TTL信號與邏輯分析儀連接

? ? ? 對于RS232總線信號,我們既可以直接測量電平轉換之后的總線信號(DSLogic在排線輸入端的耐壓范圍為+-30V,RS232的+-15V的信號范圍可以直接接入),也可以測量電平轉換之前的內部數字信號。其接線的方式和TTL信號一致,唯一需要注意的是RS232信號對電平進行了翻轉(空閑時為負電壓,即低電平),在進行UART協議解碼時,我們可以在DSView的解碼設置窗口進行對應的信號電平翻轉(Invert Signal選項設置為yes)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?6 RS232信號與邏輯分析儀連接

? ? ? RS485總線使用的是差分信號,當我們用邏輯分析儀進行信號采集時,需要特別注意被測信號的連接方式。首先,邏輯分析儀的參考地需要連接到對應的被測設備RS485收發器的參考地,這樣才可以保證邏輯分析儀有正確的電平參考平面;其次,對于差分信號,邏輯分析儀只需要采集到與內部信號同極性的高低電平即可。從數字信號的角度來講,差分的方式只是提高信號傳輸的可靠性,不增加額外的信息量。如圖?3?7所示,使用邏輯分析儀測試485總線信號時,連接對應設備收發器的參考地,以及差分總線上的的A+信號即可。

當然,如果只能采集到B-信號,我們也可以在DSView進行解碼時,設置UART解碼器進行信號翻轉的方式來得到正確的協議解析結果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?7 RS485總線與邏輯分析儀連接

3.2.3.??????閾值設置

? ? ? ?邏輯分析儀的閾值為高低電平的判決電壓,也就是說當輸入信號電壓高于閾值電壓時,采集到的便是高電平;當輸入信號電壓低于閾值電壓時,采集到的便是低電平。

針對UART協議,我們之前已經介紹了其有不同的物理層實現,不同的物理層實現有不同的電平標準。我們只需要選擇一個對應的閾值可以區分不同情況下的高低電平即可。如圖?3?8所示的閾值基本可以滿足這個要求。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?8 UART信號的閾值設置

? ? ? 在某些情況下,因為配置或者調試的需要,RS485總線的差分信號幅度可能在比較大的范圍變動。因為RS485的規范規定只要A-B之間的差分電壓大于200mV既可以認為是高電平。此時我們可以借助璞石示波器,觀察實際的信號電平幅度,再來決定合適的閾值設置。只需要確保設置的閾值電壓可以合理的分辨出高低電平即可。

3.3.?????簡單的UART信號采集

? ??? 絕大部分UART信號都是低速信號,例如最常用的波特率115200,表示信號頻率只有115.2KHz。使用DSLogic的默認設置即可直接采集到此類信號。此處以主機固定1s間隔,重復發送字符‘D‘為例,介紹如何使用邏輯分析儀采集和分析此類UART信號。

3.3.1.? ??信號采集

? ? 在準備好硬件和信號連接之后,直接點擊DSView軟件的“開始“按鈕,就可以以默認設置(1MHz采樣率采集1s時長)采集被測信號。如果希望修改采樣率和采集時長,直接在對應下拉框中選擇對應的參數即可。采樣率的設置原則推薦為被測信號最高頻率的10倍或以上,例如對于115200波特率的UART信號,最快的信號頻率為115.2KHz,當選擇1M采樣率時,每bit信號會有8或者9個采樣點,對應的相位誤差為+-1/8(12.5%);當選擇10M采樣率時,每bit信號會有86或者87個采樣點,對應的相位誤差為+-1/86(1.16%)。當然一般情況下也不推薦使用過高的采樣率,因為采樣率越高能采集的時長就越短,另外采樣率過高可能采集到慢速信號單個跳變沿的多次跳變,從而給協議解碼帶來困擾。圖?3?9便是使用默認設置采集得到的信號波形。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?9 默認采集

? ? ? ?從圖?3?9可以看出,通道0采集到持續為高電平的信號,但是并沒有發現有任何跳變。仔細觀察波形窗口上面的時間標尺以及窗口底部的滾動條,可以得知當前窗口顯示的只是采集到的部分波形,不是全部信號。此時可以通過鼠標滾輪縮放,或者在波形區域右鍵雙擊的方式顯示整個采集時長的所有波形。得到如圖?3?10所示的結果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?10 顯示整個采集窗口

? ? ? ?在上圖的基礎上,我們希望只觀察通道0的跳變部分??梢栽凇斑x項”窗口關閉其它通道的波形顯示,調節通道信號的顯示高度。然后將鼠標指向目標波形,并同時通過鼠標滾輪放大所指位置的波形;或者可以通過按住鼠標右鍵框選希望放大的波形區域。另外,按住鼠標左鍵可以對波形進行左右移動。得到如圖?3?11所示的波形細節。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?11 觀察波形細節

? ? ? ?在觀察波形時,把鼠標放到脈沖波形上既可以顯示當前信號的脈沖寬度,周期,頻率以及占空比等信息。同時,也可以通過鼠標雙擊左鍵的方式添加光標,移動光標時會自動吸附到靠近的跳變沿。

3.3.2.?????UART解碼

? ? 邏輯分析儀采集到的信號波形只有高低電平(0/1)在時間上的變化,這不利于我們對信號傳輸的過程和內容進行有針對性的分析。雖然我們可以根據協議規范,用肉眼來翻譯波形對應的協議內容,但是將大大降低分析的效率。DSView自帶的解碼器可以提供豐富的協議解碼內容,使得枯燥的波形變成有意義的字符,標記以及數據內容。極大的方便了工程師對信號的分析和理解,從而找出錯誤信息或者關鍵數據。

在DSView軟件里對已經采集到的波形進行協議解碼非常簡單,只需要打開“解碼”面板,搜索到對應的解碼器(這里我們選擇1:UART協議),設置對應解碼器的選項(包括顯示/通道/幀結構/格式等),確定之后軟件就會開始對選定通道進行UART的協議解碼。并在協議通道顯示解碼的結果。如圖?3?12所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?12 添加UART解碼

? ? ? 在選擇解碼器時,DSView提供便捷的協議搜索功能,只需要在協議搜索框輸入關鍵字符,DSView便會列出所有包含這些字符的解碼器,用戶在其中選擇正確的解碼器即可。如圖?3?13所示和UART相關的有兩個協議0:UART和1:UART,其中0:UART是一個簡化的解碼器,其不進行bits信息的解析,也不支持高層協議的堆疊,當我們只想獲取波形對應的數據時,可以使用此簡化協議來減少解碼的時間和占用的內存資源。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?13 協議搜索

? ? ? 解碼器的設置窗口有很多和解碼相關的設置選項,不同協議的設置窗口內容也會不同。其中有一些所有解碼器都必須設置的選項,比如通道和協議信號之間的對應關系。此處我們使用的是通道0抓取的UART信號,那么對應的需要解碼的通道就應該設置成通道0。

和協議相關的設置選項我們在幀結構的部分都有詳細講解,在實際操作種也可以通過串口的上位機軟件(串口調試助手等)來獲取這些信息。如圖?3?14所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?14 協議相關的選項

? ? 對于解碼的數據內容,DSView支持不同的顯示格式。例如之前采集的UART信號按照ASCII碼的方式顯示字符‘D’,也可以修改成十六進制(Hex)的顯示方式,結果便會顯示0x44。如圖?3?15所示。目前支持的顯示格式有:hex(十六進制)、dec(十進制)、oct(八進制)、bin(二進制)以及ascii碼。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?15 格式選擇

3.4.?????單次UART傳輸的采集

? ? ? 當我們要捕獲的波形是一個偶發信號時,我們并不知道什么時候波形會出現,如果使用直接的采集方式可能大部分時間就只能捕獲到空閑的信號波形,無法抓取到實際傳輸時的信號。

這個時候便可以通過觸發來進行捕獲。通過設置對應的觸發條件,我們可以根據波形的變化來控制信號采集的開始時間,從而精準的捕獲到希望看到的信號波形。

3.4.1.????Buffer模式

? ? DSLogic支持兩種采集模式:Stream模式和Buffer模式。在Stream模式下采集到的數據會實時的傳輸到PC,然后由DSView處理。Buffer模式采集到的數據會先緩存在DSLogic的內部硬件緩存中,等采集完成后再傳輸到PC,由DSView處理。

Buffer模式除了可以達到更高的采樣率這個優點外,還支持更多的觸發選項和設置,比如多級觸發,串行觸發以及觸發位置的設置等。而Stream模式僅支持簡單觸發。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?16 模式選擇

3.4.2.?????觸發設置

? ? ? 對于簡單觸發,我們可以直接設置通道旁邊的觸發選項。其依次對應上升沿,高電平,下降沿,低電平以及任意邊沿觸發。在觸發面板保持默認的簡單觸發模式即可。例如對于不知道什么時候發生的UART傳輸,我們可以選擇下降沿觸發。當UART?信號一直處于空閑狀態時,觸發就不會被滿足。DSLogic會一直等待觸發條件的到來,如圖?3?17所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?17 等待觸發

當UART開始傳輸第一個起始位時,便會激活觸發條件,DSLogic將采集到觸發時的信號波形。如圖?3?18所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?18 觸發采集

? ? ? 我們考慮復雜一點的觸發場景,例如設備A不斷的隨機給設備B發送數據,設備B則根據設備A發送的數據內容回復不同的數據。如果我們想要知道設備B發送數據0之前,設備A給設備B發送了哪些數據,該如何設置觸發條件抓到對應時刻的波形呢?

這里有兩個問題需要解決,首先我們需要設置觸發的位置,從而看到觸發之前的數據,而不是觸發之后的數據;其次我們要找出設備B發送數據0的波形特征,并把其轉換成對應的觸發條件。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?19 觸發位置

? ? 根據UART的協議規則,發送數據0的波形會是一個比較寬的持續低電平脈沖信號。如果UART的波特率為115200,我們設置的采樣率為1MHz,數據0的波形如圖?3?20所示,將會是一個78.125uS左右的低電平脈沖。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?20 UART發送數據0

? ? ??要設置高級觸發或者觸發位置都需要buffer模式的支持,需要首先在“選項”設置“運行模式”為“Buffer模式“,同時不要選中“RLE硬件壓縮“的選項。設置高級觸發條件為通道1出現持續的75個采樣點的低電平(對應1MHz采樣率,也就是75us的低電平),觸發位置設置到80%,便于觀察觸發之前的數據。具體設置如圖?3?21所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?21 高級觸發設置

根據這個觸發條件,當設備B發送數據0時就會觸發,采集到的波形如圖?3?22所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?22 觸發位置

3.4.3.?????重復采集

? ? ?在某些情況下,我們需要動態的觀察一些信號的狀態,比如每次Burst發送的數據內容,但是卻又不知道數據什么時候發出,不可能頻繁的去點擊”開始“按鈕。DSView提供了”重復“采集的模式,可以在滿足觸發時自動采集并更新波形。當我們調試一些周期的突發信號時,便可以通過重復模式非常方便的觀察動態的采集和協議解析的結果。

重復模式可以按圖?3?23所示進行設置。重復間隔是指兩次采樣之間至少停留的時間,方便觀察上一次采集的波形和解碼結果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?23 重復采集模式

3.5.?????????長時間UART傳輸的采集

? ? 當需要采集超長時間的波形進行分析時,我們可以使用Stream模式。DSLogic在Stream模式下可以實現每個通道16G的采樣深度。在1MHz的采樣率下,采集時長可以達到16G/1M?≈?16000s,也就是4個多小時。

3.5.1.???Stream模式

Stream模式的設置如圖?3?24所示,不同的DSLogic硬件版本支持不同的stream模式通道選項。對于U3Pro16來講,基于USB3.0的端口,可以實現3通道@最高1GHz采樣率,6通道@最高500MHz采樣率,12通道@最高250MHz采樣率以及16通道@最高125MHz采樣率。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?24 Stream模式設置

當采集的數據量比較大時,可以使用0:UART協議進行解碼,和1:UART相比,其省略了bits信息的輸出,不支持高層協議堆疊,可以縮短解碼時間,減少內存占用。其它功能和1:UART相同。解碼效果如圖?3?25所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?25 0:UART解碼大量數據

3.5.2.????協議列表顯示

? ? ? 如下圖所示,圖形化的解碼結果是和采集到的波形在時間上完全保持同步的,這有助于我們理解波形和找到問題,但同時因為時間的顯示比例問題,不利于對解碼結果的查看。列表顯示可以很好的彌補這一缺陷,使得查看和分析大量的解碼內容變得簡單。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?26 列表顯示

? ? DSView提供在圖形結果和列表結果之間進行跳轉的方式。在列表結果中單擊任意一行即可自動跳轉到對應的波形結果,同時你還可以在列表的選項里面選擇跳轉時是自動放大波形進行顯示,還是固定波形當前的縮放比列。另外,當我們查看某一個時刻的波形時,如果希望跳轉到這段波形對應的解碼結果在列表顯示的位置,只需要點擊列表顯示窗口右上角的定位按鈕即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?27 列表和圖形解碼的跳轉

? ? ? 另外,通過列表顯示還可以把解碼的內容導出到文件。如上圖所示,點擊列表顯示的“保存”按鈕,可以選擇把當前解碼的內容導出到csv或者txt文件,方便進行更多的第三方數據處理,比如輸入到matlab進行分析,或者作為其它軟件的數據輸入。

3.5.3.??????解碼數據搜索

? ? 列表顯示的另一個優勢就是可以把解碼結果當成字符串進行結果搜索,比如搜索特定操作,或者特定字節數據,可以快速定位需要查看的位置。

在搜索框中輸入需要搜索的關鍵字,然后按向前/向后按鈕即可找到包含關鍵字的解碼內容,同時波形界面也會跳轉到相應位置,以供分析。如果正在分析某一段的解析結果,可以單擊選中列表的某一行,向前/向后按鈕則會以這一行為起始位置,查找前一個和后一個匹配項,而不用從頭開始查找。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?28 協議內容搜索

對于UART協議,DSView還支持多行數據搜索??梢杂糜诓檎覕祿谐霈F的某些連續的字符串結果。如圖?3?29所示,多行數據搜索通過“-“字符來連接多個關鍵字。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?29 多行數據搜索

3.5.4.??????波形搜索

? ??? DSView不僅支持解碼結果的搜索,還支持原始波形的搜索功能。在很多場景可以快速的定位波形。例如波形突發傳輸時,因為空閑周期比較長,無法同時看到多次傳輸的細節波形,可以使用波形搜索,在查看完前一時刻的波形,保證縮放比列不變的情況下,立即跳轉到下一次的波形跳變處。

選中“搜索”工具欄,軟件窗口的下方會出現搜索框,單擊搜索框,彈出搜索設置窗口,確定通道跳變沿,即可通過左右鍵搜索符合條件的波形。同時,也可以手動移動搜索光標,以確定搜索的起始位置。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?30 波形搜索

選中搜索之后會出現帶“S”標記的光標,初始狀態為灰色,如果點擊左/右搜索,并查找到了符合條件的波形,光標會變成藍色,并自動移動到搜索的位置。如果手動移動了“S”光標,光標會重新變為灰色。

3.5.5.????光標運用

? ? ? DSView支持豐富的光標操作,不僅可以通過光標進行時序的測量,還可以通過光標來標記和追蹤特殊波形。當波形空閑或者間隔時間較長時,可在每一個感興趣的位置都插入光標,想要跳轉到某一個感興趣的波形時,只需要在標尺區域點擊右鍵,再點擊想要跳轉的光標序號,既可以跳轉到對應的光標位置。

如果想移動光標,只需要將鼠標移動到光標附近,當光標出現加粗顯示時,單擊鼠標左鍵即可選中,此時光標便會跟隨鼠標移動,確定位置后再次單擊左鍵即可釋放光標。當希望光標吸附到特定通道波形的某一個跳邊沿時,只需要將移動光標時的鼠標靠近跳變沿附近,光標會自動

吸附到跳邊沿位置。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-13 光標運用

3.5.6.??????鼠標測量

? ? ? 除了基于光標的測量,DSView還提供了更加便捷的鼠標測量功能。例如當前脈寬,周期,占空比以及頻率的測量(只需要將鼠標放到變化的脈沖上);邊沿個數的測量(在波形上點擊開始和結束位置便會自動統計此區間的跳變沿);以及邊沿距離的測量(鼠標點擊起始邊沿,再移動到結束邊沿即可)。

如圖?3?31所示,移動鼠標到起始跳變沿的位置,單擊鼠標左鍵,選中起始跳變沿,移動鼠標到結束跳變沿的位置,便會顯示兩個跳變沿之間的距離(時長/采樣間隔點),再次單擊鼠標左鍵完成測量。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?31 跳變沿間距

4.????常見問題

4.1.?????????確定未知的波特率

? ? ? ?當我們無法事先獲取UART波形的波特率時,也可以通過采集到的波形來猜測真實的波特率。DSView提供“Guess bitrate”的解碼器來猜測任意波形串的波特率參數。Guess bitrate?的原理就是依次找到波形中最窄的脈寬,作為一個bit的波形寬度,然后計算其倒數作為波特率。所以其可能出現多個結果,我們只需要觀察對應的脈沖是不是合理的脈寬,然后選擇最大的波特率結果即可。如圖?4?1所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?1 猜測波特率

獲取到波特率之后,便可以設置到UART解碼器的選項中。因為?UART協議每次起始位都會重新同步,所以波特率的誤差只會在一幀數據中累計,只要一幀以內的誤差沒有超過bit位的邊界,便可以得到正確的解碼結果。

當然,如果波形樣本較少,比如波形中沒有出現過單個bit寬度的脈沖,那么猜測的波特率很可能不正確,導致解碼結果錯誤。當有不符合協議的波形出現時,UART解碼器也會給出可能的錯誤提示,比如frame error等,如圖?4?2所示。有經驗的工程師可以通過觀察波形和解碼結果,去調整波特率,以便獲得正確的解碼結果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?2 解碼錯誤

4.2.?????????反相信號的解碼

? ? ?在之前的章節我們提到,UART協議可以通過不同的物理信號進行傳輸,有些物理層的信號可能與協議信號是反向的關系(高低電平互換),比如RS232,或者RS485差分信號當中的B-信號。當我們采集到的信號是反向時,DSView的UART解碼器也可以通過設置來獲取正確的解碼結果。

用戶只需要在UART解碼器的設置中將“Invert Signal ?”選項設置為“yes”即可。反向信號的解碼如下圖所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?3 反向信號的UART解碼

4.3.?????多組UART通訊的解碼

? ? ? DSView的UART解碼器特意設計成單通道的方式,這樣可以方便多路通訊進行解碼時通道的任意設置。例如對于一個全雙工的UART通訊,既有TX信號又有RX信號,那么我們只需要分別添加兩個UART解碼器來對應TX和RX的解碼即可。

如下圖所示,便是同時對3路UART信號進行解碼的情況。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?4 多路解碼器

4.4.????起始位置導致的解碼錯誤

? ? ? 對于任何通訊過程來講,設備必須從初始狀態出發,才能正確的接收到通訊內容,也就是正確的對協議幀進行識別和分析。對于邏輯分析儀來講也是一樣,如果信號的采集正好從一幀數據的中間開始,那么錯誤的起始位置很可能導致錯誤的解碼結果。如下圖所示,設備不停的發送字符串“DreamSourceLab“,但是因為首次捕獲的位置正好位于數據幀的中間,導致第一段波形的解碼變成了亂碼。

? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?5 波形截斷錯誤

為了避免錯誤的解碼數據,我們可以人為的設置解碼的起始位置以及結束位置,從而避免被截斷的數據幀導致的解碼錯誤。解碼位置可以是任意光標的指定位置,操作時只需要在插入對應的光標后,解碼器的設置里面設置對應的起始和結束位置即可。如下圖所示,設置起始位置避免了第一段截斷波形的錯誤解碼。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?6 區域解碼

5.???進階分析

5.1.???多層協議解析

? ? ? ?UART是一種使用非常廣泛的基礎協議,有很多在實際應用中使用的傳輸協議都是在UART的基礎上擴展而來。例如:DMX512,LIN,MIDI以及Modbus等,其底層的通訊基礎都是UART協議。、

根據這個特點,DSView同時支持多層協議的解析堆疊。當我們添加一個復雜協議的解碼器時,DSView會自動從頂層構建整個協議棧,從而使得解碼的結果更加豐富和完善,非常有助于用戶對協議的深入分析和理解。

我們以Modbus RTU為例,來了解一下DSView分析多層協議的過程?;赨ART的字節傳輸功能,Modbus RTU詳細的規定了每個字節的具體意義,這樣通過把多個UART協議幀組合在一起便形成了Modbus的幀結構。如下圖所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 5?1 Modbus RTU主站設備請求幀格式

在使用DSView進行此類協議解碼時,只需要在協議搜索框輸入對應的協議并添加即可。DSView會自動構建整個堆疊協議的設置頁面,如下圖所示,用戶進行相應的設置即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 5?2 Modbus解碼器的設置

? ? ?如下圖所示,從Modbus RTU的解碼結果可以清晰的看出協議的堆疊結構。每一幀的Modbus由8個UART字節幀組成。Modbus幀的內容也會有清晰的注釋標明其具體的含義。當出現傳輸錯誤時,這樣的解碼結果可以非常清晰的定位錯誤的位置,以及錯誤的原因(是底層UART的問題,還是Modbus協議層的問題)。如果不希望看到底層的細節,在解碼器的設置頁面把對應的解碼內容隱藏即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 5?3 Modbus解碼

發表評論

Back To Top
手机看片av永久免费,日韩乱码人妻无码中文字幕久久,亚洲毛片不卡AV在线播放一区,国产一区日韩二区欧美三区