亚洲AV无码国产精品色午友在线,亚洲国产精品一区二区久久HS,精品久久久久久久一区二区 http://mmx22.com 探索,永無(wú)止境 Wed, 10 Jul 2024 03:20:22 +0000 zh-CN hourly 1 https://wordpress.org/?v=5.2.21 應(yīng)用指南—如何使用DSLogic分析CAN/CAN-FD 信號(hào)? http://mmx22.com/logic-analyzer/application-guide-can/ http://mmx22.com/logic-analyzer/application-guide-can/#comments_reply Wed, 02 Aug 2023 08:33:55 +0000 http://mmx22.com/?p=7216 一 文檔介紹 本文將一步步介紹如何使用DSLogic邏輯分析儀采集并分析 CAN…

The post 應(yīng)用指南—如何使用DSLogic分析CAN/CAN-FD 信號(hào)? first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>

一 文檔介紹

本文將一步步介紹如何使用DSLogic邏輯分析儀采集并分析 CAN/CAN-FD 信號(hào),因?yàn)?CAN 信號(hào)的測(cè)量和 CAN-FD 的大致一樣,所以下文以 CAN-FD 舉例,在有區(qū)別之處,將會(huì)做特別說(shuō)明。
此次演示的案例特征為:
  • 仲裁域波特率 500Kbps
  • 數(shù)據(jù)域波特率 1Mbps
  • 發(fā)送 “01 23 45 67 89 AB CD EF ….(其余數(shù)據(jù)位補(bǔ)0)” 共 64 位數(shù)據(jù)到 ID 地址”0x100″。

二 需要測(cè)量哪幾個(gè)信號(hào)

CAN-FD 協(xié)議是半雙工的,在 MCU 端使用 TX/RX 進(jìn)行收發(fā)信號(hào),發(fā)送端并不是通過 TX/RX 直接接到別的節(jié)點(diǎn)的 MCU ,而是先將 TX/RX 接入到 CAN-FD 收發(fā)器,將 TTL 電平轉(zhuǎn)換為差分信號(hào) CAN-FD_H和 CAN-FD_L,測(cè)量信號(hào)時(shí)需要注意接的是 TTL 邏輯端,還是 CAN-FD 總線端。
圖1 MCU與收發(fā)器結(jié)構(gòu)
所以,如果你要測(cè)量 TTL 信號(hào),則將探頭接入到 TX 引腳,如果要測(cè)量總線端信號(hào),則接入到 CAN-FD_L ,你可能要問,可以接入到 CAN-FD_H ?單獨(dú)觀察波形的話,是可以的,但因?yàn)槲覀兪鞘褂眠壿嫹治鰞x對(duì)信號(hào)進(jìn)行解碼,而 CAN-FD_L 的電平變化和 TTL 端的電平變化是一致的,CAN-FD_H 和 TTL 端是反相的,所以為了方便對(duì)比觀察解碼結(jié)果,要接入 CAN-FD_L。

三 信號(hào)的實(shí)際模樣

邏輯分析儀分析的是數(shù)字信號(hào),在采集分析之前,我們推薦先用示波器觀察下信號(hào)實(shí)際是什么樣子的,對(duì)真實(shí)波形有一個(gè)基本的認(rèn)知。
下面我們使用璞石示波器來(lái)完成捕獲模擬波形的演示。

3.1 MCU 側(cè) TTL 信號(hào)

測(cè) TTL 時(shí)探頭接 TTL 信號(hào),探頭使用 X1 擋位,探頭接地夾接邏輯端的參考地,一般是 MCU 的 GND 引腳,此處是使用接地彈簧接 GND。
圖2 探頭測(cè)試 TX 信號(hào)
示波器 0 通道探頭放在靠近 MCU 的 TX 引腳處,夾子接邏輯側(cè)參考地,啟動(dòng) CAN-FD 發(fā)送數(shù)據(jù),按下 AUTO,捕獲波形,如下圖所示。
圖3 示波器顯示 TX 信號(hào)
可以看到這是一個(gè)符合 TTL 標(biāo)準(zhǔn),幅度為 3.4V 的波形。

3.3 收發(fā)器側(cè)差分信號(hào)

因?yàn)樵陔娐吩O(shè)計(jì)中一般都會(huì)對(duì)總線端的電源做隔離,所以在測(cè) CAN-FD 時(shí),兩個(gè)探頭分別接 CAN-FD_H 和 CAN-FD_L 信號(hào),但是探頭接地夾需要接總線端的參考地,一般是 CAN-FD 收發(fā)器芯片的 GND 引腳,不要接到 MCU 的 GND 上去了。
圖4 探頭測(cè)試差分信號(hào)
圖 4 左邊三個(gè)座子依次為 CAN-FD_H,GND,CAN-FD_L。
示波器 0 通道探頭放在 CAN-FD_H,接地彈簧接總線側(cè)參考地 。示波器 1 通道探頭放在 CAN-FD_L,接地彈簧接總線側(cè)參考地,啟動(dòng) CAN-FD 發(fā)送數(shù)據(jù),按下 AUTO,捕獲波形,將波形光標(biāo)重合在一起,如下圖所示。
圖5 差分信號(hào)
可以看到 CAN-FD 中空閑時(shí)差分電平壓差為 0,當(dāng) CAN-FD_L 出現(xiàn)低電平時(shí)開始數(shù)據(jù)的傳輸。可以看到CAN-FD_L的波形和TTL端的信號(hào)是同向的,而CAN-FD_H的波形和TTL端的信號(hào)是反向的。
同時(shí),也可以觀察到CAN-FD信號(hào)高低電平的特殊之處,以CAN-FD_L為例,它的低電平并不是0V。通常標(biāo)準(zhǔn)CAN/CAN-FD總線信號(hào)的L端低電平為1.5V,高電平為2.5V。
也有一些CAN系統(tǒng),總線信號(hào)的電平和標(biāo)準(zhǔn)不太一致,這也是為什么我們推薦先用示波器觀察實(shí)際波形的原因。因?yàn)樵谑褂眠壿嫹治鰞x分析波形時(shí),需要設(shè)置正確的“閾值”電壓,邏輯分析儀才能采集到正確的信號(hào)。

四 信號(hào)的采樣與解碼

在示波器上可以觀察到信號(hào)的波形質(zhì)量,但是示波器不擅長(zhǎng)長(zhǎng)時(shí)間抓取波形,同時(shí)進(jìn)行解碼分析。所以當(dāng)想要分析協(xié)議通訊的內(nèi)容時(shí),使用DSLogic邏輯分析儀是最合適的工具。

4.1 信號(hào)的連接

在DSLogic Plus中,可以選擇任意通道對(duì)波形進(jìn)行采集。我們使用 1 通道來(lái)采集 CAN-FD_L 信號(hào)。
連接排線至邏輯分析儀的采樣端口,圖 6 顯示了排線和通道的對(duì)應(yīng)關(guān)系。
圖6 排線與邏輯分析儀的連接
連接 1 通道至 CAN-FD_L,黑色信號(hào)線為接地信號(hào)線,連接 CAN-FD 收發(fā)器的 GND。連接效果如圖。

圖7 連接信號(hào)

4.2 采樣設(shè)置

打開 DSView,在左上角點(diǎn)擊“選項(xiàng)”,按照?qǐng)D4 參數(shù)設(shè)置,其中關(guān)于閾值電壓,在圖5 中,我們可以看到通訊波形中 CAN-FD_L 的電壓范圍大致在 1.5V – 2.5V 之間,所以閾值可以設(shè)置為 2V 左右。
采樣率一般推薦設(shè)置為波形最大速率的 10 倍。例如此處選擇 10MHz采樣率進(jìn)行采集分析。
通道選項(xiàng)的所有選項(xiàng)都符合我們的要求,我們選擇就選第一個(gè)。其他選項(xiàng)保持默認(rèn),點(diǎn)擊確定。
圖8 選項(xiàng)設(shè)置
設(shè)備選項(xiàng)設(shè)置完成后,采樣時(shí)間這里設(shè)置為 5ms,在”模式“中,我們選擇“單次”。關(guān)鍵的閾值、采樣時(shí)間和采樣率設(shè)置完成后,我們接下來(lái)設(shè)置觸發(fā)方式。
從圖5 可以看到 CAN-FD_L 出現(xiàn)下降沿開始通訊,所以我們?cè)O(shè)置觸發(fā)方式為下降沿觸發(fā),點(diǎn)擊1 通道左側(cè)的下降沿標(biāo)識(shí),顯示為藍(lán)色則為下降沿觸發(fā)。
圖9 觸發(fā)設(shè)置
完成以上接線和設(shè)置后,其他設(shè)置保持默認(rèn),點(diǎn)擊 DSView 菜單欄的“開始”,此時(shí)邏輯分析儀正在等待觸發(fā)波形的出現(xiàn),然后啟動(dòng) CAN-FD 傳輸,觸發(fā)后等待波形采集完成。
以上是對(duì) CAN-FD 的采樣設(shè)置,對(duì)于 CAN 波形的測(cè)試,可以和 CAN-FD 的一致。

4.3 解碼設(shè)置

波形采集完成后會(huì)在軟件界面顯示,此時(shí)可以對(duì)波形進(jìn)行解碼操作,具體操作是點(diǎn)擊菜單欄的“解碼”按鈕,在協(xié)議框中輸入“CAN”,點(diǎn)選在下方出現(xiàn)的”CAN-FD“,在彈出的解碼設(shè)置中進(jìn)行解碼設(shè)置。
圖10 解碼設(shè)置
  • 右側(cè)帶有眼睛圖標(biāo)的選項(xiàng)表示是否要在解碼中查看這些內(nèi)容,默認(rèn)是要查看,如果不想看到相關(guān)內(nèi)容,將其勾選掉即可。
  • 在”CAN“選項(xiàng)中選擇連接 CAN-FD_L 信號(hào)的通道,我們的通道是 1 通道,所以選擇 1。
  • “Nominal bitrate” 表示仲裁段波特率,我們的信號(hào)是 500Kbps,所以輸入 500000。
  • “Fast bitrate” 表示數(shù)據(jù)段波特率,我們的信號(hào)是 1Mbps,所以輸入 1000000。
  • “Sample point” 表示采樣點(diǎn)位置,在 MCU 對(duì) CAN/CAN-FD 協(xié)議進(jìn)行配置時(shí),不同的廠家采樣點(diǎn)設(shè)置不一樣,一般采樣點(diǎn)設(shè)置在 70% ,請(qǐng)根據(jù)實(shí)際情況設(shè)置。
  • 如果在波形中插入了光標(biāo),可以使用光標(biāo)來(lái)限制解碼的范圍,默認(rèn)是對(duì)所有波形進(jìn)行解碼。
