The post 璞石DSTouch示波器——FFT頻譜分析和協(xié)議解碼演示 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 璞石DSTouch示波器——FFT頻譜分析和協(xié)議解碼演示 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 璞石DSTouch示波器——基本操作演示 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 璞石DSTouch示波器——基本操作演示 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 邏輯分析儀 怎么編輯自己需要的協(xié)議! first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]> 在DSView安裝目錄下,有一個(gè)decoders文件夾,里面有許多目錄是以各種協(xié)議名稱命名的。每個(gè)目錄下有至少2個(gè)擴(kuò)展名為.py的文件,這些都是python代碼文件。在linux系統(tǒng)下,decoders目錄位于”/usr/local/share/libsigrokdecode4DSL”下。
DSView通過底層python解釋器執(zhí)行python代碼,對邏輯分析儀的數(shù)據(jù)進(jìn)行解析,按各種算法得出需要的結(jié)果。每個(gè)協(xié)議目錄下必須存在兩個(gè)文件:
python語言是一個(gè)解釋執(zhí)行的語言。在官方網(wǎng)站下載并安裝好python,就可以進(jìn)行開發(fā)了。
新建一個(gè)文本文件,里邊輸入一行文字:
print('Hello,world!')
保存為 test.py,然后在命令行里輸入
python test.py
將會輸出“Hello,world!”
這里的python入門只是為了幫助一些讀者能夠順利閱讀部分協(xié)議代碼,它所講的python知識還不夠全面和深入,需要讀者自行通過其它方式獲得python資料,以便提升自己的python編程能力。
age = 1
name = “Tom”
[]
[1,2,3]
[1,”abc”,”name”,[7,8,9]]
a = [1,2,3]
a[2] = 666
i = a[1]
d = {‘a(chǎn)ge’:20, ‘name’:’Tome’, ‘data’:[7,8,9]}
d[‘name’] = ‘Same’
s = d[‘name’]
{1:'張三'}
{'name':''張三"}
{(1,2,3): "張三"}
()
(1,2,3)
(2,’abc’)
(1,)
def call(): #普通函數(shù)
def call(self): #類成員函數(shù),第一個(gè)參數(shù)是必須的
def call(a,b,c): #帶三個(gè)參數(shù)的函數(shù)
/usr/local/share/libsigrokdecode4DSL
from .pd import Decoder
??以下是解碼協(xié)議代碼框架,寫在pd.py文件里。所有協(xié)議的代碼核心部分是一樣的。
下面從c模塊繼承一個(gè)類:
import sigrokdecode as srd
class Decoder(srd.Decoder):
api_version = 3
##協(xié)議標(biāo)識,必須唯一
id = 'bala'
##協(xié)議名稱, 不一定要求跟標(biāo)識一致
name = 'bala'
##協(xié)議長名稱
longname = 'bala protocal'
##簡介內(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ù)輸入來源
tags = ['Embedded/industrial']
#協(xié)議的適用范圍標(biāo)簽
channels = (
{'id': 'c1', type:0, 'name': 'c1', 'desc': 'chan1-input'},
)
#必須要綁定的通道
#id:通道標(biāo)識, 任意命名
#'type':類型,有: -1:COMMON,0:SCLK,1:SDATA,2:ADATA
#name:標(biāo)簽名
#desc:該通道的說明
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ù)需要來定義
#通過'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è)表示類型
#類型對應(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ù),自動被調(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)
#這里注冊消息類型
#開始執(zhí)行解碼任務(wù)時(shí),由c底層代碼自動調(diào)用一次
#這里,完成一些解碼結(jié)果項(xiàng)annotation類型的注冊
#有: 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)序號
#data是一個(gè)列表,列表里有1到3個(gè)字符串,它們將顯示到屏幕
#annotation輸出到哪一行由annotation_rows決定
#self.out_ann就是上面注冊的消息類型了
#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)算來獲取具體信息。
到這里,解碼協(xié)議代碼框架模板結(jié)束。
??在上面代碼框架的基礎(chǔ)上,我們接下來實(shí)現(xiàn)一個(gè)簡單的例子。具體是,通過解碼某一通道的數(shù)據(jù),從一個(gè)向上邊沿開始到向下邊沿結(jié)束,輸出采樣點(diǎn)差值信息。奇數(shù)次輸出放在第二行,偶數(shù)次輸出放在第一行。具體編碼和說明如下:
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 對次數(shù)變量求余,其值在0和1中變換,調(diào)用put_ann時(shí)指定了annotation的序號
#再根據(jù)序號由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ù)來源。解碼模塊的核心主要由以下部分組成:
import sigrokdecode as srd
python可訪問的Decoder基類的方法有:
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為注冊的消息類型,[0,[‘a(chǎn)bc’]], 0為消息類型序號,參考之前的內(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’}]
self.has_channel(0)
0是通道序號。
import sigrokdecode as srd
class Decoder(srd.Decoder):
子類Decoder的方法有:
self.name = 'abc'
self.out_ann = self.register(srd.OUTPUT_ANN)
self.out_py = self.register(srd.OUTPUT_PYTHON)
while True:
(a,b) = self.wait()
(a,b)元組里的變量數(shù)跟聲明的chnnaels里聲明的通道數(shù)一致,包括可選的通道上。
解碼任務(wù)執(zhí)行流程:
??在DSView版本1.2.0以上,更新以下功能:
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ù)部分前加@符號,告訴c底層這一部分內(nèi)空是數(shù)據(jù)部分,如:
'@66FB'
如果存在前綴文字,需要將格式部分和數(shù)據(jù)部分開,如:
['Data:{$}','D:{$}', '@66FB']
{$}是占位符,系統(tǒng)將數(shù)據(jù)部分格式化后替換掉占位符,就會變成:Data:66FB
The post 邏輯分析儀 怎么編輯自己需要的協(xié)議! first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post DSCope示波器與璞石示波器產(chǎn)品簡介和操作 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post DSCope示波器與璞石示波器產(chǎn)品簡介和操作 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 什么是邏輯分析儀?邏輯分析儀和示波器的區(qū)別! first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 邏輯分析儀入門教程 v2——波形分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 邏輯分析儀入門教程 v2——波形分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 利用邏輯分析儀進(jìn)行I2C總線的全面分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半導(dǎo)體(現(xiàn)在被NXP收購)于1982年開發(fā)。 主要是用來方便微控制器與外圍器件的數(shù)據(jù)傳輸。 它是一種半雙工,由SDA(數(shù)據(jù))和SCL(時(shí)鐘)組成的兩線式串行傳輸總線。
目前最新的協(xié)議版本是2014版,鏈接如下:
https://www.mmx22.com/doc/I2C-bus specification and user manual.pdf
圖1-1 IIC實(shí)際的波形
圖1-2 IIC協(xié)議 基本形式
IIC由一條時(shí)鐘線和一條數(shù)據(jù)線組成。 如圖1-1是示波器抓取的實(shí)際信號、1-2是IIC協(xié)議數(shù)據(jù)傳輸?shù)幕拘问健?/p>
IIC的輸入輸出結(jié)構(gòu)采用的是開漏的結(jié)構(gòu)。 開漏結(jié)構(gòu)不能夠自主得到高電平,所以需要通過外部上拉電阻Rp來的實(shí)現(xiàn)IIC通信過程中的高電平。 Rp的大小取決于IIC不同模式時(shí)的灌電流大小。
圖1-3和圖1-4是描述IIC獲得高低電平的情景。 因?yàn)橐粭lIIC總線上面可能會同時(shí)連接上多個(gè)設(shè)備,如果IIC使用的是推挽輸出的話容易引起短路。 IIC設(shè)備可以通過控制N-MOS管的開關(guān)來控制輸出信號的電平高低。 當(dāng)MOS管G極為低電平時(shí)MOS管截止IIC總線上面由于有上拉電阻的存在而為高電平; 當(dāng)MOS管G極為高電平時(shí)MOS管導(dǎo)通,IIC總線相當(dāng)于直接接地為低電平。
IIC的輸入是通過TTL肖特基觸發(fā)器將數(shù)據(jù)傳輸?shù)捷斎霐?shù)據(jù)寄存器當(dāng)中,再提供給處理器處理。
圖1-3
圖1-4
IIC的電平標(biāo)準(zhǔn):
由于種類的設(shè)備都有可能連接到IIC總線上面,比如說CMOS、NMOS等,所以IIC的高電平和低電平的標(biāo)準(zhǔn)是不一定的。高電平和低電平的值分別為0.7VDD和0.3VDD。
圖1-5
圖1-6
IIC的時(shí)鐘線總是由主機(jī)控制,主機(jī)與從機(jī)之間的數(shù)據(jù)傳輸只在SDA一根線上完成,不能同時(shí)發(fā)送和接收數(shù)據(jù),所以IIC是一種半雙工的通信協(xié)議。一條IIC總線上面可以掛載多個(gè)設(shè)備,每一個(gè)設(shè)備都有其對應(yīng)的設(shè)備地址,設(shè)備之間數(shù)據(jù)傳送只能由一個(gè)設(shè)備傳送給對應(yīng)地址的設(shè)備。
圖1-7
IIC的總線連接可以接受多主機(jī)的模式,也就是說一條IIC總線上面可以有多個(gè)設(shè)備可以作為主機(jī)來使用,但是在一次數(shù)據(jù)的傳輸過程中只能有一個(gè)設(shè)備作為主機(jī)。一條IIC總線上面誰是主機(jī)取決于總線上面的時(shí)鐘和數(shù)據(jù)信號由誰控制。如圖1-7所示,這一條IIC總線上面掛載了多個(gè)設(shè)備,其中MCU1和MCU2都可以作為主機(jī)來使用,但是不能同時(shí)有兩個(gè)主機(jī)。
如果兩個(gè)MCU同時(shí)發(fā)起開始信號時(shí)(都試圖成為主機(jī)),這時(shí)候IIC的仲裁機(jī)制會發(fā)揮作用來判定誰成為主機(jī)。
圖1-8
IIC的仲裁機(jī)制得益于其開漏的輸入輸出結(jié)構(gòu)。例如如圖1-8所示,當(dāng)SCL線上掛載的多個(gè)設(shè)備,其中的MCU2的SCL輸出低電平,那么這條IIC總線SCL就會被MCU2拉低,這也就是“與”的特性。
IIC上的仲裁主要是由兩部分組成SCL時(shí)鐘同步、SDA線仲裁。
圖1-9
如圖1-9所示CLK1和CLK2都是連接在一條SCL線上的設(shè)備同時(shí)產(chǎn)生的時(shí)鐘信號,由于IIC總線存在“與”的特性,所以兩個(gè)設(shè)備高電平相同的部分形成了SCL最終的時(shí)鐘,也就是說同一條IIC總線上面的時(shí)鐘都是相同的。
圖1-10
同樣SDA仲裁也是基于“與”的特性。如圖1-10所示當(dāng)兩個(gè)設(shè)備同時(shí)發(fā)出開始信號想要傳送數(shù)據(jù)時(shí),在第一個(gè)和第二個(gè)周期內(nèi)DATA1和DATA2的數(shù)據(jù)都是相同的,然后兩者繼續(xù)傳送數(shù)據(jù),當(dāng)在第三個(gè)時(shí)鐘周期時(shí)DATA2與SDA的數(shù)據(jù)不一致,這個(gè)時(shí)候設(shè)備2就會停止發(fā)送數(shù)據(jù),轉(zhuǎn)而啟動接收模式。這樣SDA的數(shù)據(jù)就會與DATA1的數(shù)據(jù)保持一致,并且設(shè)備2停止發(fā)送數(shù)據(jù)也不會影響SDA的數(shù)據(jù)。
起始、停止條件:IIC的起始信號為當(dāng)時(shí)鐘信號線(SCL)為高電平時(shí),數(shù)據(jù)線(SDA)產(chǎn)生一個(gè)下降沿,停止信號為當(dāng)時(shí)鐘信號線(SCL)為高電平時(shí),數(shù)據(jù)線(SDA)產(chǎn)生一個(gè)上升沿。
圖2-1
應(yīng)答位、非應(yīng)答位:當(dāng)主機(jī)傳送8位數(shù)據(jù)結(jié)束后,主機(jī)會將SDA線拉高,此時(shí)如果從機(jī)正確接收數(shù)據(jù)則會將SDA拉低并在SCL高電平時(shí)保持低電平,這個(gè)信號為ACK信號。如果在傳輸8位數(shù)據(jù)后從機(jī)沒有將SDA拉低則該信號為NACK。如果出現(xiàn)NACK則表示數(shù)據(jù)傳輸出錯(cuò)。
圖2-2
數(shù)據(jù)有效性:當(dāng)時(shí)鐘信號為高電平的時(shí)候,數(shù)據(jù)線上的信號需要保持不變也就是在時(shí)鐘線為高電平的時(shí)候數(shù)據(jù)線出現(xiàn)上升下降沿的話就會產(chǎn)生停止和啟動信號,從而導(dǎo)致數(shù)據(jù)的傳輸出錯(cuò)。
圖2-3
byte組織:SDA上的數(shù)據(jù)傳輸是以8bit即一個(gè)字節(jié)為單位傳輸?shù)?,每一次傳輸?shù)淖止?jié)數(shù)沒有限制,每傳輸完一個(gè)字節(jié)后必須跟隨一個(gè)應(yīng)答位。
我們以01001001(0X49)為例,其時(shí)序圖如下:
圖2-4
IIC總線上面的每一個(gè)設(shè)備都有唯一的地址與之對應(yīng),信號傳輸時(shí)也是根據(jù)指定的地址找到設(shè)備來傳輸信號。
寫操作:主機(jī)確定了從機(jī)的設(shè)備地址后,生成一個(gè)開始信號,然后向IIC總線上面發(fā)送設(shè)備的地址和讀寫方向標(biāo)志。從機(jī)檢測到該地址和自己設(shè)備地址相對應(yīng)后,回復(fù)主機(jī)一個(gè)應(yīng)答信號。主機(jī)接收到應(yīng)答信號后就開始向這個(gè)設(shè)備以字節(jié)為單位發(fā)送數(shù)據(jù),每一個(gè)字節(jié)后面都會帶有從機(jī)的應(yīng)答信號,直到主機(jī)發(fā)送完成最后一個(gè)數(shù)據(jù)后生成一個(gè)停止信號結(jié)束此次數(shù)據(jù)的傳輸。
圖2-5
讀操作:讀操作與寫操作有一些類似,同樣的是需要確定需要讀取的從設(shè)備的地址。然后主機(jī)生成開始信號,再向IIC總線上發(fā)送從設(shè)備的地址和讀數(shù)據(jù)的指令。從設(shè)備接收到地址與自己的吻合后會產(chǎn)生一個(gè)應(yīng)答信號。就這從設(shè)備就開始向主機(jī)發(fā)送主機(jī)想要讀取的數(shù)據(jù),主機(jī)正確接收數(shù)據(jù)后會向從機(jī)回復(fù)應(yīng)答信號,當(dāng)主機(jī)想要結(jié)束讀取操作時(shí),主機(jī)會回復(fù)一個(gè)非應(yīng)答信號,然后生成停止信號結(jié)束數(shù)據(jù)的讀取。
圖2-6
圖2-7
如圖2-7所示是示波器采集的IIC信號,我們通過自己的觀察得到這一段IIC包含的信息,主機(jī)向地址為0XA0 的設(shè)備寫入0X0C。
通過示波器我們可以觀察到IIC信號真實(shí)的模樣, 但是我們也可以體會到示波器在分析數(shù)字信號的過程中有很多不便之處。
(1)??示波器分析通道比較少:
一般我們使用的示波器都是雙通道,而剛好IIC總線只有兩根線組成,但是當(dāng)我們需要測量的數(shù)字信號時(shí)由多根線組成的話(比如說spi),用兩通道的示波器就不方便我們使用。
(2)??示波器的存儲深度比較?。阂话銇碇v示波器的存儲深度有限,有與存儲深度和采樣率采樣時(shí)長有很大的聯(lián)系:
存儲深度=采樣率X顯示時(shí)間
那么在上面的公式的原則下,示波器的存儲深度是一定的,我們想要設(shè)置較高的采樣率的話就無法顯示較長的波形,如圖2-8所示,想要的到足夠長的波形的話采樣率則會不足,如圖2-9所示。
圖2-8
圖2-9低采樣率
?
(3)??沒有協(xié)議解碼功能:
如圖2-7所示,示波器抓取到的波形只有光禿禿的波形,我們需要自己將波形放大去仔細(xì)辨認(rèn)才能得到其中的信息。
圖2-10邏輯分析儀解碼結(jié)果
而相比于示波器邏輯分析儀能更好的輔助工程師抓取,識別數(shù)字信號。如圖2-10所示邏輯分析儀帶有解碼功能,它可以自動幫助工程師讀取出其中數(shù)據(jù)。邏輯分析儀的通道數(shù)量一般都在16個(gè)以上,并且在存儲深度這方面,邏輯分析儀要遠(yuǎn)遠(yuǎn)大于示波器,因此他可以記錄很長的數(shù)據(jù)。
?
邏輯分析儀使用詳情可參考:https://www.dreamsourcelab.com/doc/DSView_User_Guide.pdf
邏輯分析儀帶有一個(gè)type-c的接口,使用正確的連接線價(jià)格邏輯分析儀接入電腦的USB接口(如果邏輯分析儀是支持USB 3.0 接口的話接入U(xiǎn)SB 2.0接口會影響其最高速率)。一定要等到邏輯分析儀指示燈顯示為綠燈和軟件上顯示為正確的儀器設(shè)備,此時(shí)才能正確地操作和使用邏輯分析儀。
圖3-1
正常連接好USB后,邏輯分析儀會亮綠燈,再將排線插入邏輯分析儀的檢測通道。排線四個(gè)通道分為一組,基礎(chǔ)版設(shè)備4個(gè)通道配一根地線,增強(qiáng)版每一個(gè)通道都配有地線,由于一般情況下的IIC速率都比較小,所以我們只需要連接兩個(gè)通道和一根公共地線就行了。
圖3-2
采集時(shí)長、采樣率:關(guān)于采樣率和采樣時(shí)長,我們需要明白的一點(diǎn)是他們都和存儲深度有關(guān)。存儲深度=采樣率*窗口顯示時(shí)長
IIC總線的傳輸速率一般是幾百KHZ,我們的傳輸速率設(shè)置為幾MHz就行。這里我們采用4MHz的采樣率對IIC進(jìn)行采樣。這里不同的采樣率下邏輯分析儀的最長采樣時(shí)長是不一樣的,DSView會根據(jù)你設(shè)置的采樣率來計(jì)算出最長的采集時(shí)長。你可以根據(jù)自己的數(shù)據(jù)量選擇相應(yīng)的采樣時(shí)長。
? 圖4-1
運(yùn)行模式和閾值:DSView中邏輯分析儀抓取信號的運(yùn)行模式有stream和buffer模式。stream模式下不同通道數(shù)有不同的最高采樣率,而buffer模式下最高采樣率是固定的。另外就是由于stream模式采用的是PC的內(nèi)存所以有很長的采樣深度。DSView的電壓閾值可以設(shè)置的范圍是0~5V之間。通常的3.3V數(shù)字系統(tǒng),我們設(shè)置閾值電壓為1.0V就可以,如果設(shè)置太低或者太高會導(dǎo)致信號不精準(zhǔn)。
圖4-2
這里需要注意的是stream模式下DSView無法進(jìn)行高級觸發(fā),只能進(jìn)行一些簡單觸發(fā),如果需要用邏輯分析儀抓取特定的數(shù)據(jù)的話需要將運(yùn)行模式調(diào)整到buffer模式下。
圖4-3
簡單觸發(fā):簡單觸發(fā)只需要通過設(shè)置某個(gè)通道的觸發(fā)條件就可以實(shí)現(xiàn)信號的抓取。如圖4-4所示我們設(shè)置觸發(fā)條件為當(dāng)通道1產(chǎn)生邊沿信號,當(dāng)通道1產(chǎn)生上升沿或者下降沿的時(shí)候就會觸發(fā)。
圖4-4
采集:DSView能夠?qū)崿F(xiàn)立即和正常捕獲。立即捕獲可以理解為立即抓取當(dāng)前的IIC信號,不會顧及觸發(fā)條件。當(dāng)你的IIC信號比較短,并且你設(shè)置的采樣時(shí)長比較短時(shí)可能會抓取不到波形。
正常捕獲只需要點(diǎn)擊開始按鈕(或者按鍵盤S鍵)就可以進(jìn)入正常捕獲模式。正常捕獲可以響應(yīng)觸發(fā)條件,并且可以設(shè)置采集模式。
圖4-5
DSView運(yùn)行單次采集和重復(fù)采集。單次采樣只允許你采集一次便會停止采集。重復(fù)采集是完場一次采集后等待響應(yīng)的時(shí)間間隔后又會重新開始采集并不斷這樣的循環(huán)。如圖4-6所示我們可以設(shè)置間隔采集的時(shí)間,設(shè)置范圍為1~10S。
圖4-6
縮放:波形的縮放通過鼠標(biāo)滾輪就能夠?qū)崿F(xiàn)波形的縮放。也可以通過鍵盤上的左右鍵來縮放波形。還可以通過鼠標(biāo)右鍵框選住波形來將波形細(xì)節(jié)放大(右鍵框選只可以放大不能縮小波形)。
圖4-7右鍵框選放大
移動:按住鼠標(biāo)左鍵能夠?qū)崿F(xiàn)波形的左右移動。
頻率測量:直接將鼠標(biāo)移動到波形的中央,就可以計(jì)算這個(gè)信號的頻率,周期等信息。
圖4-8鼠標(biāo)檢測頻率
光標(biāo)運(yùn)用:當(dāng)你的波形比較長窗口無法完全顯示的時(shí)候,我們可以使用光標(biāo)標(biāo)記你想觀察的地方然后根據(jù)光標(biāo)實(shí)現(xiàn)波形位置的跳轉(zhuǎn)。在波形的上雙擊就能添加光標(biāo),光標(biāo)的可添加數(shù)量不受限制。當(dāng)你想要實(shí)現(xiàn)位置跳轉(zhuǎn)的時(shí)候直接鼠標(biāo)右擊光標(biāo)就會出現(xiàn)相應(yīng)的序號,然后直接點(diǎn)擊序號跳轉(zhuǎn)到相應(yīng)的光標(biāo)。
圖4-9光標(biāo)跳轉(zhuǎn)GIF圖
我們采集到的IIC總線上面的信號是兩條波形圖,比較生硬不利于我們了解其中包含的信息。這個(gè)時(shí)候我們就需要使用到DSView中所包含的解碼功能。解碼功能可以將IIC協(xié)議中包含的內(nèi)容以直觀的形式表現(xiàn)出來,方便我們分析。
步驟一:點(diǎn)擊菜單欄上面的解碼DSView界面右側(cè)就會出現(xiàn)添加解碼協(xié)議的窗口。
圖4-10
步驟二:在右側(cè)出現(xiàn)的窗口中選擇IIC協(xié)議,在點(diǎn)擊這個(gè)加號添加協(xié)議。
圖4-11
????步驟三:點(diǎn)擊完加號后下方就會出現(xiàn)一個(gè)IIC的協(xié)議,點(diǎn)擊左側(cè)的設(shè)置按鈕(齒輪)進(jìn)入解碼設(shè)置的窗口。
圖4-12
????步驟四:首先設(shè)置顯示的內(nèi)容,我們可以根據(jù)自己的需求設(shè)置,然后最重要的是需要將采集IIC的通道與SCL和SDA相對應(yīng),從機(jī)地址可以顯示為包不包含讀寫位,最后解碼區(qū)域可以設(shè)置為開始到結(jié)束,這樣采集到的所有數(shù)據(jù)都會被解碼,如果想要解碼特定的區(qū)域可以添加兩條光標(biāo),解碼區(qū)域設(shè)置為這兩條光標(biāo)之間。
圖4-13
步驟五:結(jié)果分析
圖4-14
如圖4-14所示我們設(shè)置了解碼區(qū)間為光標(biāo)1和光標(biāo)2之間的區(qū)域。這一段IIC時(shí)序表達(dá)的意思就是從地址為1010000的設(shè)備之中的0X15的內(nèi)部地址當(dāng)中讀取數(shù)據(jù),讀出的數(shù)據(jù)位0X54。
循環(huán)采集:當(dāng)你遇到需要觀察一個(gè)特定的信號時(shí)采用單次可能會不方便操作。比如不同按鍵代表不同的信息,我們可以設(shè)置循環(huán)采集抓取按鍵的信息。
圖5-1
觸發(fā)定位:如果我們想觀察一段完整的波形,可以將觸發(fā)位置盡量調(diào)到最前(1%)或最后(90%)。這樣就能觀察到觸發(fā)前和觸發(fā)后的波形,如圖5-3所示。
圖5-2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
圖5-3
DSView中可以使用高級觸發(fā)來分析傳輸?shù)膬?nèi)容。
步驟一:首先需要在觸發(fā)設(shè)置里面選擇高級觸發(fā)選項(xiàng)。
圖5-4
步驟二:設(shè)置觸發(fā)位置,?觸發(fā)位置可以根據(jù)自己的需要設(shè)置在任意位置。觸發(fā)的位置決定了你要抓取的信號位于你抓取的全部信號的百分比位置。設(shè)置時(shí)只需要填入數(shù)值或者用鼠標(biāo)拖動位置條。
圖5-5
步驟三:選擇串行觸發(fā),IIC是一種串行的通信方式,所以我們選擇的是串行觸發(fā),上面的總觸發(fā)等級只在多級觸發(fā)的時(shí)候使用。
圖5-6
步驟四:設(shè)置開始停止條件、時(shí)鐘設(shè)置。
首先需要將通道與你測試的IIC線對應(yīng),例如通道0對應(yīng)的是SCL,通道1對應(yīng)的是SDA。IIC的開始條件為當(dāng)SCL為高電平時(shí)SDA產(chǎn)生一個(gè)下降沿,停止條件為當(dāng)SCL為高電平時(shí)SDA產(chǎn)生一個(gè)低電平,所以開始條件和停止條件設(shè)置為圖5-7左側(cè)所示。時(shí)鐘設(shè)置用來定義時(shí)鐘采樣的時(shí)刻,一般情況我們可以設(shè)置為上升沿采樣。
?圖5-7
步驟五:設(shè)置數(shù)據(jù)通道、數(shù)據(jù)位寬、數(shù)據(jù)值
數(shù)據(jù)通道指的是SDA連接的是哪個(gè)通道,這里我們連接的是1通道。由于IIC協(xié)議中每傳送1字節(jié)數(shù)據(jù)就需要一個(gè)應(yīng)答位,所以數(shù)據(jù)位寬設(shè)置為9。例如我設(shè)置在出現(xiàn)0X57這個(gè)數(shù)據(jù)時(shí)觸發(fā),設(shè)置的數(shù)據(jù)值應(yīng)該為010101110,最后一位為應(yīng)答位。
當(dāng)然如果我們不需要抓取特定的數(shù)據(jù)時(shí),數(shù)據(jù)值、數(shù)據(jù)位寬、數(shù)據(jù)通道三項(xiàng)可以不用設(shè)置。
圖5-8
步驟六:查看數(shù)據(jù)
邏輯分析儀抓取的結(jié)果會顯示在主界面上面,觸發(fā)的位置就是我們想要獲得的數(shù)據(jù)的位置。
我們還可以通過列表查詢的方式來來抓取的這一串?dāng)?shù)據(jù)中的位置。如圖5-10所示,輸入要查詢的數(shù)據(jù)再點(diǎn)擊該數(shù)據(jù)就能在主界面中快速定位該數(shù)據(jù)。
圖5-9
圖5-10
稍微復(fù)雜一點(diǎn)的協(xié)議都會采用分層的結(jié)構(gòu),例如使用IIC對EEPROM的讀寫操作,其協(xié)議是基于傳統(tǒng)的IIC,但是在這其中還包含了更多的含義。
我們以對EEPROM操作展示Stack高階協(xié)議解析過程
操作步驟:
(1)選擇“1:IIC”。IIC協(xié)議添加“1:IIC”不能添加“0:IIC”,“0:IIC”不能顯示多層協(xié)議。
圖5-11
(2)點(diǎn)擊“多層協(xié)議”
圖5-12
(3)添加對應(yīng)的EEPROM協(xié)議
圖5-13
(4)??得到結(jié)果
從結(jié)果可以看出,這5層的解碼將IIC協(xié)議通訊的從每一位到整體的意義描述的很詳細(xì)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
圖5-14
The post 利用邏輯分析儀進(jìn)行I2C總線的全面分析 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 邏輯分析儀入門教程1——波形采集 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 邏輯分析儀入門教程1——波形采集 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post 最詳細(xì)的UART通訊協(xié)議分析在這里 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>? ?UART是“Universal Asynchronous Receiver/Transmitter”,通用異步收發(fā)器的縮寫。在19世紀(jì)60年代,為了解決計(jì)算機(jī)和電傳打字機(jī)通信,Bell發(fā)明了 UART協(xié)議,將并行輸入信號轉(zhuǎn)換成串行輸出信號。因?yàn)閁ART簡單實(shí)用的特性,其已經(jīng)成為一種使用非常廣泛的通訊協(xié)議。我們?nèi)粘=佑|到的串口,RS232,RS485等總線,內(nèi)部使用的基本都是 UART協(xié)議 。
? ?為了更好的理解和分析協(xié)議與總線的關(guān)系,我們通常把一個(gè)完整的通訊規(guī)范劃分成物理層,協(xié)議層以及應(yīng)用層。物理層只定義真實(shí)的信號特性(比如電壓,電流,驅(qū)動能力等),以及電信號與邏輯信號0和1的對應(yīng)關(guān)系;協(xié)議層不關(guān)心底層的0和1具體怎么實(shí)現(xiàn),只規(guī)定邏輯信號的協(xié)議規(guī)范以及通訊過程(例如起始,數(shù)據(jù)以及結(jié)束等);應(yīng)用層不關(guān)心數(shù)據(jù)是怎么獲取的,只定義數(shù)據(jù)表示的意義,以及如何實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?1 通訊協(xié)議的分層實(shí)現(xiàn)
? ? ?最簡單的UART協(xié)議應(yīng)用,通常物理層只需要兩根傳輸線,一根用于發(fā)送,一根用于接收,從而實(shí)現(xiàn)全雙工通訊。對于單向傳輸,也可以只使用一根傳輸線。此類應(yīng)用最典型的實(shí)例就是單片機(jī)的RX/TX端口互相連接,從而實(shí)現(xiàn)基于TTL電平的UART通訊。對于不同的傳輸距離以及可靠性的要求,替換不同的物理層實(shí)現(xiàn)既可以得到我們常見的RS232、RS485等通訊總線。
? ? ?由于UART協(xié)議層的輸入是邏輯0/1信號,而邏輯0/1信號在物理層可以通過不同的電平標(biāo)準(zhǔn)來區(qū)分。針對不同的通訊需求,便可以使用不同的物理層實(shí)現(xiàn)。例如簡單的板內(nèi)通訊,或者常見的設(shè)備調(diào)試場景,使用簡單的LVTTL/TTL電平即可在兩個(gè)設(shè)備間進(jìn)行UART協(xié)議通訊。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?2 不同的物理層電平標(biāo)準(zhǔn)
? ? ? 通用的串口則使用的是RS232電平,可以增加傳輸距離,并且抵抗一定程度的信號干擾。付出的成本則是在物理層需要對應(yīng)的電平轉(zhuǎn)換芯片來實(shí)現(xiàn),發(fā)送端需要將內(nèi)部的高低電平信號轉(zhuǎn)換成電壓更高的+/-電壓信號,接收端需要將+/-電壓信號轉(zhuǎn)換成內(nèi)部的高低電平信號。
在工業(yè)通訊的場景下,為了進(jìn)一步提高傳輸距離,以及增強(qiáng)信號的可靠性,一般會采用RS485的電平標(biāo)準(zhǔn)。在發(fā)送端將普通的高低電平信號轉(zhuǎn)換成一對差分信號,在接收端將差分信號再轉(zhuǎn)換成普通的高低電平信號。另外,RS485允許總線上連接多達(dá)128收發(fā)器,而TTL或者RS232則是點(diǎn)對點(diǎn)的連接。
? ? ?基于TTL的UART通訊,是UART協(xié)議應(yīng)用最簡單的使用場景。即直接把數(shù)字I/O輸出的高低電平作為實(shí)際的物理信號進(jìn)行傳輸。在物理連接上,只需要設(shè)備共地,通過一根信號線即可完成單向的設(shè)備通訊。如果需要雙向全雙工,使用兩根信號線即可。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?3 基于TTL的UART通訊
? ? ?為了對比不同物理層實(shí)現(xiàn)的差別,我們可以觀察發(fā)送相同數(shù)據(jù)時(shí),不同物理層的實(shí)際信號有何不同。這里以發(fā)送字符‘D‘為例,通過璞石示波器,直接觀察TTL實(shí)現(xiàn)傳輸?shù)男盘枺ㄌ筋^接地端連接設(shè)備共地端,探頭信號端連接上圖藍(lán)色信號線),可以獲得如圖?1?4所示的信號波形。從波形可以看出,當(dāng)沒有數(shù)據(jù)傳輸時(shí),UART信號會一直保持在高電平(具體信號幅度由I/O的供電電壓決定),數(shù)據(jù)傳輸時(shí)信號發(fā)生跳變,傳輸完成后信號重新回到空閑的高電平狀態(tài)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 1?4 TTL的UART信號波形
? ? ? 為了增強(qiáng)驅(qū)動能力,以增加傳輸距離和可靠性,RS232總線采用了雙極性電壓信號來進(jìn)行物理傳輸。信號在發(fā)送/接收之前,通過電平轉(zhuǎn)換芯片實(shí)現(xiàn)內(nèi)部信號和總線信號的互相轉(zhuǎn)換。連接方式和TTL電平完全相同,整個(gè)物理層只是多了一層電平轉(zhuǎn)換。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?5 基于RS232的UART通訊
同樣以發(fā)送字符‘D‘為例,璞石示波器的探頭連接到信號端,可以采集到如圖?1?6所示的實(shí)際波形。可以看出,RS232波形在空閑時(shí)為負(fù)電壓,當(dāng)有數(shù)據(jù)傳輸時(shí),信號開始在正負(fù)電壓之間跳變,傳輸完成后重新回到空閑的負(fù)電壓狀態(tài)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?6 RS232的UART波形
? ? ? RS485為復(fù)雜的工業(yè)環(huán)境而設(shè)計(jì),和其它UART協(xié)議的物理層相比,RS485總線最大的特點(diǎn)就是使用了差分信號傳輸。信號在發(fā)送之前,通過RS485的收發(fā)器把單端信號轉(zhuǎn)換成差分信號,再發(fā)送到總線上進(jìn)行傳輸;同樣在接收之前,總線上的差分信號通過收發(fā)器的轉(zhuǎn)換變成單端信號再送給UART控制器進(jìn)行接收。在RS485總線上,如果希望進(jìn)行全雙工的雙向通訊,需要兩對差分信號線(即4根信號線)。如果只進(jìn)行半雙工的雙向通訊,則僅需要一對差分信號即可。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?7 基于RS485的UART通訊
? ? ? 還是以發(fā)送字符‘D‘為例,使用璞石示波器2個(gè)通道的探頭(共參考地),分別連接到其中一對差分信號的A/B端,可以采集到如圖?1?8所示的實(shí)際波形。可以看出,A/B端的波形為互補(bǔ)關(guān)系。A端波形為正向邏輯(空閑時(shí)為正電壓),B端波形為反向邏輯(空閑時(shí)為負(fù)電壓)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1?8 RS485的UART波形
? ? ? 在上一節(jié)的介紹中,我們通過璞石示波器觀察了實(shí)際的UART波形,那么這個(gè)波形到底是怎么被準(zhǔn)確的識別成字符‘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)容:
有了這些約定,接收設(shè)備只需要等待起始位的到來,再對之后的波形進(jìn)行固定間隔的采樣即可獲得傳輸?shù)木唧w信息。以字符‘D‘的波形為例,其解析過程如圖?2?2所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?2 UART波形分析
? ? ? 波特率是UART協(xié)議,或者說所有異步串行協(xié)議,非常重要的一個(gè)概念,即單位時(shí)間內(nèi)(1秒)可表示的bit位個(gè)數(shù),或者也可以表述為bit位寬的倒數(shù)。例如一個(gè)波特率為115200的UART波形表示1秒可容納115200個(gè)bit位,也就是說每一位bit數(shù)據(jù)占大約8.68uS的時(shí)長。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?3 波特率的定義
? ? ? ?UART等異步串行協(xié)議,為了簡化信號物理連接,降低通訊成本,一般只有一根信號線,無法同時(shí)傳輸數(shù)據(jù)和時(shí)鐘信號。收/發(fā)設(shè)備為了正確解析波形就需要在相同的波特率設(shè)置下。而相同的波形使用不同的波特率獲取的信息可能會完全不同。對于接收設(shè)備來講,只有起始位可以作為一幀數(shù)據(jù)的同步點(diǎn),其它數(shù)據(jù)都是通過波特率來確定具體的取樣位置。
還是以字符‘D’的波形為例,如圖?2?4所示,如果用錯(cuò)誤的波特率接收,就可能會得到完全錯(cuò)誤的數(shù)據(jù)信息。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?4 波特率錯(cuò)誤
? ? ? 設(shè)備之間不傳輸數(shù)據(jù)時(shí)以持續(xù)的高電平表示空閑??臻e位持續(xù)時(shí)間越長,兩個(gè)數(shù)據(jù)幀間隔也越長,單位時(shí)間傳輸?shù)臄?shù)據(jù)就越少。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?5 空閑位
UART接收端會一直檢測信號線上的電平變化,開始傳輸數(shù)據(jù)時(shí),發(fā)送端將信號線從高電平拉到低電平結(jié)束空閑狀態(tài),并保持一個(gè)bit位的時(shí)長。接收器檢測到高低電平轉(zhuǎn)換時(shí),開始接收信號。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2?6 起始位
? ? ? 數(shù)據(jù)位包含傳輸?shù)膶?shí)際數(shù)據(jù),如果使用了奇偶校驗(yàn),那么數(shù)據(jù)位長為5~8 bits,如果沒有使用奇偶校驗(yàn),則位長為5~9 bits。在一般情況下,數(shù)據(jù)位為?8 bits,數(shù)據(jù)首先從最低有效位開始發(fā)送,高位在后。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?7 數(shù)據(jù)位
? ? 校驗(yàn)位可以用來提高傳輸?shù)目煽啃?。如果信號在傳輸過程中因?yàn)楦蓴_而導(dǎo)致某些位置的電平產(chǎn)生錯(cuò)誤,通過計(jì)算接收的數(shù)據(jù)和校驗(yàn)位是否匹配即可判斷數(shù)據(jù)是否有傳輸錯(cuò)誤,從而給應(yīng)用層提供有效信息來決定接受/丟棄對應(yīng)的數(shù)據(jù)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?8 校驗(yàn)位
? ? ? 停止位表示一幀數(shù)據(jù)的結(jié)束,實(shí)際信號是一段時(shí)間的高電平。停止位的時(shí)間長短可以設(shè)置為1、1.5或者2bits的停止位。大部分情況使用1bit的停止位。
因?yàn)閁ART是一個(gè)異步協(xié)議,每一幀的開頭可以用跳變沿來同步,但是停止位只能通過波特率來計(jì)算相對位置,如果在停止位的位置識別到一個(gè)低電平,則會產(chǎn)生幀錯(cuò)誤。在通訊過程中,為了減少波特率的誤差導(dǎo)致的問題,可以設(shè)置不同的停止位長度來適配。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2?9 停止位
? ? ? ?示波器作為主要的通用測試測量儀器,在觀察模擬信號的細(xì)節(jié)方面有著天然的優(yōu)勢。比如說實(shí)時(shí)運(yùn)行,配合高波形刷新率,可以方便的觀察到突發(fā)的異常信號;再比如進(jìn)行噪聲評估以及信號質(zhì)量優(yōu)化時(shí),示波器可以很好的對比同一條總線上,不同節(jié)點(diǎn)上信號的異同,從而找出隱藏的信號完整性問題。
? ? ? 但是示波器亦天然有著一些不方便的地方,除去通道少,屏幕普遍偏小,操作沒有電腦+鼠標(biāo)的方式靈活可控這些形態(tài)上的問題,針對數(shù)字信號的采集和分析,示波器最大的問題就是存儲深度太小。一臺幾十萬元的示波器存儲深度也可能只有幾百M(fèi)pts。同時(shí),因?yàn)榇鎯ι疃鹊南拗?,?dāng)需要做稍微長一點(diǎn)時(shí)間的采集時(shí),示波器的真實(shí)采樣率就會劇烈的下降,導(dǎo)致采集到的波形無法還原真實(shí)的信號,失去了分析的意義。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?1 璞石示波器分析UART信號
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?2 DSLogic分析UART信號
? ? ? ?邏輯分析儀是只針對數(shù)字信號采集和分析而專門設(shè)計(jì)的測試測量儀器,其采集出來的波形結(jié)果只有高低電平兩個(gè)狀態(tài)(也就是邏輯上的0和1)。但是卻很好的彌補(bǔ)了示波器在采集和分析數(shù)字信號上的不足。
我們接下來將重點(diǎn)介紹如何使用邏輯分析儀進(jìn)行各種情形下UART信號的采集和分析。
3.2.1.?????DSLogic的連接
DSLogic是一款基于USB連接的便攜式邏輯分析儀。DSLogic主機(jī)負(fù)責(zé)信號采集和緩存,然后通過USB把數(shù)據(jù)傳輸給PC上的上位機(jī)軟件DSView。DSView負(fù)責(zé)波形數(shù)據(jù)處理,顯示,分析,以及對應(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è)備名稱,以及對應(yīng)的連接狀態(tài)。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?4 DSLogic連接狀態(tài)
? ? ? 對于所有的測量來講,測試設(shè)備和被測信號必須基于一個(gè)共同的參考平面,也就是通常我們所說的接地,這樣被測信號才能被正確采集和測量。在某些情況下,會遇到?jīng)]有做顯性的接地,但是測量結(jié)果貌似沒有問題的情景,這是因?yàn)闇y量設(shè)備與被測信號通過其它的方式進(jìn)行了共地連接,比如使用的同一個(gè)電源供電,或者參考地同時(shí)接入了市電的接地端等等。但是在進(jìn)行嚴(yán)謹(jǐn)?shù)臏y量時(shí),測量設(shè)備應(yīng)根據(jù)被測信號進(jìn)行就近接地處理。被測信號到測量設(shè)備的信號接地端環(huán)路面積越大,信號就越容易被干擾,從而產(chǎn)生測量誤差甚至測量錯(cuò)誤。
? ?針對UART信號來講,接入邏輯分析儀時(shí),最簡單的情況只需要連接2根線,一根接參考地,一根接被測信號即可。針對我們之前提到的UART協(xié)議的不同物理層實(shí)現(xiàn),信號連接的方式會稍有不同。
例如對于TTL電平的UART信號,除了連接參考地之外,只需要連接需要測試的信號(TX或者RX)分別接入邏輯分析儀對應(yīng)的通道輸入即可。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?5 TTL信號與邏輯分析儀連接
? ? ? 對于RS232總線信號,我們既可以直接測量電平轉(zhuǎn)換之后的總線信號(DSLogic在排線輸入端的耐壓范圍為+-30V,RS232的+-15V的信號范圍可以直接接入),也可以測量電平轉(zhuǎn)換之前的內(nèi)部數(shù)字信號。其接線的方式和TTL信號一致,唯一需要注意的是RS232信號對電平進(jìn)行了翻轉(zhuǎn)(空閑時(shí)為負(fù)電壓,即低電平),在進(jìn)行UART協(xié)議解碼時(shí),我們可以在DSView的解碼設(shè)置窗口進(jìn)行對應(yīng)的信號電平翻轉(zhuǎn)(Invert Signal選項(xiàng)設(shè)置為yes)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?6 RS232信號與邏輯分析儀連接
? ? ? RS485總線使用的是差分信號,當(dāng)我們用邏輯分析儀進(jìn)行信號采集時(shí),需要特別注意被測信號的連接方式。首先,邏輯分析儀的參考地需要連接到對應(yīng)的被測設(shè)備RS485收發(fā)器的參考地,這樣才可以保證邏輯分析儀有正確的電平參考平面;其次,對于差分信號,邏輯分析儀只需要采集到與內(nèi)部信號同極性的高低電平即可。從數(shù)字信號的角度來講,差分的方式只是提高信號傳輸?shù)目煽啃裕辉黾宇~外的信息量。如圖?3?7所示,使用邏輯分析儀測試485總線信號時(shí),連接對應(yīng)設(shè)備收發(fā)器的參考地,以及差分總線上的的A+信號即可。
當(dāng)然,如果只能采集到B-信號,我們也可以在DSView進(jìn)行解碼時(shí),設(shè)置UART解碼器進(jìn)行信號翻轉(zhuǎn)的方式來得到正確的協(xié)議解析結(jié)果。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?7 RS485總線與邏輯分析儀連接
? ? ? ?邏輯分析儀的閾值為高低電平的判決電壓,也就是說當(dāng)輸入信號電壓高于閾值電壓時(shí),采集到的便是高電平;當(dāng)輸入信號電壓低于閾值電壓時(shí),采集到的便是低電平。
針對UART協(xié)議,我們之前已經(jīng)介紹了其有不同的物理層實(shí)現(xiàn),不同的物理層實(shí)現(xiàn)有不同的電平標(biāo)準(zhǔn)。我們只需要選擇一個(gè)對應(yīng)的閾值可以區(qū)分不同情況下的高低電平即可。如圖?3?8所示的閾值基本可以滿足這個(gè)要求。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?8 UART信號的閾值設(shè)置
? ? ? 在某些情況下,因?yàn)榕渲没蛘哒{(diào)試的需要,RS485總線的差分信號幅度可能在比較大的范圍變動。因?yàn)镽S485的規(guī)范規(guī)定只要A-B之間的差分電壓大于200mV既可以認(rèn)為是高電平。此時(shí)我們可以借助璞石示波器,觀察實(shí)際的信號電平幅度,再來決定合適的閾值設(shè)置。只需要確保設(shè)置的閾值電壓可以合理的分辨出高低電平即可。
? ??? 絕大部分UART信號都是低速信號,例如最常用的波特率115200,表示信號頻率只有115.2KHz。使用DSLogic的默認(rèn)設(shè)置即可直接采集到此類信號。此處以主機(jī)固定1s間隔,重復(fù)發(fā)送字符‘D‘為例,介紹如何使用邏輯分析儀采集和分析此類UART信號。
? ? 在準(zhǔn)備好硬件和信號連接之后,直接點(diǎn)擊DSView軟件的“開始“按鈕,就可以以默認(rèn)設(shè)置(1MHz采樣率采集1s時(shí)長)采集被測信號。如果希望修改采樣率和采集時(shí)長,直接在對應(yīng)下拉框中選擇對應(yīng)的參數(shù)即可。采樣率的設(shè)置原則推薦為被測信號最高頻率的10倍或以上,例如對于115200波特率的UART信號,每個(gè)Bit的最大持續(xù)時(shí)間約為8.68μs,當(dāng)選擇1M采樣率時(shí),每bit信號會有8或者9個(gè)采樣點(diǎn),對應(yīng)的相位誤差為+-1/8(12.5%);當(dāng)選擇10M采樣率時(shí),每bit信號會有86或者87個(gè)采樣點(diǎn),對應(yīng)的相位誤差為+-1/86(1.16%)。當(dāng)然一般情況下也不推薦使用過高的采樣率,因?yàn)椴蓸勇试礁吣懿杉臅r(shí)長就越短,另外采樣率過高可能采集到慢速信號單個(gè)跳變沿的多次跳變,從而給協(xié)議解碼帶來困擾。圖 3?9便是使用默認(rèn)設(shè)置采集得到的信號波形。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?9 默認(rèn)采集
? ? ? ?從圖?3?9可以看出,通道0采集到持續(xù)為高電平的信號,但是并沒有發(fā)現(xiàn)有任何跳變。仔細(xì)觀察波形窗口上面的時(shí)間標(biāo)尺以及窗口底部的滾動條,可以得知當(dāng)前窗口顯示的只是采集到的部分波形,不是全部信號。此時(shí)可以通過鼠標(biāo)滾輪縮放,或者在波形區(qū)域右鍵雙擊的方式顯示整個(gè)采集時(shí)長的所有波形。得到如圖?3?10所示的結(jié)果。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?10 顯示整個(gè)采集窗口
? ? ? ?在上圖的基礎(chǔ)上,我們希望只觀察通道0的跳變部分。可以在“選項(xiàng)”窗口關(guān)閉其它通道的波形顯示,調(diào)節(jié)通道信號的顯示高度。然后將鼠標(biāo)指向目標(biāo)波形,并同時(shí)通過鼠標(biāo)滾輪放大所指位置的波形;或者可以通過按住鼠標(biāo)右鍵框選希望放大的波形區(qū)域。另外,按住鼠標(biāo)左鍵可以對波形進(jìn)行左右移動。得到如圖?3?11所示的波形細(xì)節(jié)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?11 觀察波形細(xì)節(jié)
? ? ? ?在觀察波形時(shí),把鼠標(biāo)放到脈沖波形上既可以顯示當(dāng)前信號的脈沖寬度,周期,頻率以及占空比等信息。同時(shí),也可以通過鼠標(biāo)雙擊左鍵的方式添加光標(biāo),移動光標(biāo)時(shí)會自動吸附到靠近的跳變沿。
? ? 邏輯分析儀采集到的信號波形只有高低電平(0/1)在時(shí)間上的變化,這不利于我們對信號傳輸?shù)倪^程和內(nèi)容進(jìn)行有針對性的分析。雖然我們可以根據(jù)協(xié)議規(guī)范,用肉眼來翻譯波形對應(yīng)的協(xié)議內(nèi)容,但是將大大降低分析的效率。DSView自帶的解碼器可以提供豐富的協(xié)議解碼內(nèi)容,使得枯燥的波形變成有意義的字符,標(biāo)記以及數(shù)據(jù)內(nèi)容。極大的方便了工程師對信號的分析和理解,從而找出錯(cuò)誤信息或者關(guān)鍵數(shù)據(jù)。
在DSView軟件里對已經(jīng)采集到的波形進(jìn)行協(xié)議解碼非常簡單,只需要打開“解碼”面板,搜索到對應(yīng)的解碼器(這里我們選擇1:UART協(xié)議),設(shè)置對應(yīng)解碼器的選項(xiàng)(包括顯示/通道/幀結(jié)構(gòu)/格式等),確定之后軟件就會開始對選定通道進(jìn)行UART的協(xié)議解碼。并在協(xié)議通道顯示解碼的結(jié)果。如圖?3?12所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?12 添加UART解碼
? ? ? 在選擇解碼器時(shí),DSView提供便捷的協(xié)議搜索功能,只需要在協(xié)議搜索框輸入關(guān)鍵字符,DSView便會列出所有包含這些字符的解碼器,用戶在其中選擇正確的解碼器即可。如圖?3?13所示和UART相關(guān)的有兩個(gè)協(xié)議0:UART和1:UART,其中0:UART是一個(gè)簡化的解碼器,其不進(jìn)行bits信息的解析,也不支持高層協(xié)議的堆疊,當(dāng)我們只想獲取波形對應(yīng)的數(shù)據(jù)時(shí),可以使用此簡化協(xié)議來減少解碼的時(shí)間和占用的內(nèi)存資源。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?13 協(xié)議搜索
? ? ? 解碼器的設(shè)置窗口有很多和解碼相關(guān)的設(shè)置選項(xiàng),不同協(xié)議的設(shè)置窗口內(nèi)容也會不同。其中有一些所有解碼器都必須設(shè)置的選項(xiàng),比如通道和協(xié)議信號之間的對應(yīng)關(guān)系。此處我們使用的是通道0抓取的UART信號,那么對應(yīng)的需要解碼的通道就應(yīng)該設(shè)置成通道0。
和協(xié)議相關(guān)的設(shè)置選項(xiàng)我們在幀結(jié)構(gòu)的部分都有詳細(xì)講解,在實(shí)際操作種也可以通過串口的上位機(jī)軟件(串口調(diào)試助手等)來獲取這些信息。如圖?3?14所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?14 協(xié)議相關(guān)的選項(xiàng)
? ? 對于解碼的數(shù)據(jù)內(nèi)容,DSView支持不同的顯示格式。例如之前采集的UART信號按照ASCII碼的方式顯示字符‘D’,也可以修改成十六進(jìn)制(Hex)的顯示方式,結(jié)果便會顯示0x44。如圖?3?15所示。目前支持的顯示格式有:hex(十六進(jìn)制)、dec(十進(jìn)制)、oct(八進(jìn)制)、bin(二進(jìn)制)以及ascii碼。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?15 格式選擇
? ? ? 當(dāng)我們要捕獲的波形是一個(gè)偶發(fā)信號時(shí),我們并不知道什么時(shí)候波形會出現(xiàn),如果使用直接的采集方式可能大部分時(shí)間就只能捕獲到空閑的信號波形,無法抓取到實(shí)際傳輸時(shí)的信號。
這個(gè)時(shí)候便可以通過觸發(fā)來進(jìn)行捕獲。通過設(shè)置對應(yīng)的觸發(fā)條件,我們可以根據(jù)波形的變化來控制信號采集的開始時(shí)間,從而精準(zhǔn)的捕獲到希望看到的信號波形。
? ? DSLogic支持兩種采集模式:Stream模式和Buffer模式。在Stream模式下采集到的數(shù)據(jù)會實(shí)時(shí)的傳輸?shù)絇C,然后由DSView處理。Buffer模式采集到的數(shù)據(jù)會先緩存在DSLogic的內(nèi)部硬件緩存中,等采集完成后再傳輸?shù)絇C,由DSView處理。
Buffer模式除了可以達(dá)到更高的采樣率這個(gè)優(yōu)點(diǎn)外,還支持更多的觸發(fā)選項(xiàng)和設(shè)置,比如多級觸發(fā),串行觸發(fā)以及觸發(fā)位置的設(shè)置等。而Stream模式僅支持簡單觸發(fā)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?16 模式選擇
? ? ? 對于簡單觸發(fā),我們可以直接設(shè)置通道旁邊的觸發(fā)選項(xiàng)。其依次對應(yīng)上升沿,高電平,下降沿,低電平以及任意邊沿觸發(fā)。在觸發(fā)面板保持默認(rèn)的簡單觸發(fā)模式即可。例如對于不知道什么時(shí)候發(fā)生的UART傳輸,我們可以選擇下降沿觸發(fā)。當(dāng)UART?信號一直處于空閑狀態(tài)時(shí),觸發(fā)就不會被滿足。DSLogic會一直等待觸發(fā)條件的到來,如圖?3?17所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?17 等待觸發(fā)
當(dāng)UART開始傳輸?shù)谝粋€(gè)起始位時(shí),便會激活觸發(fā)條件,DSLogic將采集到觸發(fā)時(shí)的信號波形。如圖?3?18所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?18 觸發(fā)采集
? ? ? 我們考慮復(fù)雜一點(diǎn)的觸發(fā)場景,例如設(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ā)條件抓到對應(yīng)時(shí)刻的波形呢?
這里有兩個(gè)問題需要解決,首先我們需要設(shè)置觸發(fā)的位置,從而看到觸發(fā)之前的數(shù)據(jù),而不是觸發(fā)之后的數(shù)據(jù);其次我們要找出設(shè)備B發(fā)送數(shù)據(jù)0的波形特征,并把其轉(zhuǎn)換成對應(yīng)的觸發(fā)條件。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?19 觸發(fā)位置
? ? 根據(jù)UART的協(xié)議規(guī)則,發(fā)送數(shù)據(jù)0的波形會是一個(gè)比較寬的持續(xù)低電平脈沖信號。如果UART的波特率為115200,我們設(shè)置的采樣率為1MHz,數(shù)據(jù)0的波形如圖?3?20所示,將會是一個(gè)78.125uS左右的低電平脈沖。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?20 UART發(fā)送數(shù)據(jù)0
? ? ??要設(shè)置高級觸發(fā)或者觸發(fā)位置都需要buffer模式的支持,需要首先在“選項(xiàng)”設(shè)置“運(yùn)行模式”為“Buffer模式“,同時(shí)不要選中“RLE硬件壓縮“的選項(xiàng)。設(shè)置高級觸發(fā)條件為通道1出現(xiàn)持續(xù)的75個(gè)采樣點(diǎn)的低電平(對應(yīng)1MHz采樣率,也就是75us的低電平),觸發(fā)位置設(shè)置到80%,便于觀察觸發(fā)之前的數(shù)據(jù)。具體設(shè)置如圖?3?21所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?21 高級觸發(fā)設(shè)置
根據(jù)這個(gè)觸發(fā)條件,當(dāng)設(shè)備B發(fā)送數(shù)據(jù)0時(shí)就會觸發(fā),采集到的波形如圖?3?22所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?22 觸發(fā)位置
? ? ?在某些情況下,我們需要?jiǎng)討B(tài)的觀察一些信號的狀態(tài),比如每次Burst發(fā)送的數(shù)據(jù)內(nèi)容,但是卻又不知道數(shù)據(jù)什么時(shí)候發(fā)出,不可能頻繁的去點(diǎn)擊”開始“按鈕。DSView提供了”重復(fù)“采集的模式,可以在滿足觸發(fā)時(shí)自動采集并更新波形。當(dāng)我們調(diào)試一些周期的突發(fā)信號時(shí),便可以通過重復(fù)模式非常方便的觀察動態(tài)的采集和協(xié)議解析的結(jié)果。
重復(fù)模式可以按圖?3?23所示進(jìn)行設(shè)置。重復(fù)間隔是指兩次采樣之間至少停留的時(shí)間,方便觀察上一次采集的波形和解碼結(jié)果。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?23 重復(fù)采集模式
? ? 當(dāng)需要采集超長時(shí)間的波形進(jìn)行分析時(shí),我們可以使用Stream模式。DSLogic在Stream模式下可以實(shí)現(xiàn)每個(gè)通道16G的采樣深度。在1MHz的采樣率下,采集時(shí)長可以達(dá)到16G/1M?≈?16000s,也就是4個(gè)多小時(shí)。
Stream模式的設(shè)置如圖?3?24所示,不同的DSLogic硬件版本支持不同的stream模式通道選項(xiàng)。對于U3Pro16來講,基于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ù)
? ? ? 如下圖所示,圖形化的解碼結(jié)果是和采集到的波形在時(shí)間上完全保持同步的,這有助于我們理解波形和找到問題,但同時(shí)因?yàn)闀r(shí)間的顯示比例問題,不利于對解碼結(jié)果的查看。列表顯示可以很好的彌補(bǔ)這一缺陷,使得查看和分析大量的解碼內(nèi)容變得簡單。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 3?26 列表顯示
? ? DSView提供在圖形結(jié)果和列表結(jié)果之間進(jìn)行跳轉(zhuǎn)的方式。在列表結(jié)果中單擊任意一行即可自動跳轉(zhuǎn)到對應(yīng)的波形結(jié)果,同時(shí)你還可以在列表的選項(xiàng)里面選擇跳轉(zhuǎn)時(shí)是自動放大波形進(jìn)行顯示,還是固定波形當(dāng)前的縮放比列。另外,當(dāng)我們查看某一個(gè)時(shí)刻的波形時(shí),如果希望跳轉(zhuǎn)到這段波形對應(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ù)輸入。
? ? 列表顯示的另一個(gè)優(yōu)勢就是可以把解碼結(jié)果當(dāng)成字符串進(jìn)行結(jié)果搜索,比如搜索特定操作,或者特定字節(jié)數(shù)據(jù),可以快速定位需要查看的位置。
在搜索框中輸入需要搜索的關(guān)鍵字,然后按向前/向后按鈕即可找到包含關(guān)鍵字的解碼內(nèi)容,同時(shí)波形界面也會跳轉(zhuǎn)到相應(yīng)位置,以供分析。如果正在分析某一段的解析結(jié)果,可以單擊選中列表的某一行,向前/向后按鈕則會以這一行為起始位置,查找前一個(gè)和后一個(gè)匹配項(xiàng),而不用從頭開始查找。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?28 協(xié)議內(nèi)容搜索
對于UART協(xié)議,DSView還支持多行數(shù)據(jù)搜索。可以用于查找數(shù)據(jù)中出現(xiàn)的某些連續(xù)的字符串結(jié)果。如圖?3?29所示,多行數(shù)據(jù)搜索通過“-“字符來連接多個(gè)關(guān)鍵字。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?29 多行數(shù)據(jù)搜索
? ??? DSView不僅支持解碼結(jié)果的搜索,還支持原始波形的搜索功能。在很多場景可以快速的定位波形。例如波形突發(fā)傳輸時(shí),因?yàn)榭臻e周期比較長,無法同時(shí)看到多次傳輸?shù)募?xì)節(jié)波形,可以使用波形搜索,在查看完前一時(shí)刻的波形,保證縮放比列不變的情況下,立即跳轉(zhuǎn)到下一次的波形跳變處。
選中“搜索”工具欄,軟件窗口的下方會出現(xiàn)搜索框,單擊搜索框,彈出搜索設(shè)置窗口,確定通道跳變沿,即可通過左右鍵搜索符合條件的波形。同時(shí),也可以手動移動搜索光標(biāo),以確定搜索的起始位置。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?30 波形搜索
選中搜索之后會出現(xiàn)帶“S”標(biāo)記的光標(biāo),初始狀態(tài)為灰色,如果點(diǎn)擊左/右搜索,并查找到了符合條件的波形,光標(biāo)會變成藍(lán)色,并自動移動到搜索的位置。如果手動移動了“S”光標(biāo),光標(biāo)會重新變?yōu)榛疑?/p>
? ? ? DSView支持豐富的光標(biāo)操作,不僅可以通過光標(biāo)進(jìn)行時(shí)序的測量,還可以通過光標(biāo)來標(biāo)記和追蹤特殊波形。當(dāng)波形空閑或者間隔時(shí)間較長時(shí),可在每一個(gè)感興趣的位置都插入光標(biāo),想要跳轉(zhuǎn)到某一個(gè)感興趣的波形時(shí),只需要在標(biāo)尺區(qū)域點(diǎn)擊右鍵,再點(diǎn)擊想要跳轉(zhuǎn)的光標(biāo)序號,既可以跳轉(zhuǎn)到對應(yīng)的光標(biāo)位置。
如果想移動光標(biāo),只需要將鼠標(biāo)移動到光標(biāo)附近,當(dāng)光標(biāo)出現(xiàn)加粗顯示時(shí),單擊鼠標(biāo)左鍵即可選中,此時(shí)光標(biāo)便會跟隨鼠標(biāo)移動,確定位置后再次單擊左鍵即可釋放光標(biāo)。當(dāng)希望光標(biāo)吸附到特定通道波形的某一個(gè)跳邊沿時(shí),只需要將移動光標(biāo)時(shí)的鼠標(biāo)靠近跳變沿附近,光標(biāo)會自動
吸附到跳邊沿位置。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-13 光標(biāo)運(yùn)用
? ? ? 除了基于光標(biāo)的測量,DSView還提供了更加便捷的鼠標(biāo)測量功能。例如當(dāng)前脈寬,周期,占空比以及頻率的測量(只需要將鼠標(biāo)放到變化的脈沖上);邊沿個(gè)數(shù)的測量(在波形上點(diǎn)擊開始和結(jié)束位置便會自動統(tǒng)計(jì)此區(qū)間的跳變沿);以及邊沿距離的測量(鼠標(biāo)點(diǎn)擊起始邊沿,再移動到結(jié)束邊沿即可)。
如圖?3?31所示,移動鼠標(biāo)到起始跳變沿的位置,單擊鼠標(biāo)左鍵,選中起始跳變沿,移動鼠標(biāo)到結(jié)束跳變沿的位置,便會顯示兩個(gè)跳變沿之間的距離(時(shí)長/采樣間隔點(diǎn)),再次單擊鼠標(biāo)左鍵完成測量。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 3?31 跳變沿間距
? ? ? ?當(dāng)我們無法事先獲取UART波形的波特率時(shí),也可以通過采集到的波形來猜測真實(shí)的波特率。DSView提供“Guess bitrate”的解碼器來猜測任意波形串的波特率參數(shù)。Guess bitrate?的原理就是依次找到波形中最窄的脈寬,作為一個(gè)bit的波形寬度,然后計(jì)算其倒數(shù)作為波特率。所以其可能出現(xiàn)多個(gè)結(jié)果,我們只需要觀察對應(yīng)的脈沖是不是合理的脈寬,然后選擇最大的波特率結(jié)果即可。如圖?4?1所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?1 猜測波特率
獲取到波特率之后,便可以設(shè)置到UART解碼器的選項(xiàng)中。因?yàn)?UART協(xié)議每次起始位都會重新同步,所以波特率的誤差只會在一幀數(shù)據(jù)中累計(jì),只要一幀以內(nèi)的誤差沒有超過bit位的邊界,便可以得到正確的解碼結(jié)果。
當(dāng)然,如果波形樣本較少,比如波形中沒有出現(xiàn)過單個(gè)bit寬度的脈沖,那么猜測的波特率很可能不正確,導(dǎo)致解碼結(jié)果錯(cuò)誤。當(dāng)有不符合協(xié)議的波形出現(xiàn)時(shí),UART解碼器也會給出可能的錯(cuò)誤提示,比如frame error等,如圖?4?2所示。有經(jīng)驗(yàn)的工程師可以通過觀察波形和解碼結(jié)果,去調(diào)整波特率,以便獲得正確的解碼結(jié)果。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?2 解碼錯(cuò)誤
? ? ?在之前的章節(jié)我們提到,UART協(xié)議可以通過不同的物理信號進(jìn)行傳輸,有些物理層的信號可能與協(xié)議信號是反向的關(guān)系(高低電平互換),比如RS232,或者RS485差分信號當(dāng)中的B-信號。當(dāng)我們采集到的信號是反向時(shí),DSView的UART解碼器也可以通過設(shè)置來獲取正確的解碼結(jié)果。
用戶只需要在UART解碼器的設(shè)置中將“Invert Signal ?”選項(xiàng)設(shè)置為“yes”即可。反向信號的解碼如下圖所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?3 反向信號的UART解碼
? ? ? DSView的UART解碼器特意設(shè)計(jì)成單通道的方式,這樣可以方便多路通訊進(jìn)行解碼時(shí)通道的任意設(shè)置。例如對于一個(gè)全雙工的UART通訊,既有TX信號又有RX信號,那么我們只需要分別添加兩個(gè)UART解碼器來對應(yīng)TX和RX的解碼即可。
如下圖所示,便是同時(shí)對3路UART信號進(jìn)行解碼的情況。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 4?4 多路解碼器
? ? ? 對于任何通訊過程來講,設(shè)備必須從初始狀態(tài)出發(fā),才能正確的接收到通訊內(nèi)容,也就是正確的對協(xié)議幀進(jìn)行識別和分析。對于邏輯分析儀來講也是一樣,如果信號的采集正好從一幀數(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í)只需要在插入對應(yīng)的光標(biāo)后,解碼器的設(shè)置里面設(shè)置對應(yīng)的起始和結(jié)束位置即可。如下圖所示,設(shè)置起始位置避免了第一段截?cái)嗖ㄐ蔚腻e(cuò)誤解碼。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 4?6 區(qū)域解碼
? ? ? ?UART是一種使用非常廣泛的基礎(chǔ)協(xié)議,有很多在實(shí)際應(yīng)用中使用的傳輸協(xié)議都是在UART的基礎(chǔ)上擴(kuò)展而來。例如:DMX512,LIN,MIDI以及Modbus等,其底層的通訊基礎(chǔ)都是UART協(xié)議。、
根據(jù)這個(gè)特點(diǎn),DSView同時(shí)支持多層協(xié)議的解析堆疊。當(dāng)我們添加一個(gè)復(fù)雜協(xié)議的解碼器時(shí),DSView會自動從頂層構(gòu)建整個(gè)協(xié)議棧,從而使得解碼的結(jié)果更加豐富和完善,非常有助于用戶對協(xié)議的深入分析和理解。
我們以Modbus RTU為例,來了解一下DSView分析多層協(xié)議的過程?;赨ART的字節(jié)傳輸功能,Modbus RTU詳細(xì)的規(guī)定了每個(gè)字節(jié)的具體意義,這樣通過把多個(gè)UART協(xié)議幀組合在一起便形成了Modbus的幀結(jié)構(gòu)。如下圖所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 5?1 Modbus RTU主站設(shè)備請求幀格式
在使用DSView進(jìn)行此類協(xié)議解碼時(shí),只需要在協(xié)議搜索框輸入對應(yīng)的協(xié)議并添加即可。DSView會自動構(gòu)建整個(gè)堆疊協(xié)議的設(shè)置頁面,如下圖所示,用戶進(jìn)行相應(yīng)的設(shè)置即可。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 5?2 Modbus解碼器的設(shè)置
? ? ?如下圖所示,從Modbus RTU的解碼結(jié)果可以清晰的看出協(xié)議的堆疊結(jié)構(gòu)。每一幀的Modbus由8個(gè)UART字節(jié)幀組成。Modbus幀的內(nèi)容也會有清晰的注釋標(biāo)明其具體的含義。當(dāng)出現(xiàn)傳輸錯(cuò)誤時(shí),這樣的解碼結(jié)果可以非常清晰的定位錯(cuò)誤的位置,以及錯(cuò)誤的原因(是底層UART的問題,還是Modbus協(xié)議層的問題)。如果不希望看到底層的細(xì)節(jié),在解碼器的設(shè)置頁面把對應(yīng)的解碼內(nèi)容隱藏即可。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 5?3 Modbus解碼
The post 最詳細(xì)的UART通訊協(xié)議分析在這里 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post DSView軟件安裝與常見問題 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>The post DSView軟件安裝與常見問題 first appeared on DreamSourceLab(邏輯分析儀/示波器).
]]>