2016-01-26 27 views
0

我使用XBee DigiMesh 2.4 API-2和樹莓派。我從一個節點向另一個節點廣播一幀。 7E 0 10 90 0 7D 33:XBee DigiMesh奇怪的位在幀和錯誤的校驗和

幀來傳送:在所述另一節點 7E 0 12 10 1 0 0 0 0 0 0 FF FF FF FE接收0 0 41 6C 65 78 69

幀A2 0 40 91 57 26 FF FE C2 41 6C 65 78 1E

字節被打擾我,是C2。它應該是02.爲什麼它以這種方式出現? 更重要的是,校驗和不正確(我讀了如何在API 2模式下計算校驗和)。

隨着字節0x02它應該是0xe3或與字節c2應該是0x23。我試圖在很多方面獲得結果0x1e,但我從來沒有得到這個值。

當我在相反方向(從第二個節點到第一個節點)廣播數據包時,出現相同的問題。

兩個XBee的可配置波特率爲9600,無奇偶校驗。樹莓派UART也是如此。


-----編輯:我發現關於向C2字節的答案。 C2是一個位域。 C2 = 1100 0010. 位7和位6是11,這意味着它是Digimesh。位1被設置爲它是一個廣播數據包。 https://dl.dropboxusercontent.com/u/318853/XBee%20900.PNG

仍在尋找這個校驗和的原因。

回答

1

您可以通過使用API​​模式1來簡化您的代碼,並避免在發送和接收它們時需要轉義和忽略值。如果您的代碼在框架中間忽略0x7E,那麼確實沒有那麼困難:如果您看到0x7E後跟無效的長度,請繼續觀看。如果您的幀的校驗和不正確,請跳過0x7E並查找下一個。

如果您絕對必須使用轉義,請確保幀中的長度值和校驗和不包含轉義字節,並且您在發送時正確地轉義了必要的字節。

在接收端,使用字節計算校驗和。