圖11 解碼器選項(xiàng)
解碼成功后對(duì)波形展開,配合協(xié)議列表顯示,可以知道我們對(duì)地址為”0x100″的設(shè)備發(fā)送了“01 23 45 67 89 AB CD EF”等數(shù)據(jù)。
圖12 解碼結(jié)果
對(duì)于 CAN 波形的測(cè)試, 只需要設(shè)置一個(gè)”bitrate” 即可,其他操作和設(shè)置與 CAN-FD 的一致。

The post 應(yīng)用指南—如何使用DSLogic分析CAN/CAN-FD 信號(hào)? first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/application-guide-can/feed/ 0
應(yīng)用指南—如何使用DSLogic分析USB-PD信號(hào)? http://mmx22.com/logic-analyzer/application-guide-usb-pd/ http://mmx22.com/logic-analyzer/application-guide-usb-pd/#view_comments Wed, 02 Aug 2023 08:33:42 +0000 http://mmx22.com/?p=7222 一 文檔介紹 本文將一步步介紹如何使用DSLogic邏輯分析儀采集和分析 USB…

The post 應(yīng)用指南—如何使用DSLogic分析USB-PD信號(hào)? first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>

一 文檔介紹

本文將一步步介紹如何使用DSLogic邏輯分析儀采集和分析 USB-PD 信號(hào)。此次將演示使用快充充電器給一臺(tái)安卓手機(jī)充電。

二 需要測(cè)量哪幾個(gè)信號(hào)

邏輯分析儀需要測(cè)量 CC1 信號(hào),兩設(shè)備協(xié)商后 VBUS 的電壓會(huì)有所改變。
VBUS 電壓是 USB 總線上的電源電壓,通常為5V。在 USB-PD 中,它可以在5V、9V、12V、15V或20V之間變化,以提供不同功率級(jí)別的電力傳輸。CC 電壓則是用于識(shí)別連接的設(shè)備類型和支持的功率級(jí)別的信號(hào)。
USB-PD 協(xié)議是在 Type-C 接口的 CC 信號(hào)線上實(shí)現(xiàn)的。CC信號(hào)線有兩根,分別被標(biāo)記為CC1和CC2,數(shù)據(jù)線上的 CC2 為 VCONN,用于 100W 模式下給 E-marker IC 供電。在 USB-PD 協(xié)議中,一般使用 CC1 信號(hào)線用于傳輸協(xié)商消息,以確定所需的電源和充電速度,通過配置電阻的上下拉,它可以是0V、0.6V 或 1.2V,根據(jù)連接的設(shè)備和所需的功率級(jí)別而變化。CC1 信號(hào)線的通信速率限制在 270-330 Kbps,典型為 300Kbps。所以,在使用邏輯分析儀測(cè)試 USB-PD 時(shí),我們只需要測(cè)試 CC1 即可。
如何從 TypeC 中識(shí)別出 VBUS 和 CC1 ?可以參考每種類型接插件對(duì)應(yīng)的數(shù)據(jù)手冊(cè),都會(huì)有引腳分布的介紹。
圖1 6 Pin TypeC引腳定義
更多 TypeC 插座類型的引腳定義請(qǐng)查看附件。
如上圖所示,VBUS 為 A9/B9,CC 線為 CC1/CC2。如果你的硬件方便,可以直接用設(shè)備連接 TypeC 上的這兩個(gè)引腳。
如果不方便測(cè)試 TypeC 中的引腳,也可測(cè)試 TypeC線纜,將數(shù)據(jù)線里的每一根線都剝開,使用萬(wàn)用表測(cè)量每一根信號(hào)線的電壓。
圖2 將數(shù)據(jù)線剝開
如果在 TypeC 接入手機(jī)后的前一段時(shí)間:
  • 電壓從 5V 上升到某個(gè)電壓如 9V,并保持穩(wěn)定,那么這根線是 VBUS
  • 表現(xiàn)為短路,則這根線是 GND
  • 電壓時(shí)不時(shí)在 2V 以下變化,則這根線為 CC1
  • 表現(xiàn)為開路,則為其他信號(hào)線

三 信號(hào)的實(shí)際模樣

DSLogic邏輯分析儀分析的是數(shù)字信號(hào),在采集分析之前,我們先用示波器觀察下信號(hào)實(shí)際是什么樣子的。
這里我們使用璞石示波器來(lái)完成捕獲模擬波形的演示。

3.1 設(shè)置示波器

3.1.1 時(shí)基

我們?cè)陂_始采集前可以先將時(shí)基設(shè)置得稍微大一點(diǎn),這樣方便觀察是否采集到了信號(hào),比如可以設(shè)置為 5ms/格,待采集到波形后再減小時(shí)基到波形容易被觀察范圍。

3.1.2 垂直分辨率

因?yàn)?CC1 的最高電平是 2V,我們將通道 0 垂直分辨率設(shè)置 500mV/格;VBUS 可能能到 20V,我們將通道 1 垂直分辨率設(shè)置 2V/格,如果觀察到波形不合適,再來(lái)調(diào)整。

3.1.3 觸發(fā)電平

因?yàn)閮蓚€(gè)設(shè)備是先協(xié)商再?zèng)Q定供電功率,所以我們將 CC1 的電平變化作為觸發(fā)條件,可以設(shè)置為 0.8V左右。

3.2 在璞石示波器上顯示

我們使用璞石示波器來(lái)完成捕獲模擬波形的演示。
圖3 使用璞石測(cè)試到的信號(hào)
示波器 0通道接在 TypeC 數(shù)據(jù)線的 CC1 處,接地夾接數(shù)據(jù)線的地線,設(shè)置水平分辨率為 5ms/格,垂直分辨率為 500mv/格,觸發(fā)電平設(shè)置在 800mv 左右,單次觸發(fā)。1 通道接在 TypeC 數(shù)據(jù)線的 VBUS 處,接地夾接數(shù)據(jù)線的地線,設(shè)置垂直分辨率為 2V,將 TypeC 充電線接入手機(jī),捕獲的波形如下圖所示。
圖4 捕獲波形
圖5 展開波形觀察
在圖4 和圖5 中,紫色波形為 CC1,綠色波形為VBUS,可以看到,在 CC1 通訊前,VBUS 為 5.200V,CC1 保持高電平為 1.733V,可知該手機(jī)使用的是 3.0A 的電流標(biāo)準(zhǔn),CC1 通訊完成后,VBUS 電壓從 5.200V 上升至了 8.733V,從而可以得知該手機(jī)使用的是 9V 的電壓標(biāo)準(zhǔn),由此次測(cè)量可知,充電器向該手機(jī)提供 9V*3A,也就是27W 的充電功率。

四 信號(hào)的采樣與解碼

在示波器上可以觀察到信號(hào)的波形質(zhì)量,但是示波器不擅長(zhǎng)長(zhǎng)時(shí)間抓取波形,同時(shí)進(jìn)行解碼分析。所以當(dāng)想要分析協(xié)議通訊的內(nèi)容時(shí),使用DSLogic邏輯分析儀是最合適的工具。
接下來(lái)將詳細(xì)介紹如何使用 DSLogic Plus 采集和解碼 USB-PD 信號(hào)。

4.1 信號(hào)的連接

在DSLogic Plus中,可以選擇任意通道對(duì)波形進(jìn)行采集。我們使用 0 通道來(lái)采集 CC1 信號(hào)。
連接排線至邏輯分析儀的采樣端口,圖6 顯示了排線和通道的對(duì)應(yīng)關(guān)系。
圖6 排線與邏輯分析儀的連接
連接 0 通道至 CC1,黑色信號(hào)線為接地信號(hào)線,連接地線。連接效果如圖。
圖7 邏輯分析儀連接被測(cè)信號(hào)

4.2 采樣設(shè)置

打開 DSView,在左上角點(diǎn)擊“選項(xiàng)”,按照?qǐng)D8 參數(shù)設(shè)置,其中關(guān)于閾值電壓,在圖5 中,我們可以看到通訊波形的電壓范圍大致在 0V – 1.2V 之間,所以閾值可以設(shè)置為 0.8V 左右,通道選項(xiàng)的所有選項(xiàng)都符合我們的要求,我們選擇就選第一個(gè)。其他選項(xiàng)保持默認(rèn),點(diǎn)擊確定。
圖8 DSView選項(xiàng)設(shè)置
設(shè)備選項(xiàng)設(shè)置完成后,采樣率一般設(shè)置為波形最大速率的 10 倍,這里可以設(shè)為 2MHz,采樣時(shí)間這里設(shè)置為 5.00S,采集模式設(shè)置為“單次”。
關(guān)鍵的閾值、采樣時(shí)間和采樣率設(shè)置完成后,我們接下來(lái)設(shè)置觸發(fā)方式。
從圖1 可以看到 CC1 以從高電平狀態(tài)跌落到低電平狀態(tài)而開始通訊,所以我們?cè)O(shè)置觸發(fā)方式為下降沿觸發(fā),點(diǎn)擊 0通道左側(cè)的下降沿標(biāo)識(shí),顯示為藍(lán)色則為下降沿觸發(fā)。
圖9 觸發(fā)設(shè)置
完成以上接線和設(shè)置后,點(diǎn)擊 DSView 上的“開始”,此時(shí)邏輯分析儀正在等待觸發(fā)波形的出現(xiàn),然后將 TypeC 接入設(shè)備,觸發(fā)后等待波形采集完成。

4.3 解碼設(shè)置

波形采集完成后會(huì)在軟件界面顯示,此時(shí)可以對(duì)波形進(jìn)行解碼操作,具體操作是點(diǎn)擊菜單欄的“解碼”按鈕,在協(xié)議框中輸入“USB”,選擇在下方出現(xiàn)的”USB PD“,在彈出的解碼設(shè)置中進(jìn)行解碼設(shè)置。
圖10 解碼設(shè)置
  • 右側(cè)帶有眼睛圖標(biāo)的選項(xiàng)表示是否要在解碼中查看這些內(nèi)容,默認(rèn)是要查看,如果不想看到相關(guān)內(nèi)容,將其勾選掉即可。
  • 在”CC1“選項(xiàng)中選擇連接 CC1 信號(hào)的通道,我們的通道是 0 通道,所以選擇 0。
  • 由于我們不檢測(cè) CC2 電源連接,故此項(xiàng)不填。
  • “Full text decoding of packets” 表示是否需要對(duì)數(shù)據(jù)包進(jìn)行全文解碼。
  • 如果在波形中插入了光標(biāo),可以使用光標(biāo)來(lái)限制解碼的范圍,默認(rèn)是對(duì)所有波形進(jìn)行解碼。
