Zigbee疑難問題定位以及思路方法分享 (一)

        最近換了家新公司,花了兩個月從不懂ZigBee到解決了不少遺留偶發BUG,有了不少心得體會,下面分享下自己定位思路,以及分析問題的方法。

        剛進公司,接手了另一個工程師做的ZigBee項目(採用CC2530方案),遺留不少問題BUG,前兩週看代碼,熟悉ZigBee協議,當前遺留了有不少BUG,其中丟包率高、經常性的掉線並且不能自恢復、入網速度慢、入網後概率性的掉線這幾個問題最爲急切解決,我選擇了一個相對簡單解決的問題入手----丟包率高。

        首先大概分析了一下,丟包率高有幾個可能性的問題:1、外界干擾;2、防衝突機制以及CCA閾值;3、軟件BUG。

        其中1是沒辦法的,只能通過修改信道,錯開WIFI干擾區間,如下圖

由以前的18、25、26信道,改爲11、15、20、26信道,大致測試了一下,相對稍微改善一下,但依舊沒有得到質的提升。

        採取2方法,因爲CC2530防衝突機制底層封裝成庫了,無法進行改善,既然底層無法改善,那就修改參數,於是乎,修改了CCACTRL0寄存器裏的CCA_THR寄存器,經過反覆嘗試,選擇到一個最佳的值(詳細步驟就不說了),但是依舊沒有得到預期效果。

       採取3方法,懷疑程序有BUG,但是看代碼沒有問題,因此根據之前經驗,有線的有問題就抓波形,無線有問題就抓包,開始認真研讀802.15協議以及ZigBee協議,通過抓包分析,後來突發奇想,既然發送數據錯誤,就看看錯誤原因,於是在

在AF_DataRequest函數返回值進行仿真,查看ret的結果值,無意間嘗試,把協調器斷電,設備發數據,理論上應該得到錯誤值,但是這個值確是0,我懷疑數據有沒有發出去,通過抓包,發現

一直在發數據,沒有收到ACK,才知道,判斷髮送是否成功的地點出錯,程序BUG,通過調試,發現在

這裏面纔是有無收到ACK狀態返回,斷開網關,返回值在0xe9,信道繁忙,返回值是0xe1,定義在zcomdef.h定義,通過修改,解決了丟包率高的一系列問題,當然還有關聯時間過長等問題,稍後分享

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章