示波器的協(xié)議解碼功能大家都不生疏,你是否有過波形看起來正常,協(xié)議參數(shù)、解碼設(shè)置都正確,卻無法正常解碼的經(jīng)歷呢?本文以UART協(xié)議為例,分享由于波特率漂移導(dǎo)致通信異常的故障排查過程。
什么是波特率漂移呢?可以理解為被測部件晶振有偏差,導(dǎo)致實(shí)際波特率和正常的波特率不一致。為什么波特率漂移會(huì)導(dǎo)致通信異常呢?本文從波形出發(fā),帶你自檢解碼結(jié)果。
引出這樣一個(gè)真實(shí)的例子,PC端發(fā)送串口數(shù)據(jù)為“0EE 061 032 0FF 0FC 0FF 0FF”,示波器解碼結(jié)果為“0EE 098 0F6 0FC 0FF”初步判定通信故障。但協(xié)議參數(shù)設(shè)置和解碼設(shè)置都正確,為什么會(huì)出現(xiàn)收發(fā)不一致的現(xiàn)象呢?下文將解碼時(shí)協(xié)議參數(shù)設(shè)置中的波特率都設(shè)置為9600 bps,實(shí)際為9600 bps,10126 bps的波形圖解碼結(jié)果對比(如圖1所示)分析為例,分享波特率漂移后導(dǎo)致波形有偏差,從而出現(xiàn)通信異常的原因排查過程。
圖1 同一解碼波特率下的不同波形解碼結(jié)果圖
首先講講UART的解碼原理。當(dāng)示波器解碼UART信號(hào)時(shí),將空閑電平之后的下降沿作為開始位,然后從波形中等間隔采樣,以等間隔時(shí)間段內(nèi)的采樣點(diǎn)中的多數(shù)狀態(tài)作為該位的解碼數(shù)值。不同波特率的波形,最小數(shù)據(jù)位寬不一致,時(shí)間T=1/采樣率,實(shí)際采樣率大的波形對應(yīng)的時(shí)間就小,所以從圖1中可看出波特率為10126bps的波形像往左偏移了。當(dāng)解碼時(shí)設(shè)置的波特率同為9600時(shí),采樣點(diǎn)的位置是根據(jù)9600的波特率來確定的,當(dāng)實(shí)際采樣率和9600bps有偏差時(shí),誤差會(huì)逐漸累積,從而導(dǎo)致解碼有偏差。設(shè)置的數(shù)據(jù)位寬越大,越容易疊加誤差。
二、自檢波特率方法
從波形出發(fā),根據(jù)波形最小位寬估算波特率,此法適用于波特率偏差較大或不確定波特率該設(shè)置多少時(shí)。這是工程師們較習(xí)慣的自檢方法。估算波特率需要看波形中的最小位寬,從來圖 2看,時(shí)基檔位為100us,最小位寬剛好占一格,則最小位寬為100us左右,換算之后等于10000bps。想要得到更精確的波特率數(shù)值,可以使用示波器的測量功能。打開示波器面板中的【measure】,選擇波特率測量項(xiàng),觀察波特率測量結(jié)果對比,如下圖 2紅框內(nèi)的測量結(jié)果。
開頭中引出的例子,正是因?yàn)椴ㄌ芈十a(chǎn)生了漂移,實(shí)際為10000 bps,而解碼時(shí)按照正常部件的9600bps來設(shè)置,這么一算,波特率誤差大于4%,因此會(huì)導(dǎo)致解碼結(jié)果不正確。換個(gè)晶振再解碼,通訊果然正常了。
圖 2 從波形最小位寬估算波特率圖
總結(jié)
在解碼中波特率雖然只是一個(gè)參數(shù),但因其漂移產(chǎn)生的影響不容忽視,它可能就是導(dǎo)致通信故障的因素。解碼前注意檢驗(yàn)波特率,這么一個(gè)小細(xì)節(jié)也許可以省去日后排查故障的時(shí)間。從波形出發(fā),重新審視示波器價(jià)值,它用來觀察波形和分析數(shù)據(jù)就是為了檢測被測部件是否正常的。