圖15 解碼器選項(xiàng)
此時(shí)解碼已經(jīng)完成,可對(duì)波形放大查看細(xì)節(jié)。
圖11 查看解碼結(jié)果

附件

9 Pin TypeC引腳定義
14 Pin TypeC引腳定義
16 Pin TypeC引腳定義
24 Pin TypeC引腳定義

The post 應(yīng)用指南—如何使用DSLogic分析USB-PD信號(hào)? first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/application-guide-usb-pd/feed/ 1
邏輯分析儀 怎么編輯自己需要的協(xié)議! http://mmx22.com/logic-analyzer/protocol_decoder_howto/ http://mmx22.com/logic-analyzer/protocol_decoder_howto/#comments_reply Wed, 07 Sep 2022 02:28:17 +0000 http://mmx22.com/?p=6467 版本: 1.0.2 一、 前言   在DSView安裝目錄下,有一個(gè)decode…

The post 邏輯分析儀 怎么編輯自己需要的協(xié)議! first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>

版本: 1.0.2

一、 前言

  在DSView安裝目錄下,有一個(gè)decoders文件夾,里面有許多目錄是以各種協(xié)議名稱命名的。每個(gè)目錄下有至少2個(gè)擴(kuò)展名為.py的文件,這些都是python代碼文件。在linux系統(tǒng)下,decoders目錄位于”/usr/local/share/libsigrokdecode4DSL”下。
DSView通過底層python解釋器執(zhí)行python代碼,對(duì)邏輯分析儀的數(shù)據(jù)進(jìn)行解析,按各種算法得出需要的結(jié)果。每個(gè)協(xié)議目錄下必須存在兩個(gè)文件:

  1. _init_.py,用于發(fā)現(xiàn)模塊,這個(gè)文件名左右兩邊各有兩個(gè)下劃線,這個(gè)細(xì)節(jié)要注意;
  2. pd.py,用于編寫主要的邏輯代碼;
    這兩個(gè)文件如何編寫,請(qǐng)仔細(xì)閱讀下面的內(nèi)容。在1.2.0以上的新版本DSView中,decoders下的有一個(gè)名為example目錄為示例代碼。

二、python入門

  python語(yǔ)言是一個(gè)解釋執(zhí)行的語(yǔ)言。在官方網(wǎng)站下載并安裝好python,就可以進(jìn)行開發(fā)了。
