示波器協議解碼小問題中的大學問
2016-04-13
案例分析
南京某公司在使用我們的M287-128WI ARM9核心板研發一款車載設備產品,需要使用M287-128WI核心板的串口與客戶外購的車載設備對接通訊。這款外購車載設備給的串口設置參數為:波特率9600;數據位8位;停止位0;校驗位無。于是客戶把M287-128WI的串口配置按照以上參數進行配置,并進行通訊。但是整個通訊過程中,M287-128WI接收外購車載設備的串口數據一直出現數據丟包的情況,并多次質疑M287-128WI串口驅動存在BUG。我公司軟件工程師對軟件驅動進行逐一排查,但一直未找到問題的根源,于是決定上門進行支持!
解碼不正確
到了現場,我們在假設軟件沒有BUG的情況下,那么尋找問題思路就轉到外購的車載設備串口總線的實際信號,因為信號波形是數據分析的直接源頭,是問題本質的反映。于是使用致遠ZDS2022示波器觀察外購的車載設備串口信號波形情況,在高達330Kwfms波形刷新率下,打開一鍵余輝功能,并沒有發現異常信號,這說明串口上是沒有干擾信號的,符合串口的電氣規范。
接下來就是要利用ZDS2022示波器的串口協議解碼功能對數據流進行分析。按照設備的資料,將ZDS2022示波器參數配置為:波特率設置為9600;數據位為8位;停止位為0;校驗位為無(注意RS232 電平跟 TTL的232 電平是相反的,如果測試RS232電平,需要將電平設置為反相,需要設置為TRUE),設置結果詳見圖1。
圖1 協議參數設置
ZDS2022示波器輸入參數設置完后,會對波形自動解碼。但問題來了,出現了如圖2中解碼的界面。很明顯,圖2中有一段信號ZDS2022示波器并沒有有效解碼,這到底是怎么回事呢?
圖2 UART協議解碼
分析問題
UART協議的幀包格式主要包含四個段:開始位、數據段、校驗位(可有可無)和停止位。停止位的位數可以設置為1位或者2位,數據值為1。
圖3 UART協議格式
外購車載設備肯定是UART協議,而且波特率確定是9600,數據位寬也是確定的,但為什么沒有正確解碼呢?我們先假設如圖4中橙色實線框中解出來的數據是正確的,并可知解碼數據包含起始位、數據位和停止位。由于該協議波特率和位寬固定,所以猜測一幀的長度大約為1ms,在圖4實線框中波形后面出現一段空閑電平,然后出現一個上升沿,我們假設該上升沿后為起始位,根據猜測,一幀的長度大約為1ms,確定可能的停止位,如圖4中橙黃色虛線框內波形,很明顯,該停止位根本就不符合邏輯,起始位為邏輯0(表現為高電平),停止位應該為邏輯1(表現為低電平),所以該停止位是無效的,故該幀沒有有效解碼。同樣,第二個虛線框中的協議波形也是一樣,猜測可能停止位設置不符合邏輯,造成ZDS2022示波器沒能有效的對波形進行解碼。
圖4 UART協議解碼分析圖
我們觀察到,兩個虛線框中可能的UART幀的結束位全都表現為高電平(與可能的開始位是相同的邏輯0),該特征表明可能存在一個校驗位。我們假設該協議中包含一個校驗位,在圖4中橙色虛線框波形中,原來可能的邏輯0(表現為高電平)的停止位就變成了邏輯0的校驗位,如此一來,原來的停止位就變成邏輯1(表現為低電平)了。并根據之前觀察的波形特征來看,兩虛線框中可能的結束位全都是邏輯0,而正好符合Space(邏輯總為0,與開始位的邏輯相同)的特征。根據假設,重新對ZDS2022示波器UART協議進行了參數設置,增加一位Space的校驗位。
圖5 參數設置加入校驗位
當添加一位校驗位后,我們得到如圖6的解碼界面,該UART協議已經正確解碼!
圖6 加入校驗位后解碼界面圖
數據觸發,再次驗證
在確認串口設置(波特率9600;數據位8位;停止位0;校驗位Space)后,由于ZDS2022示波器不僅具有強大的協議解碼功能,同時支持21種協議觸發功能。將ZDS2022協議觸發設置成ON,可對協議觸發參數進行設置,由于設備的幀協議已經明確標示,數據幀中會存在0xEE,0xC0開頭的數據和0xCC結尾的數據,將觸發模式設置為數據觸發,觸發數據設為0xC0。如圖7所示。
圖7 數據觸發設置
協議觸發參數設置完成后,得到圖8的協議觸發波形,由圖可見,觸發點已精確觸發在0xC0處,定位迅速,十分準確!由此成功的數據觸發操作,再次驗證了對該協議的各種參數設置的正確性。
圖8 數據觸發解碼界面圖
解決問題
借助ZDS2022示波器強大的協議解碼功能,我們已經分析清楚了設備的串口通訊的協議設置情況(波特率9600;數據位8位;停止位0;校驗位Space),而非之前的提到的串口設置參數(波特率9600;數據位8位;停止位0;校驗位無)。下一步是就解決i.MX28X的通訊串口驅動問題。由于i.MX28X處理器的串口外設不支持Space校驗位設置,通訊過程中,驅動對校驗失敗的數據進行丟棄處理,因此就造成文章開頭的丟數據的原因。通過驅動軟件修改,拋棄串口校驗功能,將原來丟棄的數據強制轉發給應用程序,成功地接收了設備發送過來的串口數據。
小結
在項目軟件開發過程中,經常會碰到了各種各樣的通訊設備通訊失敗問題,可以使用ZDS2022示波器的21種協議觸發與解碼功能對原始信號分析,而且21種協議觸發與解碼功能完全免費開放。如本文中用到UART協議分析,支持多種參數設置,不僅包括奇校驗、偶校驗、Mark、Space和None 這5種校驗模式,還包括開始位與數據觸發模式。詳細的參數設置幫您精準分析協議,快速定位問題,大膽做出假設,迅速解決問題,值得信賴!
當問題解決后,您收獲的不僅是體驗到了ZDS2022協議觸發與解碼的功能的強大,更重要的是您收獲了一個解決問題的推理思維!
圖9 演示現場
廣州致遠電子股份有限公司朱經理現場演示ZDS2022串口協議觸發與解碼功能來分析設備的通訊串口協議數據。