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