新建一個(gè)文本文件,里邊輸入一行文字:
print('Hello,world!')
保存為 test.py,然后在命令行里輸入
python test.py
將會(huì)輸出“Hello,world!”
這里的python入門只是為了幫助一些讀者能夠順利閱讀部分協(xié)議代碼,它所講的python知識(shí)還不夠全面和深入,需要讀者自行通過其它方式獲得python資料,以便提升自己的python編程能力。

  1. 變量定義
    age = 1
    name = “Tom”
  2. 數(shù)值
    1, 1.11, 1000等都屬數(shù)值型數(shù)據(jù)
  3. 字符串
    以單引號(hào)或雙引號(hào)括起來(lái)的一串字符,表示字符串,如
    ’abc’
    “name”
  4. 列表
    []
    [1,2,3]
    [1,”abc”,”name”,[7,8,9]]
    列表里的元素用逗號(hào)隔開,上面的第一個(gè)列表是空列表,第二個(gè)列表全是數(shù)字,第三個(gè)列表有多種類型的元素,有數(shù)值、字符串、列表。
    a = [1,2,3]
    變量a是一個(gè)列表,通過a[n]方式讀取列表里的元素。n的取值從0開始到不超過且不等于列表長(zhǎng)度的整數(shù)
    a[2] = 666
    將第3個(gè)元素設(shè)置成666,列表里的內(nèi)容可修改
    i = a[1]
    取列表a的第二個(gè)元素賦給變量i
  5. 字典
    d = {‘a(chǎn)ge’:20, ‘name’:’Tome’, ‘data’:[7,8,9]}
    字典里的每一項(xiàng)用一對(duì)鍵和值表示。如’age’:20
    d[‘name’] = ‘Same’
    將字典d的name值設(shè)置成’Same’
    s = d[‘name’]
    取字典d的name值賦給變量s
    字典里的鍵名可以是數(shù)字、字符串、元組等類型,如:
    {1:'張三'}
    {'name':''張三"}
    {(1,2,3): "張三"}
  6. 元組
    ()
    (1,2,3)
    (2,’abc’)
    元組跟列表一樣,不同的是用()括起來(lái),元組只能讀,不能修改。
    注意:當(dāng)元組只有一個(gè)項(xiàng)時(shí),要多打一個(gè)逗號(hào),如:
    (1,)
  7. 函數(shù)
    def call(): #普通函數(shù)
    def call(self): #類成員函數(shù),第一個(gè)參數(shù)是必須的
    def call(a,b,c): #帶三個(gè)參數(shù)的函數(shù)

三、新建協(xié)議

  1. 新建協(xié)議目錄
    找到存放所有協(xié)議的decoders目錄。widnows下,它在DSView的安裝目錄里;
    在linux下,它在
    /usr/local/share/libsigrokdecode4DSL
    打開decoders目錄,新建一個(gè)子目錄,并給目錄取名字,要求是能體現(xiàn)協(xié)議名稱的名字。這里,我們的示列協(xié)議名為”lala”。
  2. __init.py文件
    在bala目錄下新建文件“__init
    .py”,加入一行如下代碼并保存:

    from .pd import Decoder
    
  3. pd.py文件
    在bala目錄下,建新pd.py文件,用來(lái)編寫主要的代碼。

四、框架代碼模板

??以下是解碼協(xié)議代碼框架,寫在pd.py文件里。所有協(xié)議的代碼核心部分是一樣的。
下面從c模塊繼承一個(gè)類:

import sigrokdecode as srd 
class Decoder(srd.Decoder): 
    api_version = 3    
    ##協(xié)議標(biāo)識(shí),必須唯一
    id = 'bala'
    ##協(xié)議名稱, 不一定要求跟標(biāo)識(shí)一致
    name = 'bala'
    ##協(xié)議長(zhǎng)名稱
    longname = 'bala protocal'
    ##簡(jiǎn)介內(nèi)容
    desc = 'This is an example'
    ##開源協(xié)議
    license = 'gplv2+' 

  #第一句是導(dǎo)出c底層的模塊
  #第二句是定義一個(gè)類,繼承自c底層的類
    inputs = ['logic']
    #接收的輸入的數(shù)據(jù)源,默認(rèn)是是邏輯分析儀數(shù)據(jù)
    #在多層協(xié)議模式下,可使用上層協(xié)議的輸出名
    outputs = ['bala']
    #輸出的數(shù)據(jù)源名,在多層協(xié)議模式下,
    #其它協(xié)議可以使用這個(gè)輸出名指定數(shù)據(jù)輸入來(lái)源
    tags = ['Embedded/industrial']
    #協(xié)議的適用范圍標(biāo)簽
    channels = (
        {'id': 'c1', type:0, 'name': 'c1', 'desc': 'chan1-input'}, 
    ) 
    #必須要綁定的通道
    #id:通道標(biāo)識(shí), 任意命名
    #'type':類型,有: -1:COMMON,0:SCLK,1:SDATA,2:ADATA 
    #name:標(biāo)簽名
    #desc:該通道的說(shuō)明
    optional_channels = (
        {'id': 'c2', type:0, 'name': 'c2', 'desc': 'chan2-input'}, 
    )
    #可選通道,其它跟上面的一樣
    options = (    
        {'id': 'debug_bits','desc': 'Print each bit', 'default': 'no', 'values': ('yes', 'no')},     
        {'id': 'wordsize',  'desc': 'Data wordsize',  'default': 0},
    )
    #提供給用戶通過界面設(shè)置的參數(shù)  
    #根據(jù)業(yè)務(wù)需要來(lái)定義
    #通過'self.options[id]'取值,id就是各個(gè)項(xiàng)的id值,
    #比如下面的'wordsize'
    #上面第一項(xiàng)是下拉框,第二項(xiàng)是輸入框
    annotations = (
        ('1', 'data1', 'test1'),
        ('2', 'data2', 'test2'),
        ('222', 'data3', 'test3'),
    )
    #解析結(jié)果項(xiàng)定義
    #annotations里每一項(xiàng)可以有2到3個(gè)屬性,
    #當(dāng)有3個(gè)屬性時(shí),第一個(gè)表示類型
    #類型對(duì)應(yīng)0-16個(gè)顏色,當(dāng)類型范圍
    #在200-299時(shí),將繪制邊沿箭頭
    annotation_rows = (    
        ('lab1', 'row1', (0,)),
        ('lab2', 'row2', (1,2)),
    )
    #解析結(jié)果行定義
    #(0,)表示可輸出第1個(gè)定義的annotations類型
    #(1,2)表示可輸出第2個(gè)和第3個(gè)定義的annotations類型
    def __init__(self):
        self.reset()
     #這里調(diào)用reset函數(shù),完成一些變量的初始化
     #構(gòu)造函數(shù),自動(dòng)被調(diào)用,
     #這里調(diào)用reset函數(shù)完成一個(gè)變量的初始化
    def reset(self):
        self.count = 0
    #初始化函數(shù),這里定義類的私有變量
    def start(self):
        self.out_ann = self.register(srd.OUTPUT_ANN)
    #這里注冊(cè)消息類型
    #開始執(zhí)行解碼任務(wù)時(shí),由c底層代碼自動(dòng)調(diào)用一次
    #這里,完成一些解碼結(jié)果項(xiàng)annotation類型的注冊(cè)
    #有: OUTPUT_ANN、OUTPUT_PYTHON、
    #OUTPUT_BINARY、OUTPUT_META 
    #register函數(shù)是c底層類提供的
    def put_ann(self,a,b,ann,data): 
        self.put(a, b, self.out_ann, [ann, data])
    #輸出內(nèi)容
    #a,b為采樣位置的起點(diǎn)和終點(diǎn)
    #ann為annotations定義的項(xiàng)序號(hào)
    #data是一個(gè)列表,列表里有1到3個(gè)字符串,它們將顯示到屏幕
    #annotation輸出到哪一行由annotation_rows決定
    #self.out_ann就是上面注冊(cè)的消息類型了
    #self.put是c底層類提供的函數(shù)
    def decode(self):
        while True:
            (a,b)=self.wait({0:'r'})
    #一直調(diào)用,直到所有數(shù)據(jù)處理完
    #解碼任務(wù)開始時(shí)由c底層代碼調(diào)用
    #這里不斷循環(huán)等待所有采樣數(shù)據(jù)被處理完成

    #wait函數(shù)參數(shù)詳解:
    #wait函數(shù)可帶參數(shù),也可以不帶參數(shù),
    #不帶參數(shù)時(shí)將返回每個(gè)采樣數(shù)據(jù)
    #參數(shù)'{0:'r'}', 0表示匹配channels第1
    #項(xiàng)綁定的通道,r表示查找向上邊沿
    #wait函數(shù)可傳多個(gè)條件,
    #與條件:{0:'f',1:'r'},
    #或條件:[{0:'f'},{1:'r'}]
    #h:高電平,l:低電平,r:向上邊沿,
    #f:向下邊沿,
    #e:向上沿或向下沿,
    #n:要么0,要么1
    #wait函數(shù)前的變量(a,b),數(shù)量由定義
    #的channels里的通道數(shù)決定,包括可選通道
    #例如:共定義了4個(gè)通道,
    #則變成(a,b,c,d) = self.wait()
    #c底層提供了兩個(gè)屬性:
    self.samplenum 
    #當(dāng)前wait()調(diào)用匹配結(jié)束的采樣點(diǎn)位置

    self.matched
    #是一個(gè)uint64類型數(shù)值,
    #表示0到63個(gè)通道的匹配信息,
    #通過位運(yùn)算來(lái)獲取具體信息。

到這里,解碼協(xié)議代碼框架模板結(jié)束。

五、應(yīng)用示例

??在上面代碼框架的基礎(chǔ)上,我們接下來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的例子。具體是,通過解碼某一通道的數(shù)據(jù),從一個(gè)向上邊沿開始到向下邊沿結(jié)束,輸出采樣點(diǎn)差值信息。奇數(shù)次輸出放在第二行,偶數(shù)次輸出放在第一行。具體編碼和說(shuō)明如下:

    def decode(self):     
        times = 0 
        rising_sample = 0 
        flag_arr = [{0:'r'}, {0:'f'}] 
        flag_dex = 0 
        while True:
            edge = flag_arr[flag_dex] 
            (a,b) = self.wait(edge)
            if flag_dex == 0:
                flag_dex = 1
                rising_sample = self.samplenum 
            else:
                flag_dex = 0                
                times += 1         
                falling_sample = self.samplenum
                v = falling_sample - rising_sample     
                s = '%02X' % v
                ann = times % 2    
                self.put_ann(rising_sample, falling_sample, ann, [s])

      #times用于輸出次數(shù)計(jì)數(shù),偶數(shù)次輸出到第一行,奇數(shù)次輸出到第二行
      #ann = times % 2  對(duì)次數(shù)變量求余,其值在0和1中變換,調(diào)用put_ann時(shí)指定了annotation的序號(hào)
      #再根據(jù)序號(hào)由annotation_rows決定輸出在哪一行
      #邊沿條件就兩種:向上和向下,調(diào)用wait函數(shù)時(shí),在這兩個(gè)邊沿條件中切換
      #首次是取向上邊沿,然后再換成向下邊沿
      #每次調(diào)用wait后,通過self.samplenum取采樣位置
      #求出兩次的樣品位置差后,轉(zhuǎn)換成16進(jìn)制的字符串,通過類函數(shù)put_ann輸出

六、解碼模塊工作原理

??通過c代碼和python代碼的互操作,將采樣數(shù)據(jù)交給python分析。經(jīng)過一系列的處理,最終生成解碼結(jié)果,用于顯示以及供給上層協(xié)議作為分析的數(shù)據(jù)來(lái)源。解碼模塊的核心主要由以下部分組成:

  1. c底層包裝類Decoder
    在c代碼里,給python提供一個(gè)經(jīng)過包裝的基類,python可調(diào)用基類的一些方法,實(shí)現(xiàn)調(diào)用c代碼的目的。python端通過以下語(yǔ)句導(dǎo)出c代碼包裝的Decoder類:

    import sigrokdecode as srd
    

python可訪問的Decoder基類的方法有:

  • register方法
    用于注冊(cè)python輸出到c底層的消息類型,有:
    (1) OUTPUT_ANN,數(shù)據(jù)輸出到屏幕
    (2) OUTPUT_PYTHON,數(shù)據(jù)輸出到上層協(xié)議
    (3) OUTPUT_BINARY
    (4) OUTPUT_META

python調(diào)用方式:

 self.out_ann=self.register(srd.OUTPUT_ANN)
 self.out_py=self.register(srd.OUTPUT_PYTHON)
  • put方法
    輸出數(shù)據(jù)到屏幕或上層協(xié)議,python調(diào)用方式:

    self.put(a,b,self.out_ann,[0,['abc']])
    

    其中,a、b為采樣點(diǎn)區(qū)間值,self.out_ann為注冊(cè)的消息類型,[0,[‘a(chǎn)bc’]], 0為消息類型序號(hào),參考之前的內(nèi)容;[‘a(chǎn)bc’]為消息內(nèi)容了

  • wait方法
    獲得上一次分析位置后的采樣數(shù)據(jù),可通過參數(shù)指定邊沿查找條件。
    調(diào)用方式: self.wait()
    可指定參數(shù),如:{0,’r’}表示第1個(gè)綁定的通道滿足向上邊沿的數(shù)據(jù);{1,’f’}表示第2個(gè)綁定通道足向下邊沿的數(shù)據(jù)。其它條件標(biāo)志還有:h、l、e、n。
    可通過多個(gè)條件組成并和或的條件。并條件如:{0:’f’,1:’r’},或條件如:[{0:’f’},{1:’r’}]

  • has_channel方法
    用來(lái)叛斷某個(gè)通道是否綁定,python調(diào)用方式:

      self.has_channel(0)
    

    0是通道序號(hào)。

  • 屬性
    c底層類給python提供了兩個(gè)屬性:
    a. self.samplenum,wait()調(diào)用后的采樣數(shù)據(jù)位置;
    b. self.matched,wait()調(diào)用后道通匹配信息;
  1. python層包裝類Decoder
    繼承至c底層包裝的類,由c底層實(shí)例化并調(diào)用python類的方法,代碼如下:

     import sigrokdecode as srd
     class Decoder(srd.Decoder):
    

    子類Decoder的方法有:

  • reset方法
    這里做一些變量值的重置,以及類的私有變量的定義。變量的定義如:

      self.name = 'abc'
    
  • start方法
    在解碼任務(wù)開始執(zhí)行前,c底層代碼會(huì)調(diào)用一次start函數(shù),這里主要是做一些初始化工作,比如注冊(cè)消息類型,如:

      self.out_ann = self.register(srd.OUTPUT_ANN)
      self.out_py = self.register(srd.OUTPUT_PYTHON)
    
  • decode方法
    由c底層調(diào)用,在解碼任務(wù)開始時(shí),c底層啟動(dòng)一個(gè)線程,然后在線程里調(diào)用decode方法。
    在這個(gè)函數(shù)里,一直循環(huán)調(diào)用wait函數(shù),不斷從c底層讀取符合邊沿條件的數(shù)據(jù),如:

      while True:
          (a,b) = self.wait()
    

    (a,b)元組里的變量數(shù)跟聲明的chnnaels里聲明的通道數(shù)一致,包括可選的通道上。

解碼任務(wù)執(zhí)行流程:

  • (1) 解碼任務(wù)開始啟動(dòng);
  • (2) 上層將采樣數(shù)據(jù)分批推送到底層;
  • (3) 底層檢測(cè)并啟動(dòng)一個(gè)線程,該線程調(diào)用python層的decode函數(shù),不斷處理上層推送的數(shù)據(jù);
  • (4) python層經(jīng)過一系列的計(jì)算處理,生成解碼結(jié)果,通過put函數(shù)輸出到c底層;
  • (5) 當(dāng)所有數(shù)據(jù)推送完成并經(jīng)過python層處理,解碼任務(wù)結(jié)束;

七、框架升級(jí)更新記錄

??在DSView版本1.2.0以上,更新以下功能:

  1. end方法
    python層的方法,當(dāng)所有數(shù)據(jù)處理完成后會(huì)被c底層觸發(fā)
  2. self.last_samplenum屬性
    c底層提供的屬性,其值為所有數(shù)據(jù)推送完成后最后的數(shù)據(jù)樣位置。當(dāng)存在end方法時(shí),該屬性將被設(shè)置
  3. 數(shù)據(jù)多種顯示格式
    顯示的annotation數(shù)據(jù)部分,可以在2進(jìn)制、16進(jìn)制、8進(jìn)制、10進(jìn)制、ascii格式間轉(zhuǎn)換。

    self.put(s, e, self.out_ann, [1,['%02X' % value])
    

    put函數(shù)將數(shù)據(jù)輸出c底層,并在屏幕上顯示。其中,value為要顯示的數(shù)據(jù)。在輸出到時(shí)需要轉(zhuǎn)換為16進(jìn)制的字符串。當(dāng)需要讓數(shù)據(jù)支持在多種格式間轉(zhuǎn)換時(shí),代碼修改如下:

    self.put(s, e, self.out_ann, [1,['@' + '%02X' % value])
    

    它是通過在數(shù)據(jù)部分前加@符號(hào),告訴c底層這一部分內(nèi)空是數(shù)據(jù)部分,如:
    '@66FB'
    如果存在前綴文字,需要將格式部分和數(shù)據(jù)部分開,如:
    ['Data:{$}','D:{$}', '@66FB']
    {$}是占位符,系統(tǒng)將數(shù)據(jù)部分格式化后替換掉占位符,就會(huì)變成:Data:66FB

?

The post 邏輯分析儀 怎么編輯自己需要的協(xié)議! first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/protocol_decoder_howto/feed/ 0
什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! http://mmx22.com/logic-analyzer/logic-analyzer-introduction/ http://mmx22.com/logic-analyzer/logic-analyzer-introduction/#comments_reply Wed, 24 Aug 2022 08:26:49 +0000 http://mmx22.com/?p=6350 什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! ?

The post 什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別!

The post 什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/logic-analyzer-introduction/feed/ 0
邏輯分析儀入門教程 v2——波形分析 http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-2-waveform-analysis/ http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-2-waveform-analysis/#comments_reply Wed, 24 Aug 2022 08:21:31 +0000 http://mmx22.com/?p=6344 邏輯分析儀入門教程 ??

The post 邏輯分析儀入門教程 v2——波形分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
邏輯分析儀入門教程

The post 邏輯分析儀入門教程 v2——波形分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-2-waveform-analysis/feed/ 0
邏輯分析儀入門教程1——波形采集 http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-1-waveform-acquisition/ http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-1-waveform-acquisition/#comments_reply Mon, 22 Aug 2022 08:59:45 +0000 http://mmx22.com/?p=6190 ?

The post 邏輯分析儀入門教程1——波形采集 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>

The post 邏輯分析儀入門教程1——波形采集 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/dslogic-beginners-tutorial-1-waveform-acquisition/feed/ 0
最詳細(xì)的UART通訊協(xié)議分析在這里 http://mmx22.com/logic-analyzer/uart/ http://mmx22.com/logic-analyzer/uart/#comments_reply Mon, 22 Aug 2022 08:45:26 +0000 http://mmx22.com/?p=6169 下載本篇文章的pdf版本:UART協(xié)議分析.pdf 1. 協(xié)議基礎(chǔ) 1.1.??…

The post 最詳細(xì)的UART通訊協(xié)議分析在這里 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
下載本篇文章的pdf版本:UART協(xié)議分析.pdf

1. 協(xié)議基礎(chǔ)

1.1.????協(xié)議簡(jiǎn)介

? ?UART是“Universal Asynchronous Receiver/Transmitter”,通用異步收發(fā)器的縮寫。在19世紀(jì)60年代,為了解決計(jì)算機(jī)和電傳打字機(jī)通信,Bell發(fā)明了 UART協(xié)議,將并行輸入信號(hào)轉(zhuǎn)換成串行輸出信號(hào)。因?yàn)閁ART簡(jiǎn)單實(shí)用的特性,其已經(jīng)成為一種使用非常廣泛的通訊協(xié)議。我們?nèi)粘=佑|到的串口,RS232,RS485等總線,內(nèi)部使用的基本都是 UART協(xié)議 。

? ?為了更好的理解和分析協(xié)議與總線的關(guān)系,我們通常把一個(gè)完整的通訊規(guī)范劃分成物理層,協(xié)議層以及應(yīng)用層。物理層只定義真實(shí)的信號(hào)特性(比如電壓,電流,驅(qū)動(dòng)能力等),以及電信號(hào)與邏輯信號(hào)0和1的對(duì)應(yīng)關(guān)系;協(xié)議層不關(guān)心底層的0和1具體怎么實(shí)現(xiàn),只規(guī)定邏輯信號(hào)的協(xié)議規(guī)范以及通訊過程(例如起始,數(shù)據(jù)以及結(jié)束等);應(yīng)用層不關(guān)心數(shù)據(jù)是怎么獲取的,只定義數(shù)據(jù)表示的意義,以及如何實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?1 通訊協(xié)議的分層實(shí)現(xiàn)

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

1.2.???不同的物理層實(shí)現(xiàn)

? ? ?由于UART協(xié)議層的輸入是邏輯0/1信號(hào),而邏輯0/1信號(hào)在物理層可以通過不同的電平標(biāo)準(zhǔn)來(lái)區(qū)分。針對(duì)不同的通訊需求,便可以使用不同的物理層實(shí)現(xiàn)。例如簡(jiǎn)單的板內(nèi)通訊,或者常見的設(shè)備調(diào)試場(chǎng)景,使用簡(jiǎn)單的LVTTL/TTL電平即可在兩個(gè)設(shè)備間進(jìn)行UART協(xié)議通訊。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?2 不同的物理層電平標(biāo)準(zhǔn)

? ? ? 通用的串口則使用的是RS232電平,可以增加傳輸距離,并且抵抗一定程度的信號(hào)干擾。付出的成本則是在物理層需要對(duì)應(yīng)的電平轉(zhuǎn)換芯片來(lái)實(shí)現(xiàn),發(fā)送端需要將內(nèi)部的高低電平信號(hào)轉(zhuǎn)換成電壓更高的+/-電壓信號(hào),接收端需要將+/-電壓信號(hào)轉(zhuǎn)換成內(nèi)部的高低電平信號(hào)。

在工業(yè)通訊的場(chǎng)景下,為了進(jìn)一步提高傳輸距離,以及增強(qiáng)信號(hào)的可靠性,一般會(huì)采用RS485的電平標(biāo)準(zhǔn)。在發(fā)送端將普通的高低電平信號(hào)轉(zhuǎn)換成一對(duì)差分信號(hào),在接收端將差分信號(hào)再轉(zhuǎn)換成普通的高低電平信號(hào)。另外,RS485允許總線上連接多達(dá)128收發(fā)器,而TTL或者RS232則是點(diǎn)對(duì)點(diǎn)的連接。

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

? ? ?基于TTL的UART通訊,是UART協(xié)議應(yīng)用最簡(jiǎn)單的使用場(chǎng)景。即直接把數(shù)字I/O輸出的高低電平作為實(shí)際的物理信號(hào)進(jìn)行傳輸。在物理連接上,只需要設(shè)備共地,通過一根信號(hào)線即可完成單向的設(shè)備通訊。如果需要雙向全雙工,使用兩根信號(hào)線即可。

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?4 TTL的UART信號(hào)波形

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

? ? ? 為了增強(qiáng)驅(qū)動(dòng)能力,以增加傳輸距離和可靠性,RS232總線采用了雙極性電壓信號(hào)來(lái)進(jìn)行物理傳輸。信號(hào)在發(fā)送/接收之前,通過電平轉(zhuǎn)換芯片實(shí)現(xiàn)內(nèi)部信號(hào)和總線信號(hào)的互相轉(zhuǎn)換。連接方式和TTL電平完全相同,整個(gè)物理層只是多了一層電平轉(zhuǎn)換。

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

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

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

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

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

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

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

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

2.????????協(xié)議規(guī)范

2.1.??????UART幀結(jié)構(gòu)

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?1 UART協(xié)議幀結(jié)構(gòu)

? ?當(dāng)兩個(gè)設(shè)備需要通過UART協(xié)議進(jìn)行通訊時(shí),它們需要同時(shí)約定好以下內(nèi)容:

  • 每一位信號(hào)的時(shí)間長(zhǎng)度T(波特率?= 1/T)
  • 幀結(jié)構(gòu)中每一項(xiàng)的具體位數(shù)
  • 是否有校驗(yàn)位,以及校驗(yàn)位的機(jī)制(奇/偶/..)

有了這些約定,接收設(shè)備只需要等待起始位的到來(lái),再對(duì)之后的波形進(jìn)行固定間隔的采樣即可獲得傳輸?shù)木唧w信息。以字符‘D‘的波形為例,其解析過程如圖?2?2所示:

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

