2015-10-28 193 views
0

我們正在將使用SPP(串行端口配置文件)通過藍牙和開發人員使用某種類型的協議和分組傳送的辯論,而不只是流數據而沒有任何形式的應用程序的工作ACK,序列或大小信息。藍牙串口通信(SPP)

確實藍牙提供保證交付和數據完整性,使我們並不需要一個數據包協議設計的開銷?我們能否僅僅依靠藍牙來確保數據的傳輸?

+0

[本答案](http://stackoverflow.com/questions/14498530/bluetooth-android-rfcomm-spp-error-handling-suggestions)是Android中的上下文,但是更一般地適用於SPP。 – kaylum

+0

謝謝!這很有幫助! :) – BravoZulu1

回答

1

本質BT有轉移自己的安全機制。但是,這一點同樣重要 - 我命令您知道數據何時開始並結束,您應該使用數據包類型傳輸,例如STX和ETX來分隔每個數據包。有些軟件狗堅持重傳最後發送的字節的壞習慣,如果在傳輸中有時間流逝,但遇到ETX或EOT時它們將停止。 而且,爲了您的系統安全,您最好在數據包末尾包含校驗和。那麼你很確定。

0

交付有保證嗎?,

交貨的順序是有保證的。這是由於內置於藍牙協議下層的確認/序列編號方案。所以在較低層,數據包被重新傳輸,直到它被確認。請注意,這相當於停止並等待ARQ方案。如果花費比超時,則連接被認爲是丟失(通常30秒)

被數據完整性保證更?

藍牙4.2引入了BT安全連接。這包括一個消息集成檢查(MIC),每個發送的數據包和接收端的MIC不匹配都會觸發重新發送,並且一些MIC不匹配可能會斷開連接。

,所以如果你不使用安全連接功能,那麼完整性無法保證。有一個用於保護數據的16位CRC方案,但已知在很長一段時間內會出現CRC逃逸(位翻轉,CRC保持正確)。但這種情況比較少見,發生在嘈雜的環境中。如果您的應用程序需要非常高的數據完整性,則可以使用SecureConnection或引入應用程序級別完整性檢查。

注意SPP資料本身沒有任何錯誤/序列檢查,RFCOMM具有8比特FCS(幀校驗序列),其檢查用於報頭損壞。 L2CAP流/重傳模式有一個可選的16位FCS,其中包含L2CAP頭和數據。請注意,基本的L2CAP模式根本沒有FCS。

如果您可以選擇啓用L2CAP FCS,那麼您在L2CAP層具有低位+ 16位FCS的16位CRC +在RFCOMM級別具有8位FCS將提供足以滿足大多數應用程序的數據完整性。不過,如前所述,如果它非常重要,那麼您需要引入其他應用程序級別的完整性檢查。