2.1.1.? ? ?波特率

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

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

? ? ? ?UART等異步串行協(xié)議,為了簡(jiǎn)化信號(hào)物理連接,降低通訊成本,一般只有一根信號(hào)線,無(wú)法同時(shí)傳輸數(shù)據(jù)和時(shí)鐘信號(hào)。收/發(fā)設(shè)備為了正確解析波形就需要在相同的波特率設(shè)置下。而相同的波形使用不同的波特率獲取的信息可能會(huì)完全不同。對(duì)于接收設(shè)備來(lái)講,只有起始位可以作為一幀數(shù)據(jù)的同步點(diǎn),其它數(shù)據(jù)都是通過波特率來(lái)確定具體的取樣位置。

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?4 波特率錯(cuò)誤

2.1.2.?????空閑位

? ? ? 設(shè)備之間不傳輸數(shù)據(jù)時(shí)以持續(xù)的高電平表示空閑。空閑位持續(xù)時(shí)間越長(zhǎng),兩個(gè)數(shù)據(jù)幀間隔也越長(zhǎng),單位時(shí)間傳輸?shù)臄?shù)據(jù)就越少。

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

2.1.3.??????起始位

UART接收端會(huì)一直檢測(cè)信號(hào)線上的電平變化,開始傳輸數(shù)據(jù)時(shí),發(fā)送端將信號(hào)線從高電平拉到低電平結(jié)束空閑狀態(tài),并保持一個(gè)bit位的時(shí)長(zhǎng)。接收器檢測(cè)到高低電平轉(zhuǎn)換時(shí),開始接收信號(hào)。

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

2.1.4.?????數(shù)據(jù)位

? ? ? 數(shù)據(jù)位包含傳輸?shù)膶?shí)際數(shù)據(jù),如果使用了奇偶校驗(yàn),那么數(shù)據(jù)位長(zhǎng)為5~8 bits,如果沒有使用奇偶校驗(yàn),則位長(zhǎng)為5~9 bits。在一般情況下,數(shù)據(jù)位為?8 bits,數(shù)據(jù)首先從最低有效位開始發(fā)送,高位在后。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?7 數(shù)據(jù)位

2.1.5.????校驗(yàn)位

? ? 校驗(yàn)位可以用來(lái)提高傳輸?shù)目煽啃浴H绻盘?hào)在傳輸過程中因?yàn)楦蓴_而導(dǎo)致某些位置的電平產(chǎn)生錯(cuò)誤,通過計(jì)算接收的數(shù)據(jù)和校驗(yàn)位是否匹配即可判斷數(shù)據(jù)是否有傳輸錯(cuò)誤,從而給應(yīng)用層提供有效信息來(lái)決定接受/丟棄對(duì)應(yīng)的數(shù)據(jù)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?8 校驗(yàn)位

2.1.6.????停止位

? ? ? 停止位表示一幀數(shù)據(jù)的結(jié)束,實(shí)際信號(hào)是一段時(shí)間的高電平。停止位的時(shí)間長(zhǎng)短可以設(shè)置為1、1.5或者2bits的停止位。大部分情況使用1bit的停止位。

因?yàn)閁ART是一個(gè)異步協(xié)議,每一幀的開頭可以用跳變沿來(lái)同步,但是停止位只能通過波特率來(lái)計(jì)算相對(duì)位置,如果在停止位的位置識(shí)別到一個(gè)低電平,則會(huì)產(chǎn)生幀錯(cuò)誤。在通訊過程中,為了減少波特率的誤差導(dǎo)致的問題,可以設(shè)置不同的停止位長(zhǎng)度來(lái)適配。

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

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

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

? ? ? ?示波器作為主要的通用測(cè)試測(cè)量?jī)x器,在觀察模擬信號(hào)的細(xì)節(jié)方面有著天然的優(yōu)勢(shì)。比如說(shuō)實(shí)時(shí)運(yùn)行,配合高波形刷新率,可以方便的觀察到突發(fā)的異常信號(hào);再比如進(jìn)行噪聲評(píng)估以及信號(hào)質(zhì)量?jī)?yōu)化時(shí),示波器可以很好的對(duì)比同一條總線上,不同節(jié)點(diǎn)上信號(hào)的異同,從而找出隱藏的信號(hào)完整性問題。

? ? ? 但是示波器亦天然有著一些不方便的地方,除去通道少,屏幕普遍偏小,操作沒有電腦+鼠標(biāo)的方式靈活可控這些形態(tài)上的問題,針對(duì)數(shù)字信號(hào)的采集和分析,示波器最大的問題就是存儲(chǔ)深度太小。一臺(tái)幾十萬(wàn)元的示波器存儲(chǔ)深度也可能只有幾百M(fèi)pts。同時(shí),因?yàn)榇鎯?chǔ)深度的限制,當(dāng)需要做稍微長(zhǎng)一點(diǎn)時(shí)間的采集時(shí),示波器的真實(shí)采樣率就會(huì)劇烈的下降,導(dǎo)致采集到的波形無(wú)法還原真實(shí)的信號(hào),失去了分析的意義。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?1 璞石示波器分析UART信號(hào)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?2 DSLogic分析UART信號(hào)

? ? ? ?邏輯分析儀是只針對(duì)數(shù)字信號(hào)采集和分析而專門設(shè)計(jì)的測(cè)試測(cè)量?jī)x器,其采集出來(lái)的波形結(jié)果只有高低電平兩個(gè)狀態(tài)(也就是邏輯上的0和1)。但是卻很好的彌補(bǔ)了示波器在采集和分析數(shù)字信號(hào)上的不足。

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

我們接下來(lái)將重點(diǎn)介紹如何使用邏輯分析儀進(jìn)行各種情形下UART信號(hào)的采集和分析。

3.2.????建立邏輯分析儀的測(cè)試環(huán)境

3.2.1.?????DSLogic的連接

DSLogic是一款基于USB連接的便攜式邏輯分析儀。DSLogic主機(jī)負(fù)責(zé)信號(hào)采集和緩存,然后通過USB把數(shù)據(jù)傳輸給PC上的上位機(jī)軟件DSView。DSView負(fù)責(zé)波形數(shù)據(jù)處理,顯示,分析,以及對(duì)應(yīng)的人機(jī)交互功能。

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

? ? ?使用時(shí),只需要將DSLogic主機(jī)通過USB數(shù)據(jù)線直接連接到PC主板上的USB端口,打開DSView軟件,并確認(rèn)DSLogic主機(jī)上的指示燈變?yōu)槌>G狀態(tài)。此時(shí)便完成了邏輯分析儀的連接和初始化工作。如圖?3?4所示,在DSView軟件上可以觀察到左上角的當(dāng)前設(shè)備名稱,以及對(duì)應(yīng)的連接狀態(tài)。

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?4 DSLogic連接狀態(tài)

3.2.2.??????UART信號(hào)連接

? ? ? 對(duì)于所有的測(cè)量來(lái)講,測(cè)試設(shè)備和被測(cè)信號(hào)必須基于一個(gè)共同的參考平面,也就是通常我們所說(shuō)的接地,這樣被測(cè)信號(hào)才能被正確采集和測(cè)量。在某些情況下,會(huì)遇到?jīng)]有做顯性的接地,但是測(cè)量結(jié)果貌似沒有問題的情景,這是因?yàn)闇y(cè)量設(shè)備與被測(cè)信號(hào)通過其它的方式進(jìn)行了共地連接,比如使用的同一個(gè)電源供電,或者參考地同時(shí)接入了市電的接地端等等。但是在進(jìn)行嚴(yán)謹(jǐn)?shù)臏y(cè)量時(shí),測(cè)量設(shè)備應(yīng)根據(jù)被測(cè)信號(hào)進(jìn)行就近接地處理。被測(cè)信號(hào)到測(cè)量設(shè)備的信號(hào)接地端環(huán)路面積越大,信號(hào)就越容易被干擾,從而產(chǎn)生測(cè)量誤差甚至測(cè)量錯(cuò)誤。

? ?針對(duì)UART信號(hào)來(lái)講,接入邏輯分析儀時(shí),最簡(jiǎn)單的情況只需要連接2根線,一根接參考地,一根接被測(cè)信號(hào)即可。針對(duì)我們之前提到的UART協(xié)議的不同物理層實(shí)現(xiàn),信號(hào)連接的方式會(huì)稍有不同。

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?5 TTL信號(hào)與邏輯分析儀連接

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?6 RS232信號(hào)與邏輯分析儀連接

? ? ? RS485總線使用的是差分信號(hào),當(dāng)我們用邏輯分析儀進(jìn)行信號(hào)采集時(shí),需要特別注意被測(cè)信號(hào)的連接方式。首先,邏輯分析儀的參考地需要連接到對(duì)應(yīng)的被測(cè)設(shè)備RS485收發(fā)器的參考地,這樣才可以保證邏輯分析儀有正確的電平參考平面;其次,對(duì)于差分信號(hào),邏輯分析儀只需要采集到與內(nèi)部信號(hào)同極性的高低電平即可。從數(shù)字信號(hào)的角度來(lái)講,差分的方式只是提高信號(hào)傳輸?shù)目煽啃裕辉黾宇~外的信息量。如圖?3?7所示,使用邏輯分析儀測(cè)試485總線信號(hào)時(shí),連接對(duì)應(yīng)設(shè)備收發(fā)器的參考地,以及差分總線上的的A+信號(hào)即可。

當(dāng)然,如果只能采集到B-信號(hào),我們也可以在DSView進(jìn)行解碼時(shí),設(shè)置UART解碼器進(jìn)行信號(hào)翻轉(zhuǎn)的方式來(lái)得到正確的協(xié)議解析結(jié)果。

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

3.2.3.??????閾值設(shè)置

? ? ? ?邏輯分析儀的閾值為高低電平的判決電壓,也就是說(shuō)當(dāng)輸入信號(hào)電壓高于閾值電壓時(shí),采集到的便是高電平;當(dāng)輸入信號(hào)電壓低于閾值電壓時(shí),采集到的便是低電平。

針對(duì)UART協(xié)議,我們之前已經(jīng)介紹了其有不同的物理層實(shí)現(xiàn),不同的物理層實(shí)現(xiàn)有不同的電平標(biāo)準(zhǔn)。我們只需要選擇一個(gè)對(duì)應(yīng)的閾值可以區(qū)分不同情況下的高低電平即可。如圖?3?8所示的閾值基本可以滿足這個(gè)要求。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?8 UART信號(hào)的閾值設(shè)置

? ? ? 在某些情況下,因?yàn)榕渲没蛘哒{(diào)試的需要,RS485總線的差分信號(hào)幅度可能在比較大的范圍變動(dòng)。因?yàn)镽S485的規(guī)范規(guī)定只要A-B之間的差分電壓大于200mV既可以認(rèn)為是高電平。此時(shí)我們可以借助璞石示波器,觀察實(shí)際的信號(hào)電平幅度,再來(lái)決定合適的閾值設(shè)置。只需要確保設(shè)置的閾值電壓可以合理的分辨出高低電平即可。

3.3.?????簡(jiǎn)單的UART信號(hào)采集

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

3.3.1.? ??信號(hào)采集

? ? 在準(zhǔn)備好硬件和信號(hào)連接之后,直接點(diǎn)擊DSView軟件的“開始“按鈕,就可以以默認(rèn)設(shè)置(1MHz采樣率采集1s時(shí)長(zhǎng))采集被測(cè)信號(hào)。如果希望修改采樣率和采集時(shí)長(zhǎng),直接在對(duì)應(yīng)下拉框中選擇對(duì)應(yīng)的參數(shù)即可。采樣率的設(shè)置原則推薦為被測(cè)信號(hào)最高頻率的10倍或以上,例如對(duì)于115200波特率的UART信號(hào),每個(gè)Bit的最大持續(xù)時(shí)間約為8.68μs,當(dāng)選擇1M采樣率時(shí),每bit信號(hào)會(huì)有8或者9個(gè)采樣點(diǎn),對(duì)應(yīng)的相位誤差為+-1/8(12.5%);當(dāng)選擇10M采樣率時(shí),每bit信號(hào)會(huì)有86或者87個(gè)采樣點(diǎn),對(duì)應(yīng)的相位誤差為+-1/86(1.16%)。當(dāng)然一般情況下也不推薦使用過高的采樣率,因?yàn)椴蓸勇试礁吣懿杉臅r(shí)長(zhǎng)就越短,另外采樣率過高可能采集到慢速信號(hào)單個(gè)跳變沿的多次跳變,從而給協(xié)議解碼帶來(lái)困擾。圖 3?9便是使用默認(rèn)設(shè)置采集得到的信號(hào)波形。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?9 默認(rèn)采集

? ? ? ?從圖?3?9可以看出,通道0采集到持續(xù)為高電平的信號(hào),但是并沒有發(fā)現(xiàn)有任何跳變。仔細(xì)觀察波形窗口上面的時(shí)間標(biāo)尺以及窗口底部的滾動(dòng)條,可以得知當(dāng)前窗口顯示的只是采集到的部分波形,不是全部信號(hào)。此時(shí)可以通過鼠標(biāo)滾輪縮放,或者在波形區(qū)域右鍵雙擊的方式顯示整個(gè)采集時(shí)長(zhǎng)的所有波形。得到如圖?3?10所示的結(jié)果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?10 顯示整個(gè)采集窗口

? ? ? ?在上圖的基礎(chǔ)上,我們希望只觀察通道0的跳變部分??梢栽凇斑x項(xiàng)”窗口關(guān)閉其它通道的波形顯示,調(diào)節(jié)通道信號(hào)的顯示高度。然后將鼠標(biāo)指向目標(biāo)波形,并同時(shí)通過鼠標(biāo)滾輪放大所指位置的波形;或者可以通過按住鼠標(biāo)右鍵框選希望放大的波形區(qū)域。另外,按住鼠標(biāo)左鍵可以對(duì)波形進(jìn)行左右移動(dòng)。得到如圖?3?11所示的波形細(xì)節(jié)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?11 觀察波形細(xì)節(jié)

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

3.3.2.?????UART解碼

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

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

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?13 協(xié)議搜索

? ? ? 解碼器的設(shè)置窗口有很多和解碼相關(guān)的設(shè)置選項(xiàng),不同協(xié)議的設(shè)置窗口內(nèi)容也會(huì)不同。其中有一些所有解碼器都必須設(shè)置的選項(xiàng),比如通道和協(xié)議信號(hào)之間的對(duì)應(yīng)關(guān)系。此處我們使用的是通道0抓取的UART信號(hào),那么對(duì)應(yīng)的需要解碼的通道就應(yīng)該設(shè)置成通道0。

和協(xié)議相關(guān)的設(shè)置選項(xiàng)我們?cè)趲Y(jié)構(gòu)的部分都有詳細(xì)講解,在實(shí)際操作種也可以通過串口的上位機(jī)軟件(串口調(diào)試助手等)來(lái)獲取這些信息。如圖?3?14所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?14 協(xié)議相關(guān)的選項(xiàng)

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

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

3.4.?????單次UART傳輸?shù)牟杉?/strong>

? ? ? 當(dāng)我們要捕獲的波形是一個(gè)偶發(fā)信號(hào)時(shí),我們并不知道什么時(shí)候波形會(huì)出現(xiàn),如果使用直接的采集方式可能大部分時(shí)間就只能捕獲到空閑的信號(hào)波形,無(wú)法抓取到實(shí)際傳輸時(shí)的信號(hào)。

這個(gè)時(shí)候便可以通過觸發(fā)來(lái)進(jìn)行捕獲。通過設(shè)置對(duì)應(yīng)的觸發(fā)條件,我們可以根據(jù)波形的變化來(lái)控制信號(hào)采集的開始時(shí)間,從而精準(zhǔn)的捕獲到希望看到的信號(hào)波形。

3.4.1.????Buffer模式

? ? DSLogic支持兩種采集模式:Stream模式和Buffer模式。在Stream模式下采集到的數(shù)據(jù)會(huì)實(shí)時(shí)的傳輸?shù)絇C,然后由DSView處理。Buffer模式采集到的數(shù)據(jù)會(huì)先緩存在DSLogic的內(nèi)部硬件緩存中,等采集完成后再傳輸?shù)絇C,由DSView處理。

Buffer模式除了可以達(dá)到更高的采樣率這個(gè)優(yōu)點(diǎn)外,還支持更多的觸發(fā)選項(xiàng)和設(shè)置,比如多級(jí)觸發(fā),串行觸發(fā)以及觸發(fā)位置的設(shè)置等。而Stream模式僅支持簡(jiǎn)單觸發(fā)。

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

3.4.2.?????觸發(fā)設(shè)置

? ? ? 對(duì)于簡(jiǎn)單觸發(fā),我們可以直接設(shè)置通道旁邊的觸發(fā)選項(xiàng)。其依次對(duì)應(yīng)上升沿,高電平,下降沿,低電平以及任意邊沿觸發(fā)。在觸發(fā)面板保持默認(rèn)的簡(jiǎn)單觸發(fā)模式即可。例如對(duì)于不知道什么時(shí)候發(fā)生的UART傳輸,我們可以選擇下降沿觸發(fā)。當(dāng)UART?信號(hào)一直處于空閑狀態(tài)時(shí),觸發(fā)就不會(huì)被滿足。DSLogic會(huì)一直等待觸發(fā)條件的到來(lái),如圖?3?17所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?17 等待觸發(fā)

當(dāng)UART開始傳輸?shù)谝粋€(gè)起始位時(shí),便會(huì)激活觸發(fā)條件,DSLogic將采集到觸發(fā)時(shí)的信號(hào)波形。如圖?3?18所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?18 觸發(fā)采集

? ? ? 我們考慮復(fù)雜一點(diǎn)的觸發(fā)場(chǎng)景,例如設(shè)備A不斷的隨機(jī)給設(shè)備B發(fā)送數(shù)據(jù),設(shè)備B則根據(jù)設(shè)備A發(fā)送的數(shù)據(jù)內(nèi)容回復(fù)不同的數(shù)據(jù)。如果我們想要知道設(shè)備B發(fā)送數(shù)據(jù)0之前,設(shè)備A給設(shè)備B發(fā)送了哪些數(shù)據(jù),該如何設(shè)置觸發(fā)條件抓到對(duì)應(yīng)時(shí)刻的波形呢?

這里有兩個(gè)問題需要解決,首先我們需要設(shè)置觸發(fā)的位置,從而看到觸發(fā)之前的數(shù)據(jù),而不是觸發(fā)之后的數(shù)據(jù);其次我們要找出設(shè)備B發(fā)送數(shù)據(jù)0的波形特征,并把其轉(zhuǎn)換成對(duì)應(yīng)的觸發(fā)條件。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?19 觸發(fā)位置

? ? 根據(jù)UART的協(xié)議規(guī)則,發(fā)送數(shù)據(jù)0的波形會(huì)是一個(gè)比較寬的持續(xù)低電平脈沖信號(hào)。如果UART的波特率為115200,我們?cè)O(shè)置的采樣率為1MHz,數(shù)據(jù)0的波形如圖?3?20所示,將會(huì)是一個(gè)78.125uS左右的低電平脈沖。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?20 UART發(fā)送數(shù)據(jù)0

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?21 高級(jí)觸發(fā)設(shè)置

根據(jù)這個(gè)觸發(fā)條件,當(dāng)設(shè)備B發(fā)送數(shù)據(jù)0時(shí)就會(huì)觸發(fā),采集到的波形如圖?3?22所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?22 觸發(fā)位置

3.4.3.?????重復(fù)采集

? ? ?在某些情況下,我們需要?jiǎng)討B(tài)的觀察一些信號(hào)的狀態(tài),比如每次Burst發(fā)送的數(shù)據(jù)內(nèi)容,但是卻又不知道數(shù)據(jù)什么時(shí)候發(fā)出,不可能頻繁的去點(diǎn)擊”開始“按鈕。DSView提供了”重復(fù)“采集的模式,可以在滿足觸發(fā)時(shí)自動(dòng)采集并更新波形。當(dāng)我們調(diào)試一些周期的突發(fā)信號(hào)時(shí),便可以通過重復(fù)模式非常方便的觀察動(dòng)態(tài)的采集和協(xié)議解析的結(jié)果。

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?23 重復(fù)采集模式

3.5.?????????長(zhǎng)時(shí)間UART傳輸?shù)牟杉?/strong>

? ? 當(dāng)需要采集超長(zhǎng)時(shí)間的波形進(jìn)行分析時(shí),我們可以使用Stream模式。DSLogic在Stream模式下可以實(shí)現(xiàn)每個(gè)通道16G的采樣深度。在1MHz的采樣率下,采集時(shí)長(zhǎng)可以達(dá)到16G/1M?≈?16000s,也就是4個(gè)多小時(shí)。

3.5.1.???Stream模式

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?24 Stream模式設(shè)置

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?25 0:UART解碼大量數(shù)據(jù)

3.5.2.????協(xié)議列表顯示

? ? ? 如下圖所示,圖形化的解碼結(jié)果是和采集到的波形在時(shí)間上完全保持同步的,這有助于我們理解波形和找到問題,但同時(shí)因?yàn)闀r(shí)間的顯示比例問題,不利于對(duì)解碼結(jié)果的查看。列表顯示可以很好的彌補(bǔ)這一缺陷,使得查看和分析大量的解碼內(nèi)容變得簡(jiǎn)單。

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

? ? DSView提供在圖形結(jié)果和列表結(jié)果之間進(jìn)行跳轉(zhuǎn)的方式。在列表結(jié)果中單擊任意一行即可自動(dòng)跳轉(zhuǎn)到對(duì)應(yīng)的波形結(jié)果,同時(shí)你還可以在列表的選項(xiàng)里面選擇跳轉(zhuǎn)時(shí)是自動(dòng)放大波形進(jìn)行顯示,還是固定波形當(dāng)前的縮放比列。另外,當(dāng)我們查看某一個(gè)時(shí)刻的波形時(shí),如果希望跳轉(zhuǎn)到這段波形對(duì)應(yīng)的解碼結(jié)果在列表顯示的位置,只需要點(diǎn)擊列表顯示窗口右上角的定位按鈕即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?27 列表和圖形解碼的跳轉(zhuǎn)

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

3.5.3.??????解碼數(shù)據(jù)搜索

? ? 列表顯示的另一個(gè)優(yōu)勢(shì)就是可以把解碼結(jié)果當(dāng)成字符串進(jìn)行結(jié)果搜索,比如搜索特定操作,或者特定字節(jié)數(shù)據(jù),可以快速定位需要查看的位置。

在搜索框中輸入需要搜索的關(guān)鍵字,然后按向前/向后按鈕即可找到包含關(guān)鍵字的解碼內(nèi)容,同時(shí)波形界面也會(huì)跳轉(zhuǎn)到相應(yīng)位置,以供分析。如果正在分析某一段的解析結(jié)果,可以單擊選中列表的某一行,向前/向后按鈕則會(huì)以這一行為起始位置,查找前一個(gè)和后一個(gè)匹配項(xiàng),而不用從頭開始查找。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?28 協(xié)議內(nèi)容搜索

對(duì)于UART協(xié)議,DSView還支持多行數(shù)據(jù)搜索??梢杂糜诓檎覕?shù)據(jù)中出現(xiàn)的某些連續(xù)的字符串結(jié)果。如圖?3?29所示,多行數(shù)據(jù)搜索通過“-“字符來(lái)連接多個(gè)關(guān)鍵字。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?29 多行數(shù)據(jù)搜索

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

? ??? DSView不僅支持解碼結(jié)果的搜索,還支持原始波形的搜索功能。在很多場(chǎng)景可以快速的定位波形。例如波形突發(fā)傳輸時(shí),因?yàn)榭臻e周期比較長(zhǎng),無(wú)法同時(shí)看到多次傳輸?shù)募?xì)節(jié)波形,可以使用波形搜索,在查看完前一時(shí)刻的波形,保證縮放比列不變的情況下,立即跳轉(zhuǎn)到下一次的波形跳變處。

選中“搜索”工具欄,軟件窗口的下方會(huì)出現(xiàn)搜索框,單擊搜索框,彈出搜索設(shè)置窗口,確定通道跳變沿,即可通過左右鍵搜索符合條件的波形。同時(shí),也可以手動(dòng)移動(dòng)搜索光標(biāo),以確定搜索的起始位置。

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

選中搜索之后會(huì)出現(xiàn)帶“S”標(biāo)記的光標(biāo),初始狀態(tài)為灰色,如果點(diǎn)擊左/右搜索,并查找到了符合條件的波形,光標(biāo)會(huì)變成藍(lán)色,并自動(dòng)移動(dòng)到搜索的位置。如果手動(dòng)移動(dòng)了“S”光標(biāo),光標(biāo)會(huì)重新變?yōu)榛疑?/p>

3.5.5.????光標(biāo)運(yùn)用

? ? ? DSView支持豐富的光標(biāo)操作,不僅可以通過光標(biāo)進(jìn)行時(shí)序的測(cè)量,還可以通過光標(biāo)來(lái)標(biāo)記和追蹤特殊波形。當(dāng)波形空閑或者間隔時(shí)間較長(zhǎng)時(shí),可在每一個(gè)感興趣的位置都插入光標(biāo),想要跳轉(zhuǎn)到某一個(gè)感興趣的波形時(shí),只需要在標(biāo)尺區(qū)域點(diǎn)擊右鍵,再點(diǎn)擊想要跳轉(zhuǎn)的光標(biāo)序號(hào),既可以跳轉(zhuǎn)到對(duì)應(yīng)的光標(biāo)位置。

如果想移動(dòng)光標(biāo),只需要將鼠標(biāo)移動(dòng)到光標(biāo)附近,當(dāng)光標(biāo)出現(xiàn)加粗顯示時(shí),單擊鼠標(biāo)左鍵即可選中,此時(shí)光標(biāo)便會(huì)跟隨鼠標(biāo)移動(dòng),確定位置后再次單擊左鍵即可釋放光標(biāo)。當(dāng)希望光標(biāo)吸附到特定通道波形的某一個(gè)跳邊沿時(shí),只需要將移動(dòng)光標(biāo)時(shí)的鼠標(biāo)靠近跳變沿附近,光標(biāo)會(huì)自動(dòng)

吸附到跳邊沿位置。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-13 光標(biāo)運(yùn)用

3.5.6.??????鼠標(biāo)測(cè)量

? ? ? 除了基于光標(biāo)的測(cè)量,DSView還提供了更加便捷的鼠標(biāo)測(cè)量功能。例如當(dāng)前脈寬,周期,占空比以及頻率的測(cè)量(只需要將鼠標(biāo)放到變化的脈沖上);邊沿個(gè)數(shù)的測(cè)量(在波形上點(diǎn)擊開始和結(jié)束位置便會(huì)自動(dòng)統(tǒng)計(jì)此區(qū)間的跳變沿);以及邊沿距離的測(cè)量(鼠標(biāo)點(diǎn)擊起始邊沿,再移動(dòng)到結(jié)束邊沿即可)。

如圖?3?31所示,移動(dòng)鼠標(biāo)到起始跳變沿的位置,單擊鼠標(biāo)左鍵,選中起始跳變沿,移動(dòng)鼠標(biāo)到結(jié)束跳變沿的位置,便會(huì)顯示兩個(gè)跳變沿之間的距離(時(shí)長(zhǎng)/采樣間隔點(diǎn)),再次單擊鼠標(biāo)左鍵完成測(cè)量。

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

4.????常見問題

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

? ? ? ?當(dāng)我們無(wú)法事先獲取UART波形的波特率時(shí),也可以通過采集到的波形來(lái)猜測(cè)真實(shí)的波特率。DSView提供“Guess bitrate”的解碼器來(lái)猜測(cè)任意波形串的波特率參數(shù)。Guess bitrate?的原理就是依次找到波形中最窄的脈寬,作為一個(gè)bit的波形寬度,然后計(jì)算其倒數(shù)作為波特率。所以其可能出現(xiàn)多個(gè)結(jié)果,我們只需要觀察對(duì)應(yīng)的脈沖是不是合理的脈寬,然后選擇最大的波特率結(jié)果即可。如圖?4?1所示。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?1 猜測(cè)波特率

獲取到波特率之后,便可以設(shè)置到UART解碼器的選項(xiàng)中。因?yàn)?UART協(xié)議每次起始位都會(huì)重新同步,所以波特率的誤差只會(huì)在一幀數(shù)據(jù)中累計(jì),只要一幀以內(nèi)的誤差沒有超過bit位的邊界,便可以得到正確的解碼結(jié)果。

當(dāng)然,如果波形樣本較少,比如波形中沒有出現(xiàn)過單個(gè)bit寬度的脈沖,那么猜測(cè)的波特率很可能不正確,導(dǎo)致解碼結(jié)果錯(cuò)誤。當(dāng)有不符合協(xié)議的波形出現(xiàn)時(shí),UART解碼器也會(huì)給出可能的錯(cuò)誤提示,比如frame error等,如圖?4?2所示。有經(jīng)驗(yàn)的工程師可以通過觀察波形和解碼結(jié)果,去調(diào)整波特率,以便獲得正確的解碼結(jié)果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?2 解碼錯(cuò)誤

4.2.?????????反相信號(hào)的解碼

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

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?3 反向信號(hào)的UART解碼

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

? ? ? DSView的UART解碼器特意設(shè)計(jì)成單通道的方式,這樣可以方便多路通訊進(jìn)行解碼時(shí)通道的任意設(shè)置。例如對(duì)于一個(gè)全雙工的UART通訊,既有TX信號(hào)又有RX信號(hào),那么我們只需要分別添加兩個(gè)UART解碼器來(lái)對(duì)應(yīng)TX和RX的解碼即可。

如下圖所示,便是同時(shí)對(duì)3路UART信號(hào)進(jìn)行解碼的情況。

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

4.4.????起始位置導(dǎo)致的解碼錯(cuò)誤

? ? ? 對(duì)于任何通訊過程來(lái)講,設(shè)備必須從初始狀態(tài)出發(fā),才能正確的接收到通訊內(nèi)容,也就是正確的對(duì)協(xié)議幀進(jìn)行識(shí)別和分析。對(duì)于邏輯分析儀來(lái)講也是一樣,如果信號(hào)的采集正好從一幀數(shù)據(jù)的中間開始,那么錯(cuò)誤的起始位置很可能導(dǎo)致錯(cuò)誤的解碼結(jié)果。如下圖所示,設(shè)備不停的發(fā)送字符串“DreamSourceLab“,但是因?yàn)槭状尾东@的位置正好位于數(shù)據(jù)幀的中間,導(dǎo)致第一段波形的解碼變成了亂碼。

? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?5 波形截?cái)噱e(cuò)誤

為了避免錯(cuò)誤的解碼數(shù)據(jù),我們可以人為的設(shè)置解碼的起始位置以及結(jié)束位置,從而避免被截?cái)嗟臄?shù)據(jù)幀導(dǎo)致的解碼錯(cuò)誤。解碼位置可以是任意光標(biāo)的指定位置,操作時(shí)只需要在插入對(duì)應(yīng)的光標(biāo)后,解碼器的設(shè)置里面設(shè)置對(duì)應(yīng)的起始和結(jié)束位置即可。如下圖所示,設(shè)置起始位置避免了第一段截?cái)嗖ㄐ蔚腻e(cuò)誤解碼。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?6 區(qū)域解碼

5.???進(jìn)階分析

5.1.???多層協(xié)議解析

? ? ? ?UART是一種使用非常廣泛的基礎(chǔ)協(xié)議,有很多在實(shí)際應(yīng)用中使用的傳輸協(xié)議都是在UART的基礎(chǔ)上擴(kuò)展而來(lái)。例如:DMX512,LIN,MIDI以及Modbus等,其底層的通訊基礎(chǔ)都是UART協(xié)議。、

根據(jù)這個(gè)特點(diǎn),DSView同時(shí)支持多層協(xié)議的解析堆疊。當(dāng)我們添加一個(gè)復(fù)雜協(xié)議的解碼器時(shí),DSView會(huì)自動(dòng)從頂層構(gòu)建整個(gè)協(xié)議棧,從而使得解碼的結(jié)果更加豐富和完善,非常有助于用戶對(duì)協(xié)議的深入分析和理解。

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 5?1 Modbus RTU主站設(shè)備請(qǐng)求幀格式

在使用DSView進(jìn)行此類協(xié)議解碼時(shí),只需要在協(xié)議搜索框輸入對(duì)應(yīng)的協(xié)議并添加即可。DSView會(huì)自動(dòng)構(gòu)建整個(gè)堆疊協(xié)議的設(shè)置頁(yè)面,如下圖所示,用戶進(jìn)行相應(yīng)的設(shè)置即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 5?2 Modbus解碼器的設(shè)置

? ? ?如下圖所示,從Modbus RTU的解碼結(jié)果可以清晰的看出協(xié)議的堆疊結(jié)構(gòu)。每一幀的Modbus由8個(gè)UART字節(jié)幀組成。Modbus幀的內(nèi)容也會(huì)有清晰的注釋標(biāo)明其具體的含義。當(dāng)出現(xiàn)傳輸錯(cuò)誤時(shí),這樣的解碼結(jié)果可以非常清晰的定位錯(cuò)誤的位置,以及錯(cuò)誤的原因(是底層UART的問題,還是Modbus協(xié)議層的問題)。如果不希望看到底層的細(xì)節(jié),在解碼器的設(shè)置頁(yè)面把對(duì)應(yīng)的解碼內(nèi)容隱藏即可。

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

The post 最詳細(xì)的UART通訊協(xié)議分析在這里 first appeared on DreamSourceLab(邏輯分析儀/示波器).

]]>
http://mmx22.com/logic-analyzer/uart/feed/ 0
在线 | 一区二区三区,天天躁日日躁狠狠躁,亚洲AV永久无码精品国产精品,精品久久久久久无码人妻
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>